
Visualisierung, Fuzzing, Exploit und Patch der Baron-Samedit-Schwachstelle
Visualisierung, Fuzzing, Exploit und Patch der Baron-Samedit-Schwachstelle
Bericht ansehen »
Francesco Marchiori
·
Alessandro Lotto
Jedes Unix-basierte Betriebssystem ist mit dem sudo-Befehl ausgestattet, der eine vorübergehende Erhöhung der Root-Rechte für diejenigen Benutzer ermöglicht, die dazu vorgesehen sind. Sudo bietet also eine kritische Funktionalität, deren Missbrauch die Sicherheit und Zuverlässigkeit des Systems selbst gefährden kann. Aufgrund seiner Bedeutung innerhalb des Betriebssystems wird der Quellcode von sudo häufig getestet und Code-Reviews unterzogen. Diese haben zur Entdeckung einer Heap-basierten Überlauf-Schwachstelle geführt, die als CVE-2021-3156 bezeichnet wird und erstaunlicherweise fast 10 Jahre lang verborgen war. Auch Fuzzing-Techniken, eine der am häufigsten eingesetzten Techniken zur Fehler- und Schwachstellenfindung, konnten sie zuvor nicht aufspüren. In diesem Artikel analysieren wir die sudo-Schwachstelle CVE-2021-3156 im Detail, von der Buffer-Overflow-Schwachstelle bis hin zu ihrer Ausnutzung, um eine Root-Shell zu erlangen, selbst wenn man ein nicht privilegierter Benutzer ist oder nicht zur Nutzung des sudo-Befehls berechtigt ist.
Im Verzeichnis Visualization befinden sich ein paar Skripte, die wir verwendet haben, um zu visualisieren, wie Argumente mit oder ohne Backslash-Zeichen geparst werden, und um zu analysieren, wie Umgebungsvariablen das Heap-Layout beeinflussen, um die Struktur des vorgeschlagenen Exploits besser zu verstehen.
Im Verzeichnis Fuzzing befinden sich die Dateien, die für das Fuzzing der anfälligen Version von sudo benötigt werden. Es wird auch beschrieben, wie man fuzzen kann und wie man die Probleme löst, die AFL davon abhalten, sofort zu funktionieren, was erklärt, wie die Schwachstelle fast 10 Jahre lang verborgen bleiben konnte.
Im Verzeichnis Exploit befinden sich die Dateien, die für den Angriff auf eine andere anfällige Version von sudo benötigt werden. Wir nutzen die Speicherbelegung durch Umgebungsvariablen, um Heap Feng Shui zu betreiben und den Namen des Objekts service_user zu überschreiben, um unseren eigenen Code auszuführen, anstatt eine Bibliothek zu laden.
Im Verzeichnis Patch befindet sich ein Skript overflow_simulation_patch.c, das das Verhalten des Überlaufs simuliert und ihn mit zusätzlichem von uns geschriebenem Code patcht. Da die Entwickler des Sudo-Projekts beschlossen haben, den Ablauf der Schwachstelle zu beheben, anstatt den Code selbst, zeigen wir einen anderen Ansatz und wie er mit nur wenigen Zeilen Code behoben werden kann.