Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2021-3156 — CVE-2021-3156 (Baron Samedit) Bericht und Recherche | Kitploit
Tools/GitHubGitHub/ijbaig/cve-2021-3156
Privilege EscalationSchwachstellenanalyseExploitationLernen & BildungBinary-ExploitationLabs & Praxis
GitHubijbaig/cve-2021-3156

CVE-2021-3156

CVE-2021-3156 (Baron Samedit) Bericht und Recherche

Repository anzeigen
2vor 1 MonatNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Tiefenanalyse der Exploit-Kette: CVE-2021-3156 (Baron Samedit)

Autor: IJ Baig
Datum: 7. Juli 2026


1. CVE-ID, betroffene Versionen und Build-Bestätigung

  • CVE-ID: CVE-2021-3156
  • Schwachstellentyp: Heap-basierter Pufferüberlauf
  • Betroffene Versionsspanne: Legacy-Sudo-Versionen 1.8.2 bis 1.8.31p2 sowie stabile Versionen 1.9.0 bis 1.9.5p1.
  • Gebaute Zielversion: Sudo 1.9.5p1

1.1 Einrichtung der Umgebung

Um diese Schwachstelle sicher zu analysieren, wurde die verwundbare Sudo-Version in einer isolierten Nicht-Produktionsumgebung kompiliert.

OS-Info

1.2 Kompilieren aus dem Quellcode

Der Quellcode für Sudo 1.9.5p1 wurde heruntergeladen und mithilfe der Standard-make-Werkzeuge lokal kompiliert. Dabei wurde darauf geachtet, dies aus einem lokalen Verzeichnis heraus auszuführen, damit das native, gepatchte sudo-Binary des Hostsystems nicht überschrieben wurde.

Kompilierung Schritt 1

Build-Bestätigung: Nach der Kompilierung wurde das benutzerdefinierte Binary ausgeführt, um zu verifizieren, dass die korrekte verwundbare Version erstellt wurde.

Make Install

Sudo-Version

2. Analyse der Grundursache

2.1 Lage des verwundbaren Codes

  • Datei: plugins/sudoers/sudoers.c
  • Funktion: set_cmnd() (etwa in Zeile 864 der Version 1.9.5p1)

Verwundbarer Code

2.2 Die Schwachstelle erklärt

Man stelle sich einen Helfer vor, dessen Aufgabe es ist, Escape-Zeichen (Backslashes) aus einer Liste von Wörtern zu entfernen, bevor er sie in eine neu zugewiesene Speicherbox (einen Heap-Puffer) legt. Der Helfer geht blind davon aus, dass auf jeden Backslash immer ein gültiges Zeichen folgt. Wann immer er also einen Backslash sieht, überspringt er ihn und kopiert das nächste Zeichen.

Allerdings gibt es einen Fehler in der Art und Weise, wie das Programm Argumente verarbeitet, wenn sudoedit -s ausgeführt wird. Es erlaubt einem Benutzer, ein Wort einzuschleusen, das exakt mit einem einzelnen Backslash (\) endet, auf den unmittelbar das unsichtbare Wortende-Kennzeichen (ein Null-Terminator, \0) folgt.

Wenn der Code des Helfers diesen abschließenden Backslash erreicht, überspringt er ihn und betrachtet das nächste Zeichen – den Null-Terminator. Statt anzuhalten, zwingt die Logik der if-Anweisung den Helfer, ebenfalls den Null-Terminator zu überspringen. Die Schleife läuft weiter und kopiert beliebigen, außerhalb der Grenzen liegenden Speicher, der als Nächstes kommt, in die Speicherbox. Dieses fortgesetzte Kopieren über die vorgesehene Wortlänge hinaus bringt den dafür vorgesehenen Puffer zum Überlaufen, was zu einem schwerwiegenden Heap-basierten Pufferüberlauf führt.

Codeausschnitt mit der Schwachstelle:

root@kitploit:~
/* Unescape characters, skipping over backslashes */
for (to = user_args, av = NewArgv + 1; (from = *av); av++) {
    while (*from) {
        // VULNERABILITY: If from[0] is '\' and from[1] is '\0', 
        // the loop evaluates to true, increments 'from', skipping the null terminator.
        if (from[0] == '\\' && !isspace((unsigned char)from[1]))
            from++;
        *to++ = *from++; 
    }
    *to++ = ' ';
}
*--to = '\0';

2.3 Offizieller Patch und Erklärung der Behebung

