Eine Schwachstelle in den Netzwerkbibliotheken der Sprachen Rust und Go ermöglicht es, die IP-Adressprüfung zu umgehen.

In den Standardbibliotheken der Sprachen Rust und Go wurden Schwachstellen entdeckt, die mit der fehlerhaften Verarbeitung von IP-Adressen mit oktalen Ziffern in den Adressanalysefunktionen zusammenhängen. Diese Schwachstellen ermöglichen es, die Überprüfungen gültiger Adressen in Anwendungen zu umgehen, zum Beispiel beim Zugriff auf Loopback-Adressen (127.x.x.x) oder Intranet-Subnetze im Rahmen von SSRF-Angriffen (Server-Side Request Forgery). Diese Probleme setzen einen Zyklus von Problemen fort, die bereits in den Bibliotheken 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) und Net::Netmask (Perl, CVE-2021-29424) festgestellt wurden.

Gemäß der Spezifikation sind die Zeichenfolgenwerte IP-Adressen, die mit einer Null beginnen, sollten als octale Zahlen interpretiert werden. Viele Bibliotheken berücksichtigen jedoch diese Besonderheit nicht und werfen einfach die Null ab, wobei sie den Wert als dezimale Zahl behandeln. Zum Beispiel entspricht die Zahl 0177 im octalen System 127 im dezimalen System. Ein Angreifer könnte eine Ressource anfordern, indem er den Wert „0177.0.0.1“ angibt, der im dezimalen Format „127.0.0.1“ entspricht. Bei Verwendung einer problematischen Bibliothek erkennt die Anwendung möglicherweise nicht, dass die Adresse 0177.0.0.1 im Subnetz 127.0.0.1/8 enthalten ist. Tatsächlich kann bei der Absendung der Anfrage jedoch ein Zugriff auf die Adresse „0177.0.0.1“ ausgeführt werden, die von den Netzwerkfunktionen als 127.0.0.1 verarbeitet wird. Ähnlich kann die Überprüfung des Zugriffs auf Intranet-Adressen trickreich umgangen werden, indem Werte wie „012.0.0.1“ angegeben werden (entspricht „10.0.0.1“).

In Rust wurde die Standardbibliothek „std::net“ (CVE-2021-29922) von dem Problem betroffen. Der IP-Adressparser dieser Bibliothek ignorierte die Null vor Werten in der Adresse, allerdings nur, wenn nicht mehr als drei Ziffern angegeben waren. Zum Beispiel wird „0177.0.0.1“ als ungültiger Wert betrachtet, während „010.8.8.8“ und „127.0.026.1“ ein falsches Ergebnis zurückliefern. Anwendungen, die std::net::IpAddr zur Analyse benutzerdefinierter Adressen verwenden, sind potenziell anfällig für SSRF- (Server-Side Request Forgery), RFI- (Remote File Inclusion) und LFI-Angriffe (Local File Inclusion). Die Schwachstelle wurde in der Version Rust 1.53.0 behoben.

Eine Schwachstelle in den Netzwerkbibliotheken der Sprachen Rust und Go ermöglicht es, die IP-Adressprüfung zu umgehen.

In der Programmiersprache Go ist die Standardbibliothek „net“ (CVE-2021-29923) von dem Problem betroffen. Die eingebaute Funktion net.ParseCIDR überspringt Nullen vor oktalen Zahlen anstatt sie zu verarbeiten. Zum Beispiel könnte ein Angreifer den Wert 00000177.0.0.1 übergeben, der bei der Überprüfung in der Funktion net.ParseCIDR(00000177.0.0.1/24) als 177.0.0.1/24 interpretiert wird, anstatt als 127.0.0.1/24. Das Problem tritt zudem in der Kubernetes-Plattform auf. Die Schwachstelle wurde in der Go-Version 1.16.3 und in der Beta-Version 1.17 behoben.

Eine Schwachstelle in den Netzwerkbibliotheken der Sprachen Rust und Go ermöglicht es, die IP-Adressprüfung zu umgehen.
Video abspielen


Quelle: opennet.ru
Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster