Parasoft-Logo

Analyse von Baron Samedit (Sudo CVE-2021-3156)

By Parasoft 23. Februar 2021 4 min gelesen

Baron Samedit ist eine große Pufferüberlauf-Schwachstelle, die sich auf das Linux-Ökosystem auswirkt. Als neue Form der Schwachstelle versteht nicht jeder, was Baron Samedit ist und wie es sich auf Linux/Unix-Distributionen auswirken kann. Dieser Beitrag führt Sie durch alles, was Sie über diese Pseudo-Schwachstelle wissen müssen.

Analyse von Baron Samedit (Sudo CVE-2021-3156)

By Parasoft 23. Februar 2021 4 min gelesen

Baron Samedit ist eine große Pufferüberlauf-Schwachstelle, die sich auf das Linux-Ökosystem auswirkt. Als neue Form der Schwachstelle versteht nicht jeder, was Baron Samedit ist und wie es sich auf Linux/Unix-Distributionen auswirken kann. Dieser Beitrag führt Sie durch alles, was Sie über diese Pseudo-Schwachstelle wissen müssen.

Am 26. Januar 2021 veröffentlichte Qualys a Blog Sie beschreiben ihre Erkenntnisse zur Heap-Overflow-Sicherheitslücke in sudo, CVE-2021-3156, die sie „Baron Samedit“ nannten.

Sudo ist ein zentrales Tool in vielen verschiedenen Linux / Unix-Distributionen, mit dem Benutzer Programme mit erhöhten Sicherheitsberechtigungen ausführen können. Es ist eine Komponente, die üblicherweise in Linux, BSD, macOS, AIX, Solaris und anderen enthalten und installiert ist.

Analyse von Baron Samedit (CVE-2021-3156) mit Insure ++

Ich werde Parasoft demonstrieren ++ versichern Erkennung von Speicherüberschreibungen und -überlesevorgängen mithilfe dieser Sicherheitslücke. Insure++ ist ein Speicher-Debugging-Tool, das patentierte Instrumentierungstechniken nutzt, um Speicherlecks und andere Speicherprobleme schnell zu identifizieren.

Insure ++ erleichtert das Erkennen, Verstehen und Beheben solcher Fehler erheblich als das Verwenden herkömmlicher Debugging-Tools und -Techniken.

Übersicht über Sicherheitslücken bei Baron Samedit (CVE-2021-3156)

Wenn anfällige Versionen von sudo (v1.8.2 - v1.9.5p1) mit einem Befehl im Shell-Modus ausgeführt werden und das Befehlszeilenargument mit einem einzelnen Backslash endet, kommt es zu einem Pufferüberlauf von sudo user_args Zeichenfolge tritt aufgrund eines Fehlers in der Art und Weise auf, wie Befehlszeilenargumente nicht maskiert werden.

Beim Entfernen des letzten "-Zeichens überschreibt die Funktion den Null-Terminator des Strings, was zu einem Pufferüberlauf führt. Eine detaillierte Beschreibung der Sicherheitslücke finden Sie im Original. Qualys Blog. Ich werde ähnliche Details behandeln, wenn wir die Ergebnisse von Insure ++ analysieren.

Einrichtung mit Insure ++

Um die Sicherheitsanfälligkeit in Insure ++ zu replizieren, müssen wir eine anfällige Version von sudo herunterladen und mit Insure ++ kompilieren. Die Quelle für sudo v1.9.5p1, die neueste anfällige Version, ist verfügbar hier auf der sudo website. Stellen Sie nach dem Entpacken des Quellcodes sicher, dass sich Insure ++ auf Ihrem Computer befindet PATH und stellen Sie Ihre CC zu "versichere gcc" vor dem Ausführen konfigurieren.

Sie sollten auch ein anderes Präfix festlegen, um das System sudo gegebenenfalls nicht zu überschreiben. Von hier laufen um und make install wie üblich.

Exploit ausführen

Der Artikel von Qualys enthielt einen einfachen Proof-of-Concept-Befehl, der die Sicherheitsanfälligkeit durch Pufferüberlauf demonstriert. Es ist wie folgt:

sudoedit -s '' 'perl -e 'print "A" x 65536''

Ersetzen Sudoedit mit dem Pfad zu dem, den Sie kompiliert haben, und führen Sie den Befehl aus.

Screenshot des Befehls zum Ausführen des Exploits CVE-2021-4156

Das können wir an der erkennen malloc Nachricht, dass der Proof of Concept ordnungsgemäß ausgeführt wurde.

