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-2026-41651 — Proof-of-Concept-Exploit für CVE-2026-41651, eine lokale Privilegieneskalation durch TOCTOU in PackageKit, mit technischer Analyse, Erkennungslogik und Anleitung zur Behebung. | Kitploit
Tools/GitHubGitHub/baph00met/cve-2026-41651
Privilege EscalationSchwachstellenanalyseExploitationPenetrationstestsRed TeamingLabs & Praxis
GitHubbaph00met/cve-2026-41651

CVE-2026-41651

Proof-of-Concept-Exploit für CVE-2026-41651, eine lokale Privilegieneskalation durch TOCTOU in PackageKit, mit technischer Analyse, Erkennungslogik und Anleitung zur Behebung.

Repository anzeigen
153vor 4 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

CVE-2026-41651 — PackageKit TOCTOU Lokale Rechteausweitung

Klassifizierung: Purple-Team-Bewertungsartefakt
Nur für autorisierte Nutzung. Dieses Dokument und das begleitende Testskript sind ausschließlich für interne Sicherheitsvalidierung auf Systemen bestimmt, für die eine schriftliche Genehmigung vorliegt.


Nachweis der Ausnutzung

Proof of exploitation


Inhaltsverzeichnis

  1. Überblick über die Schwachstelle
  2. Technische Analyse
  3. Beschreibung des Testskripts
    • Verhalten
    • Unterstützung gehärteter Umgebungen
    • Kompatibilität
  4. Indikatoren für eine Kompromittierung
    • Dateisystem
    • Prozess & Ausführung
    • D-Bus-Aktivität
    • Audit-Log-Muster
    • Paketmanager-Artefakte
    • Artefakte der Rechteausweitung
  5. Erkennungslogik
  6. Betroffene Systeme & Versionen
  7. Behebung
  8. Referenzen

Überblick über die Schwachstelle

PackageKit ist eine D-Bus-Abstraktionsschicht für die Systempaketverwaltung, die standardmäßig auf GNOME-basierten Desktops unter Debian, Ubuntu, Fedora, RHEL, SUSE und Arch Linux vorhanden ist. Da es privilegierte Paketoperationen im Namen von Benutzern ohne Privilegien vermittelt, hat ein Fehler in seinem Autorisierungsablauf systemweite Root-Auswirkungen.


Technische Analyse

Grundursache

pk-transaction.c (vor 1.3.5) erzwang keine Zustandsprüfung bei erneuter Aufrufung von Aktionsmethoden. Ein D-Bus-Client konnte InstallFiles (oder andere Aktionsmethoden) mehrfach auf demselben Transaktionsobjekt aufrufen, nachdem es bereits aus PK_TRANSACTION_STATE_NEW übergegangen war.

Angriffskette

root@kitploit:~
Angreifer (ohne Privilegien)
  │
  ├─① CreateTransaction()          → PackageKit gibt Objektpfad der Transaktion zurück (tid)
  │
  ├─② InstallFiles(tid, FLAG_SIMULATE=4, [dummy.pkg])
  │       PackageKit stellt eine polkit-Autorisierungsprüfung für dummy.pkg in die Warteschlange.
  │       Es findet noch keine Installation statt — SIMULATE bedeutet nur Trockenlauf.
  │
  ├─③ InstallFiles(tid, FLAG_NONE=0, [payload.pkg])   ← TOCTOU-Fenster
  │       Ruft dasselbe tid erneut auf, bevor die Autorisierung aufgelöst wird.
  │       Verwundbare Versionen überschreiben die in der Warteschlange befindlichen Parameter mit payload.pkg.
  │
  └─④ polkit gewährt Autorisierung (Benutzer genehmigt oder automatisch autorisiert)
          packagekitd installiert payload.pkg als root.
          payload postinst/post-Skript: install -m 4755 /bin/bash /tmp/.suid_bash
          Angreifer führt /tmp/.suid_bash -p aus  →  Root-Shell.

Warum das Rennen gewinnt

