Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
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.

FeedsKontaktDatenschutz© 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
18vor 3 MonatenNoch 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:

/* 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:

- 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.

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

Tool herunterladen