Ergebnisse analysieren

Lassen Sie uns sehen, was Insure ++ gefunden hat, indem Sie die Ergebnisse im Insra-Fenster untersuchen.

Screenshot des Leseüberlaufs von Insure ++ sudoers.c (971) für CVE-2021-4156

Wir können sehen, dass der erste Speicherfehler ein Leseüberlauf ist, der in auftritt sudoers.c in Zeile 971. Insra sagt uns, dass die von Zeiger liest ein Byte außerhalb des Zwei-Byte-Speicherblocks, auf den er zeigt.

Beachten Sie, dass der Speicherblock zwei Bytes umfasst, da das erste Byte das Zeichen " und das zweite der Null-Terminator ist. Ein Stacktrace zeigt uns, dass dies in der set_cmnd () Funktion.

Die Bildschirmaufnahme von Insure ++ sudoers.c (972) hat einen fehlerhaften Index für CVE-2021-4156 gelesen

Der nächste Speicherfehler ist ein Lesevorgang von einer fehlerhaften Adresse in sudoers.c auf Linie 972. Seit dem von Zeiger ist bereits außerhalb der Grenzen, wie wir im ersten Speicherfehler gesehen haben, jeder indizierte Zugriff mit von wird ein schlechter Index sein.

Screenshot des Leseüberlaufs von Insure ++ sudoers.c (974) für CVE-2021-4156

Der nächste Speicherfehler ist ein Leseüberlauf, der in Zeile 974 aufgetreten ist. Hier dereferenzieren wir den Zeiger außerhalb der Grenzen von und schreiben Sie es in den Puffer, auf den der zeigt zu Zeiger.

Beachten Sie, dass Insure ++ den Ursprung dieser Speicherblöcke in allen vorhergehenden Speicherfehlern verfolgt. Insure ++ ist sich bewusst, dass der Speicherblock, den wir lesen, außerhalb der Grenzen dessen liegt, was ursprünglich als definiert wurde argv Parameter in der Main() Methode in sudo.c.

Screenshot des Schreibüberlaufs von Insure ++ sudoers.c (974) für CVE-2021-4156

 

Der nächste Speicherfehler ist ein Schreibüberlauf in derselben Anweisung wie zuvor. Jetzt wird Insure ++ beim Schreiben in den Puffer ausgelöst zu Zeiger zeigt auf. Beachten Sie, dass die Größe des Puffers zu zeigt auf 65539 Bytes. Die im Proof of Concept bereitgestellte Überlauf-Befehlszeichenfolge bestand aus einem "-Zeichen, einem Leerzeichen, 65536 'A'-Zeichen und einem impliziten Null-Terminator mit insgesamt 65539 Bytes.

Screenshot des Leseüberlaufs von Insure ++ sudoers.c (976) für CVE-2021-4156

Der nächste Speicherfehler tritt außerhalb von auf if Überprüfen Sie, ob "-Zeichen vorhanden sind. Warum führt dies jetzt zu einem Schreibüberlauf? Da frühere Speicherfehler die zu Zeiger auf Punkt außerhalb seines Speicherblocks, alle nachfolgenden Schreibvorgänge mit diesem Zeiger führen zu einem Schreibüberlauf.

Screenshot des Schreibüberlaufs von Insure ++ sudoers.c (978) für CVE-2021-4156

 

Hier sehen wir die endgültige Speicherbeschädigung, bei der das Programm null die Zeichenfolge beendet. Das ist absolut das richtige Verhalten! Der Schreibüberlauf tritt jedoch auf, weil die zu Der Zeiger ist beschädigt und zeigt bereits außerhalb des Speicherblocks, den er haben sollte.

Fazit

Wir können sehen, dass Parasoft Insure ++ die Analyse dieser Speicheranfälligkeit erheblich vereinfacht hat. Wir konnten schnell den Ort der Lese- und nachfolgenden Schreibüberläufe identifizieren, wissen, welche Variablen beteiligt waren, und sehen, wie sich der ungültige Zeiger auf nachfolgende Speicheroperationen auswirkte. In Kombination mit einer guten Testabdeckung und Fuzzing kann Insure ++ viele komplexe Speicherfehler viel einfacher verstehen, diagnostizieren und beheben.

Text mit der Aufschrift Laufzeit- und Speicherfehlererkennung und -visualisierung mit Parasoft Insure ++ mit Handlungsaufforderungstaste Laden Sie das Whitepaper herunter