Die Schritte ② und ③ werden als nicht blockierende asynchrone D-Bus-Aufrufe auf derselben Verbindung gesendet und in einem einzigen Schreibvorgang geleert. Die beiden Nachrichten treffen bei packagekitd ein, bevor es ② verarbeiten und die Zustandsmaschine vorantreiben kann, wodurch das TOCTOU-Fenster offen bleibt. Der Fix in 1.3.5 fügt eine explizite Zustandsprüfung hinzu, die bei jeder erneuten Aufrufung nach PK_TRANSACTION_STATE_NEW PK_TRANSACTION_ERROR_INVALID_STATE zurückgibt.


Beschreibung des Testskripts

Datei: cve-2026-41651-purpleteam.py
Sprache: Python 3
Abhängigkeiten: python3-gi (GObject-Introspection / GLib-Gio-Bindungen)

Zweck

Demonstriert die Ausnutzbarkeit von CVE-2026-41651 auf einem vorbereiteten Testsystem für folgende Zwecke:

  • Validierung, ob die installierte PackageKit-Version verwundbar ist
  • Erzeugung realistischer IOC-Telemetrie für die SIEM/EDR-Abstimmung
  • Testen der Erkennungsabdeckung vor und nach dem Patchen

Verhalten

Unterstützung gehärteter Umgebungen

Standardmäßig gehärtete Systeme können den Exploit an zwei unabhängigen Punkten blockieren. Das Skript behandelt beide automatisch.

1. Restriktive umask (027 / 077)

Eine prozessvererbte umask von 027 oder 077 führt dazu, dass mkdir() Verzeichnisse mit 750 oder 700 erzeugt. Sowohl dpkg-deb als auch rpmbuild müssen den gesamten Build-Baum durchlaufen — wenn ein Verzeichnis nicht lesbar ist, schlägt der Build still fehl.

Angewendeter Fix: os.umask(0o022) wird beim Start aufgerufen, bevor eine Datei oder ein Verzeichnis erstellt wird. Zusätzlich erhält jedes Verzeichnis und jede Datei im Build-Baum unmittelbar nach der Erstellung ein explizites chmod (0o755 für Verzeichnisse und Skripte, 0o644 für Datendateien), sodass die korrekten Berechtigungen unabhängig von der geerbten umask garantiert sind.

2. nosuid / noexec-Mount-Flags auf /tmp

FlagAuswirkung auf den Exploit
nosuidDer Kernel entfernt still das SUID-Bit von jeder Datei, die auf diesem Dateisystem gespeichert ist — die kopierte bash wird nie root
noexecDie SUID-Binärdatei kann überhaupt nicht ausgeführt werden

Angewendeter Fix: Beim Start liest _find_suid_dir() /proc/mounts und testet Kandidatenverzeichnisse in Präferenzreihenfolge, bis es eines findet, dessen Dateisystem keines der beiden Flags gesetzt hat. Der aufgelöste Pfad wird dann in das Post-Installationsskript des Payloads eingebettet und für Abfragen und Ausführung verwendet.

Wenn alle Kandidaten blockiert sind, beendet sich das Skript mit einer klaren Fehlermeldung, anstatt still zu scheitern.

Kompatibilität

DistributionsfamiliePaketwerkzeugGetestet
Debian / Ubuntudpkg-deb✓
RHEL / Fedora

Indikatoren für eine Kompromittierung

IOCs sind von generisch/Infrastrukturebene bis hin zu skriptspezifischen Artefakten aufgelistet. Erkennungen, die auf den generischen Indikatoren basieren, erfassen diese CVE unabhängig davon, welche PoC-Variante verwendet wird.

Dateisystem

Prozess & Ausführung

D-Bus-Aktivität

Audit-Log-Muster

Aktivieren mit: auditctl -a always,exit -F arch=b64 -S all -F path=/usr/bin/packagekitd
Oder verwenden Sie die folgenden Regeln in /etc/audit/rules.d/:

root@kitploit:~
# Erkennung der SUID-Dateierstellung in allen Kandidaten-Ablageverzeichnissen
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F a2&04000 -F dir=/tmp -k suid_drop
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F a2&04000 -F dir=/var/tmp -k suid_drop
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F a2&04000 -F dir=/dev/shm -k suid_drop

