
Exploitation und Mitigationsanalyse des heap-basierten Pufferüberlaufs CVE-2021-3156 in sudo
CVE-2021-3156, bekannt als Baron Samedit, ist eine Heap-basierte Pufferüberlauf-Schwachstelle im sudo-Programm. Sie ermöglicht jedem unprivilegierten lokalen Benutzer, auf verwundbaren Systemen ohne Authentifizierung Root-Rechte zu erlangen.
Dieses Projekt dokumentiert die vollständige Exploitation und Mitigation dieser Schwachstelle im Rahmen des Kurses Software Vulnerabilities: Exploitation and Mitigation an der Universität Luxemburg.
OS: Ubuntu 20.04.1
sudo version: 1.8.31-1ubuntu1 (vulnerable)
libc version: 2.31
User: Non-root account
Um den verwundbaren Zustand zu reproduzieren:
sudo apt install sudo=1.8.31-1ubuntu1
Die Schwachstelle wird ausgelöst, wenn sudo im sudoedit-Modus mit sorgfältig präparierten Befehlszeilenargumenten ausgeführt wird, die interne Heap-Puffer überlaufen lassen.
Der Exploit verwendet vier kritische Parameter, die durch Speicheranalyse optimiert wurden:
exploit_launcher.c — Haupt-ExploitLöst die Schwachstelle in 5 Schritten aus:
LC_ALL, um das Heap-Speicherlayout zu steuernsudoedit mit den bösartigen Argumenten und der Umgebung aufexploit_payload.c — Bösartige NutzlastWird automatisch ausgeführt, wenn der Exploit erfolgreich ist, über die _init-Funktion:
0 (root)$ make
$ ./exploit_it
[!] CVE-2021-3156 Exploit
[+] Target: Ubuntu 20.04.1 (sudo 1.8.31, libc-2.31)
[+] Parameters: A=56, B=54, Nulls=63, LC_ALL=212
[+] Launching exploit...
[+] Exploit successful. Root privileges obtained.
# whoami
root
✅ Erfolgreich von einem unprivilegierten Benutzer zu root eskaliert.
Upgrade sudo to the patched version:
sudo apt install sudo=1.8.31-1ubuntu1.5
Nach dem Upgrade konnte der gleiche Exploit nicht ausgeführt werden und Root-Rechte wurden nicht gewährt – was die Wirksamkeit des Patches bestätigt.
Wichtigste Erkenntnis: Das Aktualisieren von Systemprogrammen wie
sudoist entscheidend, um Privilege-Escalation-Angriffe zu verhindern.
├── exploit_launcher.c # Main exploit triggering the heap overflow
├── exploit_payload.c # Malicious payload spawning root shell
├── libnss_X/ # Malicious library loaded during exploitation
└── Makefile # Build configuration
# Build
make
# Run exploit
./exploit_it
| Eigenschaft | Details |
|---|
| CVE ID | CVE-2021-3156 |
| Nickname | Baron Samedit |
| Typ | Heap-basierter Pufferüberlauf |
| Komponente | sudo (sudoedit-Modus) |
| Auswirkung | Lokale Rechteausweitung zu Root |
| Betroffene Versionen | sudo ≤ 1.8.31 (Ubuntu), ≤ 1.9.5p1 (andere) |
| Gepatchte Version | sudo 1.8.31-1ubuntu1.5 |
| CVSS-Score | 7.8 (Hoch) |
| Parameter | Größe | Zweck |
|---|
A | 56 Bytes | Überschreibt den anfänglichen Puffer |
B | 54 Bytes | Überschreibt einen zweiten Heap-Block |
Nulls | 63 Bytes | Speicherausrichtung der Struktur |
LC_ALL | 212 Bytes | Steuerung des Heap-Layouts über Umgebungsvariable |