
Implementazione di ricerca che dimostra l'interazione con il sottosistema eBPF di Linux relativa a CVE-2021-3490. Include creazione di mappe BPF, wrapper per syscall, configurazione dei namespace e analisi del verifier. Solo per scopi educativi e di ricerca sulla sicurezza.
Implementazione di ricerca che dimostra l'interazione con il sottosistema eBPF di Linux correlato a CVE-2021-3490. Include creazione di mappe BPF, wrapper di syscall, configurazione di namespace e analisi del verifier. Solo per scopi educativi e di ricerca sulla sicurezza.
CVE-2021-3490 – Analisi del tracciamento dei limiti del verifier eBPF Panoramica
Questo repository contiene un'implementazione in C che esplora il sottosistema eBPF del kernel Linux in relazione a CVE-2021-3490, una vulnerabilità che coinvolge un tracciamento errato dei limiti a 32 bit nel verifier eBPF.
L'obiettivo di questo progetto è comprendere come funziona internamente la chiamata di sistema bpf(), come vengono create e gestite le mappe BPF dallo spazio utente e come il verifier gestisce i vincoli sui registri. Questo è un progetto di ricerca e apprendimento incentrato sugli internals del kernel e sull'analisi della sicurezza.
Questo codice non è destinato all'uso in produzione.
Contesto
eBPF consente ai programmi in spazio utente di caricare bytecode verificato nel kernel Linux. Prima dell'esecuzione, il verifier del kernel controlla che il programma:
Non esegua accessi di memoria non sicuri
Rimanga entro i limiti dei registri
Non violi le regole di sicurezza del kernel
Nelle versioni vulnerabili del kernel, il verifier tracciava in modo errato i limiti a 32 bit durante alcune operazioni ALU. Questa falla potrebbe consentire a programmi appositamente creati di bypassare la logica di validazione.
Per i dettagli ufficiali:
NVD: https://nvd.nist.gov/vuln/detail/CVE-2021-3490
Bollettino di sicurezza Ubuntu: https://ubuntu.com/security/CVE-2021-3490
Avviso Red Hat: https://access.redhat.com/security/cve/CVE-2021-3490
Cosa dimostra questo progetto
Questa implementazione si concentra su:
Uso diretto della syscall bpf()
Definizione manuale di union bpf_attr
Creazione di mappe BPF (BPF_MAP_TYPE_ARRAY)
Aggiornamento e interrogazione degli elementi della mappa
Recupero dei metadati degli oggetti BPF
Configurazione di namespace per un'esecuzione controllata
È progettato per aiutare a capire come lo spazio utente interagisce con l'infrastruttura BPF del kernel.
Questo repository non include la logica di un payload exploit automatizzato.
Ambiente di test
Ubuntu 20.10 (Groovy)
Linux kernel 5.8.0-48-generic
Puoi controllare la versione del tuo kernel con:
uname -r
Il comportamento potrebbe differire su kernel aggiornati o più recenti.
Compilazione
Compila usando GCC:
gcc -o exploit exploit.c -lpthread
Non sono richieste librerie esterne oltre agli header Linux standard.
Utilizzo
Esegui il programma:
./exploit
Il programma:
Configura i namespace utente e di rete
Crea una mappa BPF
Inserisce un elemento
Interroga i metadati della mappa
Mostra i risultati dell'esecuzione
Nota sulla sicurezza
Questo progetto è per:
Scopi educativi
Ricerca sulla sicurezza del kernel
Comprensione degli internals di eBPF
Ambienti di laboratorio controllati
Non eseguire questo codice su sistemi senza la dovuta autorizzazione.
Obiettivi di apprendimento
Attraverso questo progetto, puoi capire:
Come il kernel Linux espone l'interfaccia BPF
Come sono strutturate le mappe BPF
Come la logica del verifier interagisce con gli input dello spazio utente
Come vengono costruite manualmente le syscall di basso livello