È stata scoperta una vulnerabilità in FreeBSD (CVE-2022-23093) nell'utilità ping, inclusa nella fornitura di base. Il problema potrebbe potenzialmente portare all'esecuzione remota di codice con privilegi di root quando si esegue il ping a un host esterno controllato da un attaccante. La correzione è proposta negli aggiornamenti di FreeBSD 13.1-RELEASE-p5, 12.4-RC2-p2 e 12.3-RELEASE-p10. Non è ancora chiaro se altre versioni di BSD siano vulnerabili (non ci sono stati rapporti di vulnerabilità per NetBSD, DragonFlyBSD e OpenBSD).
La vulnerabilità è causata da un overflow di buffer nel codice di parsing dei messaggi ICMP ricevuti in risposta a una richiesta di verifica. Il codice di invio e ricezione dei messaggi ICMP in ping utilizza raw socket ed è eseguito con privilegi elevati (l'utilità viene fornita con il flag setuid root). La gestione della risposta avviene sul lato ping ricostruendo gli header IP e ICMP dei pacchetti ricevuti dal raw socket. Gli header IP e ICMP assegnati vengono copiati dalla funzione pr_pack() in buffer, senza considerare che possono essere presenti ulteriori header estesi nel pacchetto dopo l'header IP.
Tali header vengono estratti dal pacchetto e inclusi nel blocco header, ma non sono considerati nel calcolo della dimensione del buffer. Se un host restituisce un pacchetto con header aggiuntivi in risposta a una richiesta ICMP, il loro contenuto verrà scritto oltre i limiti del buffer nello stack. Di conseguenza, un attaccante può sovrascrivere fino a 40 byte di dati nello stack, il che potenzialmente consente l'esecuzione del proprio codice. La gravità del problema è mitigata dal fatto che, al momento del verificarsi dell'errore, il processo si trova in uno stato di isolamento delle chiamate di sistema (capability mode), il che rende difficile l'accesso al resto del sistema dopo lo sfruttamento della vulnerabilità.
Fonte: opennet.ru
