Sicherheitslücke in den Netzwerkbibliotheken der Sprachen Rust und Go, die es Ihnen ermöglicht, die Überprüfung der IP-Adresse zu umgehen

In den Standardbibliotheken der Sprachen Rust und Go wurden Schwachstellen im Zusammenhang mit der fehlerhaften Verarbeitung von IP-Adressen mit Oktalziffern in Adressanalysefunktionen identifiziert. Die Schwachstellen ermöglichen es, Überprüfungen auf gültige Adressen in Anwendungen zu umgehen, um beispielsweise den Zugriff auf Loopback-Schnittstellenadressen (127.xxx) oder Intranet-Subnetze bei der Durchführung von SSRF-Angriffen (Server-side request forgery) zu organisieren. Die Schwachstellen setzen den Zyklus von Problemen fort, die zuvor 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).

Gemäß der Spezifikation sollten IP-Adresszeichenfolgenwerte, die mit einer Null beginnen, als Oktalzahlen interpretiert werden. Viele Bibliotheken berücksichtigen dies jedoch nicht und verwerfen einfach die Null und behandeln den Wert als Dezimalzahl. Beispielsweise entspricht die Zahl 0177 im Oktalformat der Zahl 127 im Dezimalformat. Ein Angreifer kann eine Ressource anfordern, indem er den Wert „0177.0.0.1“ angibt, der in Dezimalschreibweise „127.0.0.1“ entspricht. Wenn die problematische Bibliothek verwendet wird, erkennt die Anwendung nicht, dass sich die Adresse 0177.0.0.1 im Subnetz 127.0.0.1/8 befindet, sondern kann beim Senden einer Anfrage tatsächlich auf die Adresse „0177.0.0.1“ zugreifen, die die Netzwerkfunktionen werden als 127.0.0.1 verarbeitet. Auf ähnliche Weise können Sie die Überprüfung des Zugriffs auf Intranetadressen durch die Angabe von Werten wie „012.0.0.1“ (entspricht „10.0.0.1“) betrügen.

In Rust war die Standardbibliothek „std::net“ von einem Problem betroffen (CVE-2021-29922). Der IP-Adressparser dieser Bibliothek verwarf eine Null vor den Werten in der Adresse, aber nur, wenn nicht mehr als drei Ziffern angegeben wurden, würde beispielsweise „0177.0.0.1“ als ungültiger Wert und falsches Ergebnis wahrgenommen würde als Antwort auf 010.8.8.8 und 127.0.026.1 zurückgegeben werden. Anwendungen, die std::net::IpAddr beim Parsen benutzerdefinierter Adressen verwenden, sind potenziell anfällig für SSRF- (Server-side Request Forgery), RFI- (Remote File Inclusion) und LFI- (Local File Inclusion) Angriffe. Die Schwachstelle wurde im Rust 1.53.0-Zweig behoben.

Sicherheitslücke in den Netzwerkbibliotheken der Sprachen Rust und Go, die es Ihnen ermöglicht, die Überprüfung der IP-Adresse zu umgehen

In Go ist die Standardbibliothek „net“ betroffen (CVE-2021-29923). Die integrierte Funktion net.ParseCIDR überspringt führende Nullen vor Oktalzahlen, anstatt sie zu verarbeiten. Beispielsweise kann ein Angreifer den Wert 00000177.0.0.1 übergeben, der bei Überprüfung in der Funktion net.ParseCIDR(00000177.0.0.1/24) als 177.0.0.1/24 und nicht als 127.0.0.1/24 geparst wird. Das Problem manifestiert sich auch in der Kubernetes-Plattform. Die Sicherheitslücke wurde in Go-Version 1.16.3 und Beta 1.17 behoben.

Sicherheitslücke in den Netzwerkbibliotheken der Sprachen Rust und Go, die es Ihnen ermöglicht, die Überprüfung der IP-Adresse zu umgehen


Source: opennet.ru

Kommentar hinzufügen