Die Sudo-Entwickler behoben diesen Logikfehler in Version 1.9.5p2, indem sie eine strikte Grenzprüfung hinzufügten. Der Code stellt jetzt explizit sicher, dass das Zeichen nach dem Backslash kein Null-Terminator ist, bevor versucht wird, es zu unescapen.

Patch-Diff:

root@kitploit:~
- if (from[0] == '\\' && !isspace((unsigned char)from[1]))
+ if (from[0] == '\\' && from[1] != '\0' && !isspace((unsigned char)from[1]))

Warum dies die Grundursache behebt: Das Hinzufügen von from[1] != '\0' stoppt den Out-of-Bounds-Lesevorgang sofort. Wenn der Code nun am äußersten Ende der Zeichenkette auf einen abschließenden Backslash stößt (d. h. from[1] ist der Null-Terminator), wird die if-Anweisung als falsch ausgewertet. Der Zeiger wird nicht vorschnell erhöht, der Null-Terminator wird korrekt als Ende der Zeichenkette verarbeitet, und die Schleife endet sicher, ohne den Heap zum Überlaufen zu bringen.

3. Reproduktion des Exploits

3.1 Öffentlicher Proof of Concept (PoC)

Für diese Reproduktion wurde der weithin bekannte Python-Exploit verwendet, der vom Sicherheitsforscher Worawit entwickelt wurde (insbesondere die Variante exploit_nss.py).

3.2 Aufschlüsselung der PoC-Ausführung

Bevor der PoC ausgeführt wird, ist es entscheidend, seine Funktionsweise zu verstehen. Das Skript bringt das Programm nicht einfach zum Absturz; es orchestriert eine hochpräzise Manipulation des Speichers, um Codeausführung zu erlangen.

Hier ist die schrittweise Aufschlüsselung der Vorgänge des PoC:

  1. Payload-Erzeugung: Das Skript kompiliert dynamisch einen schädlichen C-Payload in eine Shared-Object-Datei (.so). Dieser Payload ist dafür ausgelegt, /bin/sh als Root auszuführen.
  2. Heap-Feng-Shui: Das Skript richtet bestimmte Umgebungsvariablen ein (wie LC_ALL, LANG und TZ). Da Sudo Umgebungsvariablen beim Start in den Heap lädt, berechnet das Skript die exakten Größen, die erforderlich sind, um den Heap in einem vorhersehbaren Layout anzuordnen.
  3. Der Überlauf: Das Skript führt sudoedit -s aus und übergibt ein Befehlszeilenargument, das mit einem einzelnen Backslash endet. Dies löst die in Abschnitt 2 behandelte Off-by-One-Schwachstelle aus und verursacht einen Out-of-Bounds-Schreibvorgang.
  4. Angriff auf die NSS-Struktur: Der Out-of-Bounds-Schreibvorgang überschreibt präzise eine bestimmte glibc-Struktur im angrenzenden Heap-Speicher: die service_user-Struktur. Diese Struktur wird vom Name Service Switch (NSS) verwendet, um Systeminformationen nachzuschlagen.
  5. Codeausführung: Die service_user-Struktur wird so korrumpiert, dass sie auf die in Schritt 1 kompilierte schädliche .so-Bibliothek zeigt. Wenn Sudo versucht, Benutzerrechte nachzuschlagen, lädt und führt es blind die Bibliothek des Angreifers aus, was eine Root-Shell gewährt.

3.3 Auslösen der Schwachstelle (Sudo 1.9.5p1)

Zunächst wurde ein einfacher Absturztest durchgeführt, um zu beweisen, dass die Schwachstelle existiert, ohne sie zu einer Waffe auszubauen.

Schwachstellenprüfung

Anschließend wurde das vollständige Worawit-Skript exploit_nss.py gegen das verwundbare Binary ausgeführt.

Terminalzugriff als Root

3.4 Verifizieren des Patches (Sudo 1.9.5p2)

Um die offizielle Korrektur zu verifizieren, wurde exakt derselbe PoC-Auslöser gegen das gepatchte Sudo-Binary ausgeführt.

root@kitploit:~
sudoedit -s '\' 2>&1 | grep -q "sudoedit:" && echo "Vulnerable" || echo "Not vulnerable"

Patch-Verifizierung

4. Nicht-technische Zusammenfassung

