Vulnerabilità nella chiamata di sistema execve che concede l'accesso root in FreeBSD

È stata scoperta una vulnerabilità (CVE-2026-7270) in FreeBSD che consente a un utente non privilegiato di eseguire codice del kernel e ottenere l'accesso root al sistema. La vulnerabilità interessa tutte le versioni di FreeBSD rilasciate dal 2013. Un exploit è disponibile pubblicamente ed è stato testato su sistemi con FreeBSD dalla versione 11.0 alla 14.4. La vulnerabilità è stata corretta nelle versioni FreeBSD 15.0-RELEASE-p7, 14.4-RELEASE-p3, 14.3-RELEASE-p12 e 13.5-RELEASE-p13. È disponibile una patch per le versioni precedenti.

Il problema è causato da un buffer overflow nella chiamata di sistema execve. Questo si verifica durante l'elaborazione del prefisso specificato nella prima riga degli script per determinare il percorso dell'interprete (ad esempio, "#!/bin/sh"). L'overflow si verifica durante una chiamata alla funzione memmove a causa di un'espressione matematica costruita in modo errato per il calcolo della dimensione degli argomenti copiati nel buffer. Invece di sottrarre i valori di "args->begin_argv" e "consume" da "args->endp", è stato sottratto solo il valore di "args->begin_argv" da "args->endp" e la variabile "consume" è stata aggiunta al risultato, anziché sottratta, ovvero, di conseguenza, sono stati copiati più dati di due valori di "consume". memmove(args->begin_argv + extend, args->begin_argv + consume, - args->endp - args->begin_argv + consume); + args->endp — (args->begin_argv + consume));

La vulnerabilità di overflow consente di sovrascrivere elementi della struttura "exec_map" allocati in memoria adiacente da un altro processo. L'exploit sfrutta l'overflow per sovrascrivere il contenuto di "exec_map" dei processi privilegiati avviati periodicamente sul sistema. Il processo scelto è sshd, che, ogni volta che viene stabilita una connessione di rete, crea un processo figlio (fork) ed esegue il processo "/usr/libexec/sshd-session" con privilegi di root.

L'exploit sostituisce la variabile d'ambiente "LD_PRELOAD=/tmp/evil.so" per questo processo, causando il caricamento della sua libreria nel contesto della sessione sshd. La libreria iniettata crea un file eseguibile denominato /tmp/rootsh nel filesystem con il flag suid root. La percentuale di successo dell'exploit è stimata allo 0.6%, ma grazie al meccanismo di retry ciclico, lo sfruttamento con successo si ottiene in circa 6 secondi su un sistema con una CPU a 4 core.

 Vulnerabilità nella chiamata di sistema execve che concede l'accesso root in FreeBSD

Inoltre, in FreeBSD sono state corrette diverse altre vulnerabilità:

  • Le vulnerabilità CVE-2026-35547 e CVE-2026-39457 sono buffer overflow nella libreria libnv, utilizzata nel kernel e nelle applicazioni di sistema di base per elaborare liste chiave/valore e gestire la comunicazione tra processi. Il primo problema è causato da un calcolo errato della dimensione del messaggio durante l'elaborazione di intestazioni di messaggi IPC appositamente create. Il secondo problema provoca uno stack overflow durante la comunicazione tramite socket a causa della mancanza di controlli per garantire che la dimensione del descrittore del socket corrisponda alla dimensione del buffer utilizzato nella funzione select(). Queste vulnerabilità possono potenzialmente essere sfruttate per elevare i privilegi.
  • CVE-2026-42512 è una vulnerabilità di buffer overflow sfruttabile da remoto in dhclient, dovuta a un calcolo errato della dimensione di un array di puntatori utilizzato per passare variabili d'ambiente a dhclient-script. È possibile creare un exploit per l'esecuzione di codice da remoto inviando un pacchetto DHCP appositamente predisposto.
  • CVE-2026-7164 – Si verifica una vulnerabilità di stack overflow nel filtro pacchetti pf durante l'elaborazione di pacchetti SCTP appositamente creati. Il problema è causato da un'analisi ricorsiva illimitata dei parametri SCTP.
  • CVE-2026-42511 – È possibile inserire direttive arbitrarie nel file dhclient.conf a causa di una gestione inadeguata dei caratteri di escape per le doppie parentesi quadre nei campi BOOTP ricevuti da un server DHCP esterno. Quando il processo dhclient analizza successivamente questo file, il campo specificato dall'attaccante viene passato a dhclient-script, che può essere utilizzato per eseguire comandi arbitrari con privilegi di root sui sistemi che eseguono dhclient quando accedono a un server DHCP controllato dall'attaccante.
  • CVE-2026-6386 — Gestione insufficiente delle pagine di memoria di grandi dimensioni nella funzione kernel pmap_pkru_update_range(). Un utente non privilegiato può fare in modo che pmap_pkru_update_range() tratti la memoria dello spazio utente come una pagina nella tabella delle pagine di memoria, sovrascrivendo così una regione di memoria non autorizzata.
  • CVE-2026-5398 - Un riferimento a una regione di memoria precedentemente liberata nel gestore TIOCNOTTY consente a un processo non privilegiato di ottenere i privilegi di root.

Fonte: opennet.ru