# Erkennung von dpkg-deb / rpmbuild durch Nicht-Root
-w /usr/bin/dpkg-deb -p x -k pkg_build_nonroot
-w /usr/bin/rpmbuild -p x -k pkg_build_nonroot

# Erkennung der SUID-bash-Ausführung aus jedem Kandidaten-Ablageverzeichnis
-a always,exit -F arch=b64 -S execve -F dir=/tmp -F uid!=0 -F euid=0 -k priv_esc_drop
-a always,exit -F arch=b64 -S execve -F dir=/var/tmp -F uid!=0 -F euid=0 -k priv_esc_drop
-a always,exit -F arch=b64 -S execve -F dir=/dev/shm -F uid!=0 -F euid=0 -k priv_esc_drop

Paketmanager-Artefakte

Artefakte der Rechteausweitung


Erkennungslogik

SIEM-Pseudo-Regel (Generisch — deckt alle CVE-2026-41651-Varianten ab)

root@kitploit:~
(
  event.category == "process"
  AND process.name IN ("dpkg-deb", "rpmbuild")
  AND process.user.id != "0"
  AND NOT process.parent.name IN ("apt", "apt-get", "dpkg", "rpm", "dnf", "yum", "zypper", "mock", "koji")
)
OR
(
  event.category == "file"
  AND file.path LIKE "/tmp/%" OR file.path LIKE "/var/tmp/%" OR file.path LIKE "/dev/shm/%"
  AND file.owner == "root"
  AND (file.mode LIKE "04%")
)
OR
(
  event.category == "process"
  AND process.name == "bash"
  AND process.real_user.id != "0"
  AND process.effective_user.id == "0"
  AND NOT process.parent.name IN ("sudo", "su", "sshd", "login", "pam")
)

EDR-Verhaltenskette

root@kitploit:~
packagekitd
  └─ sh / bash  (cwd oder arg stimmt mit /tmp, /var/tmp, /dev/shm oder $HOME überein)
       └─ install / cp / chmod  (Ziel hat SUID + Besitzer root)

Kennzeichnen Sie die gesamte Kette. Jeder einzelne Schritt allein kann harmlos sein; die Eltern-Kind-Beziehung durch packagekitd zu einem SUID-setzenden Befehl ist hochpräzise, unabhängig davon, welches Ablageverzeichnis ausgewählt wurde. Erweitern Sie pfadbasierte Regeln, um alle vier Kandidaten abzudecken.


Betroffene Systeme & Versionen

Installierte Version prüfen: pkcon backend-details oder packagekit --version
Verwundbar, wenn die gemeldete Version ≤ 1.3.4 ist.


Behebung

Primär: Aktualisieren Sie PackageKit auf 1.3.5 oder wenden Sie den herstellerspezifischen Backport an.

root@kitploit:~
# Debian / Ubuntu
apt update && apt install --only-upgrade packagekit

# Fedora / RHEL
dnf upgrade packagekit

# SUSE
zypper update packagekit

Minderungsmaßnahmen (falls ein Patchen nicht sofort möglich ist):


Referenzen


Generiert: 2026-04-24 | Aktualisiert: 2026-04-25 | Purple-Team-Bewertung | Nur für interne Verwendung