Sudo, ein Standard-Administrationsprogramm, das auf unseren Servern eingesetzt wird, enthält einen kritischen Fehler bei der Verarbeitung von Texteingaben, die Backslashes enthalten. Indem ein Angreifer mit grundlegendem Benutzerzugriff gezielt einen fehlerhaft formatierten Befehl sendet, kann er das System dazu bringen, Daten außerhalb des dafür vorgesehenen Speicherbereichs zu schreiben. Dieser Fehler ermöglicht es ihm, Sicherheitskontrollen vollständig zu umgehen und ohne jemals ein Passwort zu benötigen, die volle, unbefugte administrative Kontrolle über die Maschine zu erlangen.

5. Herausforderungen und gewonnene Erkenntnisse

Herausforderungen: Eine der größten Herausforderungen war die Fragilität der Heap-Manipulation. Exploit-Payloads, die auf bestimmte Betriebssystemversionen abzielen, schlagen auf anderen häufig fehl, weil die zugrunde liegende Standard-C-Bibliothek (glibc) Speicherblöcke unterschiedlich verwaltet. Um diese Schwachstelle erfolgreich zu einer Waffe auszubauen, war ein genaues Verständnis der Speicherausrichtung und der Layouts der Umgebungsvariablen (Heap Feng Shui) erforderlich, die für die Zielumgebung spezifisch sind.

Gewonnene Erkenntnisse: Aus Sicht der Verteidigung und des Sicherheitsbetriebs hat diese Tiefenanalyse mehrere kritische Konzepte bekräftigt:

  • Der Wert kontrollierter Laborumgebungen: Der Übergang von geführten, webbasierten Übungsumgebungen (wie TryHackMe) zum lokalen Erstellen und Ausnutzen eines verwundbaren Binaries aus dem Quellcode vermittelt ein viel tieferes Verständnis dafür, wie die zugrunde liegenden Betriebssystemmechanismen die Machbarkeit eines Exploits bestimmen.
  • Erkennungsentwicklung ist von größter Bedeutung: Sich ausschließlich auf das Patchen von SUID-Binaries zu verlassen, ist unzureichend, weil der Patch-Zyklus Zeit in Anspruch nimmt. Die Untersuchung dieses Exploits hat den Bedarf an robusten SIEM-Erkennungsregeln verdeutlicht. Die Überwachung der Prozessausführungstelemetrie auf verdächtige sudoedit -s-Befehle, die mit Escape-Zeichen enden, könnte einem SOC-Team ermöglichen, Exploit-Versuche zu erkennen, bevor ein Patch vollständig in der gesamten Infrastruktur ausgerollt ist.
  • Rechtegrenzen: Die Übung unterstrich das immense Risiko, das mit SUID-Binaries verbunden ist. Da Sudo ab seiner allerersten Anweisung mit Root-Rechten ausgeführt wird, führt jeder Fehler in der Parsing-Logik beim Start zu einer vollständigen Kompromittierung des Systems.

6. Bonus: Parallele Schwachstellen in Sudo

Parallele CVE: CVE-2019-14287 (Sudo-Sicherheitsumgehung) Eine weitere prominente Schwachstelle in genau derselben Sudo-Codebasis weist ein ähnliches Grundursachenmuster auf: unsachgemäßes Parsen und Validieren von Benutzereingaben. Bei CVE-2019-14287 ermöglichte ein Logikfehler bei der Art, wie Sudo die Benutzer-ID (UID) analysierte, einem Angreifer, Befehle als Root auszuführen, indem er die Benutzer-ID -1 oder 4294967295 angab.

Die Parallele: Während Baron Samedit (CVE-2021-3156) ein Speicherkorruptionsfehler ist und CVE-2019-14287 eine Autorisierungsumgehung, ist die Grundursache in beiden Fällen ein Versagen der anfänglichen Argument-Parsing-Logik. Beide Schwachstellen rühren daher, dass Sudo Edge-Case-Befehlszeilenargumente (abschließende Backslashes gegenüber unerwarteten Integer-Überläufen) fälschlicherweise vertraut und falsch behandelt, bevor es seine zentralen privilegierten Funktionen ausführt.


Sicherheits- und Ethik-Erklärung: Alle in diesem Bericht demonstrierten Exploit- und Testaktivitäten wurden vollständig in einer isolierten, autorisierten lokalen virtuellen Maschine durchgeführt. Während dieser Übung wurden keine Produktionssysteme oder nicht autorisierten Netzwerke angegriffen oder mit ihnen interagiert.

Tool herunterladen