Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
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
path-auditor — Auditor runtime delle funzioni libc che rileva race condition nell'accesso ai file e vulnerabilità di symlink agganciando le syscall del filesystem tramite LD_PRELOAD, registrando potenziali percorsi di escalation dei privilegi. | Kitploit
Strumenti/GitHubGitHub/google/path-auditor
Escalation di PrivilegiAnalisi delle VulnerabilitàAnalisi Dinamica del Codice (DAST)ExploitFuzzingAnalisi di BinariArchived
GitHubgoogle/path-auditor

path-auditor

Auditor runtime delle funzioni libc che rileva race condition nell'accesso ai file e vulnerabilità di symlink agganciando le syscall del filesystem tramite LD_PRELOAD, registrando potenziali percorsi di escalation dei privilegi.

Vedi Repository
250385 anni faRevisionato da Kitploit

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

PathAuditor

PathAuditor è uno strumento progettato per trovare vulnerabilità legate all'accesso ai file, controllando le funzioni libc.

L'idea è approssimativamente la seguente:

  • Controlla ogni chiamata alle funzioni libc relative al filesystem eseguita dal binario.
  • Verifica se il percorso utilizzato nella syscall è scrivibile dall'utente. In tal caso, un utente non privilegiato potrebbe aver sostituito una directory o un file con un collegamento simbolico.
  • Registra tutte le violazioni come potenziali vulnerabilità.

Utilizziamo LD_PRELOAD per intercettare tutte le chiamate di libreria relative al filesystem e registrare le violazioni riscontrate in syslog.

Questo non è un prodotto ufficialmente supportato da Google.

Esempio di Vulnerabilità

Vediamo un esempio del tipo di vulnerabilità che questo strumento può rilevare. CVE-2019-3461 era un bug in tmpreaper, uno strumento che attraversa /tmp ed elimina file vecchi. Di solito viene eseguito come cron job come root. Poiché non vuole eliminare file al di fuori di tmp, utilizzava il seguente codice per verificare se una directory è un punto di montaggio:

root@kitploit:~
if (S_ISDIR (sb.st_mode)) {
    char *dst;

    if ((dst = malloc(strlen(ent->d_name) + 3)) == NULL)
        message (LOG_FATAL, "malloc failed.\n");
    strcpy(dst, ent->d_name);
    strcat(dst, "/X");
    rename(ent->d_name, dst);
    if (errno == EXDEV) {
        free(dst);
        message (LOG_VERBOSE,
                 "File on different device skipped: `%s/%s'\n",
                 dirname, ent->d_name);
        continue;
    }
    // [...]

In breve, questo codice chiama rename("/tmp/foo", "/tmp/foo/x") che restituirà EXDEV se "/tmp/foo" è un punto di montaggio. PathAuditor segnalerebbe questa chiamata come potenziale vulnerabilità se "/tmp/foo" è di proprietà di un utente diverso da root. Per capire il perché, dobbiamo pensare a cosa accade nel kernel quando viene eseguita la syscall rename (semplificato):

  1. Il kernel attraversa il percorso "/tmp/foo" per il primo argomento.
  2. Il kernel attraversa il percorso "/tmp/foo/x" per il secondo argomento.
  3. Se l'origine e la destinazione si trovano su filesystem diversi, restituisce EXDEV.
  4. Altrimenti, sposta il file dalla prima alla seconda directory.

C'è una condizione di gara qui poiché "/tmp/foo" verrà risolto due volte. Se è controllato dall'utente, l'utente può sostituirlo con un file diverso in qualsiasi momento. In particolare, vogliamo che "/tmp/foo" sia inizialmente una directory per superare il controllo if(S_ISDIR) nel codice di tmpreaper. Lo sostituiamo quindi con un file appena prima che il codice entri nella syscall. Quando il kernel risolve il primo argomento, vedrà un file con contenuto controllato dall'utente. Ora lo sostituiamo di nuovo, questa volta con un collegamento simbolico a una directory arbitraria sullo stesso filesystem. Il kernel risolverà il percorso una seconda volta, seguirà il collegamento simbolico e sposterà il file controllato in una directory scelta.

La restrizione dello stesso filesystem è dovuta al fatto che rename non funziona tra filesystem diversi. Ma su alcune distribuzioni Linux /tmp è solo una cartella nella rootfs per impostazione predefinita e si potrebbe usare questo bug per spostare un file in /etc/cron, che verrà eseguito come root.

Come eseguire

Per provarlo, devi compilare libpath_auditor.so con bazel e caricarlo in un binario utilizzando LD_PRELOAD. Qualsiasi violazione verrà registrata in syslog, quindi assicurati che sia in esecuzione.

root@kitploit:~
bazel build //pathauditor/libc:libpath_auditor.so
LD_PRELOAD=/path/to/bazel-bin/pathauditor/libc/libpath_auditor.so cat /tmp/foo/bar
tail /var/log/syslog

È anche possibile eseguirlo su tutti i processi del sistema aggiungendolo a /etc/ld.so.preload. Tuttavia, attenzione: è consigliato solo su sistemi di test poiché può causare instabilità.

Per iniziare rapidamente, puoi provare il container docker fornito con questo progetto:

root@kitploit:~
docker build -t pathauditor-example .
docker run -it pathauditor-example
# LD_PRELOAD=/pathauditor/bazel-bin/pathauditor/libc/libpath_auditor.so cat /tmp/foo/bar
# cat /var/log/syslog
Scarica lo strumento