Tool herunterladen
FeldWert
CVE-IDCVE-2026-41651
CWECWE-367 — Time-of-check Time-of-use (TOCTOU) Race Condition
KomponentePackageKit (packagekitd, D-Bus-Dienst)
BetroffenPackageKit ≤ 1.3.4
Behoben inPackageKit 1.3.5
AuswirkungLokale Rechteausweitung → root
AngriffsvektorLokal / D-Bus (Sitzung ohne Privilegien)
Offengelegt2026-04-22 (Deutsche Telekom Red Team)
AdvisoryGHSA-f55j-vvr9-69xv
Fix-Commit76cfb675fb31acc3ad5595d4380bfff56d2a8697
PhaseAktion
EinrichtungUntersucht /proc/mounts, um ein SUID-/exec-fähiges Ablageverzeichnis auszuwählen, setzt umask(022), wendet explizites chmod auf alle Build-Artefakte an und erstellt dann ein Dummy- und ein Payload-Paket in /tmp
ExploitÖffnet eine System-D-Bus-Verbindung, erstellt eine PackageKit-Transaktion, löst das Zwei-Aufruf-Rennen aus
PayloadDas Post-Installationsskript des Pakets kopiert /bin/bash nach <drop_dir>/.suid_bash mit Modus 04755, Besitzer root. Das Ablageverzeichnis wird zur Laufzeit aufgelöst (siehe Unterstützung gehärteter Umgebungen)
AusweitungFragt nach der SUID-Binärdatei (90-s-Timeout) und führt dann execl mit -p für eine Root-Shell aus
BereinigungEntfernt die temporären .deb/.rpm-Dateien beim Beenden (Erfolg oder Fehlschlag)
PrioritätKandidatTypische Härtung
1/var/tmpTrägt selten nosuid/noexec; übersteht Neustarts
2/dev/shmtmpfs, normalerweise permissiv; wird beim Neustart geleert
3/tmpOft auf CIS/STIG-Systemen gehärtet
4$HOMELetzter Ausweg; immer vom Benutzer beschreibbar
rpmbuild
✓
SUSE / openSUSErpmbuild✓
IOCPfad / MusterHinweise
SUID-Binärdatei in weltbeschreibbarem Verzeichnis<drop_dir>/.suid_bash — Ablageverzeichnis ist /var/tmp, /dev/shm, /tmp oder $HOME, abhängig von den Mount-FlagsDas Skript wählt das erste Verzeichnis ohne nosuid/noexec; erweitern Sie die Erkennungen, um alle vier Kandidaten abzudecken
Transiente Paketdatei in /tmp/tmp/*.deb, /tmp/*.rpmVon Benutzer ohne Privilegien erstellt; legitime Paketoperationen verwenden /var/cache oder Download-Pfade
dpkg-Build-Baum/tmp/pkbuild_*, /tmp/build_*Staging-Verzeichnisse für dpkg-deb -b
rpmbuild-Baum in /tmp/tmp/rpmbuild_*Staging-Verzeichnisse für rpmbuild, das außerhalb von ~/rpmbuild aufgerufen wird
postinst / %post-Skript in /tmp/tmp/*/DEBIAN/postinst, /tmp/*/SPECS/*.specSkripte, die Systembinärdateien kopieren oder chmoden, sind hochgradig vertrauenswürdig
IOCDetail
dpkg-deb, das von einem Nicht-Root-, Nicht-apt-Prozess gestartet wirdÜbergeordneter Prozess ist ein Benutzer-Python/Shell-Prozess, nicht apt, dpkg oder unattended-upgrades
rpmbuild, das von einem Benutzer ohne Privilegien gestartet wirdOhne einen paketierungsbezogenen übergeordneten Prozess (mock, koji, CI-Runner) ist dies anomal
packagekitd, das /bin/sh oder /bin/bash aus einem /tmp-Pfad startetpackagekitd führt postinst-Skripte aus; der Quellpfad in /tmp ist die Anomalie
bash-Prozess, bei dem UID ≠ EUIDSUID-Ausführung; EUID=0, UID=<Angreifer>
bash -p-AufrufDas -p-Flag aktiviert den privilegierten Modus, wenn SUID gesetzt ist — selten legitim verwendet
Kurzlebige .suid_bash-ProzessabstammungGroßelternprozess ist packagekitd, Elternprozess ist die Shell des Angreifers
IOCDetail
org.freedesktop.PackageKit.Transaction.InstallFiles zweimal auf demselben Objektpfad aufgerufenBeide Aufrufe treffen innerhalb von Millisekunden ein; legitime Clients rufen einmal pro Transaktion auf
FLAG_SIMULATE (4) unmittelbar gefolgt von FLAG_NONE (0) auf demselben tidDiese Sequenz hat keinen legitimen Anwendungsfall
CreateTransaction → schnelles doppeltes InstallFiles-MusterErkennbar über D-Bus-Monitor (dbus-monitor --system) oder Audit-dbus-Regeln
InstallFiles mit einem Dateipfad unter /tmpLegitime GUI-Paketinstallateure (GNOME Software, Discover) verwenden Pfade in $HOME oder /var/cache
IOCDetail
Paket namens pk-dummy-* oder pk-payload-* im dpkg/rpm-VerlaufSkriptspezifisch, aber Varianten verwenden unterschiedliche Namen
Paket, das aus einer lokalen Datei installiert wurde (/tmp/*.deb oder /tmp/*.rpm)dpkg -l oder rpm -qa --last — suchen Sie nach Paketen ohne Repository-Ursprung
Paket, das ohne Changelog / leere Beschreibung installiert wurdeMaßgeschneiderte Pakete verwenden minimale Metadaten; dpkg -s <pkg> oder rpm -qi <pkg>
Paket, das unmittelbar nach der Installation entfernt wurde oder nie in der Paketdatenbank erscheintFehlgeschlagene Exploit-Versuche können einen teilweisen Zustand hinterlassen
packagekit-Transaktionslogeinträge für lokale Dateiinstallationen/var/log/PackageKit/transactions.db oder journald-packagekitd-Einträge
IOCDetail
.suid_bash in einem Kandidaten-AblageverzeichnisDer Ablagepfad wird zur Laufzeit aus /var/tmp, /dev/shm, /tmp, $HOME basierend auf den Mount-Flags gewählt — prüfen Sie alle vier: find /var/tmp /dev/shm /tmp $HOME -uid 0 -perm -4000 2>/dev/null
Jede Datei im Besitz von root mit SUID-Bit in einem benutzerbeschreibbaren VerzeichnisSollte auf sauberen Systemen immer leer zurückgegeben werden
bash-Prozessbaum mit euid=0 und keinem PAM-/sudo-/su-VorfahrenZeigt einen SUID-Ausführungspfad an, nicht einen legitimen Privilegienübergang
polkit-Gewährung für org.freedesktop.packagekit.package-install an Nicht-Admin-BenutzerUnerwartet, wenn der Benutzer nicht in der sudo-/wheel-Gruppe ist
DistributionStandard-PackageKitVerwundbarGepatchte Version verfügbar
Ubuntu 24.04 LTS1.3.xJaÜber apt upgrade
Ubuntu 22.04 LTS1.2.xJaBackport in Arbeit
Debian 12 (Bookworm)1.2.xJaSecurity-Tracker ausstehend
Fedora 411.3.xJadnf upgrade packagekit
RHEL 9 / CentOS Stream 91.2.xJaRHSA ausstehend
SUSE Linux Enterprise 151.1.xWahrscheinlichSUSE-Advisory ausstehend
Arch Linux1.3.xJaAUR / pacman aktualisiert
MinderungsmaßnahmeBefehl / KonfigurationEinschränkung
PackageKit-Dienst deaktivierensystemctl disable --now packagekitdBricht GNOME Software / Discover GUI-Updates
D-Bus-Zugriff einschränkendeny-Regel in /etc/dbus-1/system.d/org.freedesktop.PackageKit.conf für Benutzer ohne Privilegien hinzufügenKann legitime benutzerorientierte Paketwerkzeuge beeinträchtigen
Polkit-Härtungorg.freedesktop.packagekit.package-install auf auth_admin setzen (immer Admin-Passwort verlangen)Reduziert den Komfort, verengt aber die Angriffsfläche
Audit-ÜberwachungAudit-Regeln aus dem Abschnitt Audit-Log-Muster bereitstellenNur detektivisch, nicht präventiv
RessourceLink
OSS-Security-Offenlegunghttps://www.openwall.com/lists/oss-security/2026/04/22/6
GitHub-SicherheitsadvisoryGHSA-f55j-vvr9-69xv
Fix-Commithttps://github.com/PackageKit/PackageKit/commit/76cfb675fb31acc3ad5595d4380bfff56d2a8697
PackageKit-1.3.5-Releasehttps://github.com/PackageKit/PackageKit/releases/tag/v1.3.5
Öffentliche PoC-Referenzhttps://github.com/CipherCloak/CVE-2026-41651
CWE-367https://cwe.mitre.org/data/definitions/367.html
polkit-Dokumentationhttps://www.freedesktop.org/software/polkit/docs/latest/