Vulnerabilità nelle librerie di rete dei linguaggi Rust e Go che consente di eludere il controllo degli indirizzi IP.

Nelle librerie standard dei linguaggi Rust e Go sono state rilevate vulnerabilità relative alla gestione scorretta degli indirizzi IP con cifre ottali nelle funzioni di parsing degli indirizzi. Le vulnerabilità consentono di eludere i controlli sugli indirizzi validi nelle applicazioni, ad esempio per accedere ad indirizzi del loopback (127.x.x.x) o sottoreti intranet durante attacchi SSRF (Server-side request forgery). Le vulnerabilità proseguono il ciclo di problemi già evidenziati nelle librerie node-netmask (JavaScript, CVE-2021-28918, CVE-2021-29418), private-ip (JavaScript, CVE-2020-28360), ipaddress (Python, CVE-2021-29921), Data::Validate::IP (Perl, CVE-2021-29662) e Net::Netmask (Perl, CVE-2021-29424).

Secondo le specifiche, i valori stringa indirizzi IP, che iniziano con zero, devono essere interpretati come numeri ottali, ma molte librerie non tengono conto di questa particolarità e scartano semplicemente lo zero, trattando il valore come un numero decimale. Ad esempio, il numero 0177 nel sistema ottale è uguale a 127 in decimale. Un attaccante può richiedere una risorsa specificando il valore "0177.0.0.1", che nel formato decimale corrisponde a "127.0.0.1". In caso di utilizzo di una libreria problematica, l'applicazione non riconoscerà l'appartenenza dell'indirizzo 0177.0.0.1 alla subnet 127.0.0.1/8, ma in realtà, inviando la richiesta, può effettuare una chiamata all'indirizzo "0177.0.0.1", che le funzioni di rete tratteranno come 127.0.0.1. Allo stesso modo si può ingannare anche il controllo degli accessi agli indirizzi intranet specificando valori come "012.0.0.1" (equivalente a "10.0.0.1").

In Rust, il problema ha coinvolto la libreria standard "std::net" (CVE-2021-29922). Il parser degli indirizzi IP di questa libreria scartava lo zero prima dei valori nell'indirizzo, ma solo se erano specificate non più di tre cifre; ad esempio, "0177.0.0.1" verrà percepito come un valore non valido, mentre per 010.8.8.8 e 127.0.026.1 verrà restituito un risultato errato. Le applicazioni che utilizzano std::net::IpAddr per il parsing degli indirizzi forniti dagli utenti sono potenzialmente vulnerabili ad attacchi SSRF (Server-side request forgery), RFI (Remote File Inclusion) e LFI (Local File Inclusion). La vulnerabilità è stata corretta nella versione Rust 1.53.0.

Vulnerabilità nelle librerie di rete dei linguaggi Rust e Go che consente di eludere il controllo degli indirizzi IP.

Nel linguaggio Go, la libreria standard «net» presenta un problema (CVE-2021-29923). La funzione incorporata net.ParseCIDR ignora gli zeri davanti ai numeri ottali, invece di elaborarli. Ad esempio, un attaccante può inviare il valore 00000177.0.0.1, che durante il controllo nella funzione net.ParseCIDR(00000177.0.0.1/24) verrà interpretato come 177.0.0.1/24, e non come 127.0.0.1/24. Questo problema si manifesta anche nella piattaforma Kubernetes. La vulnerabilità è stata corretta nella versione Go 1.16.3 e nella versione beta 1.17.

Vulnerabilità nelle librerie di rete dei linguaggi Rust e Go che consente di eludere il controllo degli indirizzi IP.
Guarda il video


Fonte: opennet.ru
Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster