Abbiamo trattato e spiegato CVE-2023-4911 Looney Tunables che colpisce principalmente tutte le distribuzioni Linux e consente a un utente malintenzionato di aumentare i privilegi a root. La vulnerabilità colpisce il caricatore dinamico della libreria GNU C, noto come ld.so durante l'elaborazione della variabile di ambiente GLIBC_TUNABLES. Questo problema potrebbe consentire a un utente malintenzionato locale di utilizzare variabili di ambiente GLIBC_TUNABLES dannose quando si avviano file binari con autorizzazione SUID per eseguire codice con privilegi elevati. Abbiamo utilizzato una configurazione di laboratorio appositamente per provare questo exploit utilizzando ProvaHackMe.

LD.SO: il linker/caricatore dinamico

Ottieni note OSCP

Ogni volta che esegui un file ELF che dipende da librerie condivise (.COSÌ file), il sistema operativo dovrà caricare tali librerie e collegarle al tuo eseguibile in modo che eventuali funzioni condivise siano disponibili per il tuo programma durante la sua esecuzione. In Linux sistemi, questo è normalmente gestito da ld.so, un eseguibile preconfezionato come parte di glibc biblioteca.

Ogni eseguibile ELF contiene una sezione denominata .interp, dove viene specificata la posizione del caricatore richiesto in modo che il sistema operativo sappia quale caricatore specifico utilizzare.

CVE-2023-4911 Sfruttamento delle vulnerabilità

Approfondiremo la fase di sfruttamento utilizzando quanto segue PoC.

  1. Impostazione delle variabili d'ambiente

    L'exploit crea diversi array (riga 41), che verranno utilizzati in seguito per memorizzare il file GLIBC_TUNABLES variabili d'ambiente e attivano l'overflow del buffer in glibc quando il programma viene eseguito.
  2. Creazione di variabili ambientaliriempitivo: Questa variabile viene creata per riempire la sezione di lettura-scrittura del caricatore. È riempito con una lunga sequenza di caratteri "F" ("F"). (linee 17-23)
    kv: Questa variabile è il carico utile che attiverà l'overflow del buffer. È riempito con una lunga sequenza di caratteri "A" ("A"). (linee 27-33)
    riempitivo2: simile al riempitivo, questa variabile viene utilizzata per eliminare eventuali porzioni extra. È inoltre riempito con una sequenza di caratteri "F". (linee 37-43)
    dt_rpath: questa variabile viene utilizzata per creare un valore specifico -0x14ULL per sovrascrivere le regioni di memoria nel processo di sfruttamento. (righe 47-53) Tutte queste variabili verranno copiate nel file envp array, che contiene variabili di ambiente.
  3. Armi

    Il carico utile dentro GLIBC_TUNABLES fa quanto segue su ld.so: sovrascrive un segmento dello stack con un indice che punta a una stringa con " come il suo contenuto. L'intenzione qui è quella di manipolare lo stack in modo che l'indice punti a uno specifico indirizzo di memoria in cui è memorizzato il carattere "(una virgoletta doppia). Lo stack è una regione di memoria utilizzata per memorizzare variabili locali e informazioni sulle chiamate di funzione durante l'esecuzione del programma. Per aumentare la complessità dell'exploit, i moderni sistemi operativi randomizzano la posizione dello stack, rendendo difficile prevedere dove finirà l'indice in memoria.
  4. Sfruttamento:
    L'exploit utilizza un approccio per tentativi ed errori per tenere conto della casualità della posizione dello stack. Esegue ripetutamente il programma (biforcandolo ed eseguendolo) finché non ottiene fortuna e trova l'indirizzo fisso 0x7ffdffffff030 corrisponde all'indirizzo a cui punta l'indice dello stack ". Ciò manipola efficacemente il percorso di ricerca della libreria in modo che punti alla directory denominata " che conterrà una versione dannosa di lib6.so.
    Il processo per generare il forgiato libc6.so consiste nel copiare libc6.so sostituendo però il file __libc_start_main funzione con uno shellcode personalizzato che lo fa setuid(0) + setgid(0) + exec('/bin/sh'). Puoi trovare lo script Python per questo Qui.
    Il programma entra in un ciclo in cui biforca un processo figlio: nel processo figlio tenta di eseguire /usr/bin/su con --aiuto. Se il processo figlio impiega più di un secondo, presuppone che stia tornando da una shell, indicando un potenziale exploit riuscito.

CVE-2023-4911 Mitigazione

Se non riesci ad applicare la patch, segui le istruzioni questo link per la mitigazione

CVE-2023-4911 Bonifica

Applicare patch al sistema è il modo migliore e unico per rimediare.

Risposte in camera

Qual è il valore della bandiera in /root/root.txt?

Videoprocedura dettagliata

Circa l'autore

Creo note sulla sicurezza informatica, note di marketing digitale e corsi online. Fornisco anche consulenza di marketing digitale, inclusi ma non limitati a SEO, annunci Google e Meta e amministrazione CRM.

Visualizza articoli