
Proof-of-concept exploit per CVE-2026-7482, una lettura heap out-of-bounds non autenticata nel caricatore GGUF di Ollama, che dimostra l'esfiltrazione di memoria tramite un file di modello appositamente creato.
Questo repository contiene una catena di sfruttamento Proof of Concept (PoC) 1-day per CVE-2026-7482, una vulnerabilità di lettura Out-of-Bounds (OOB) non autenticata nel caricatore di modelli GGUF di Ollama (versioni precedenti alla 0.17.1).
Nota: Questa è una riproduzione di ricerca 1-day. Non ho scoperto la CVE originale. Questo PoC è stato progettato sulla base dei dettagli dell'avviso pubblico per dimostrare i meccanismi della vulnerabilità a fini educativi e di ricerca difensiva.
Fornendo un file GGUF troncato e creato ad arte all'endpoint /api/create, un attaccante può forzare il parser di quantizzazione in fs/ggml/gguf.go e server/quantization.go a leggere oltre il buffer heap allocato. La memoria trapelata viene poi esfiltrata inviando l'artefatto del modello risultante a un registro Docker controllato dall'attaccante tramite l'endpoint /api/push.
Durante questa ricerca 1-day, riprodurre il crash è stato banale, ma ottenere un'esfiltrazione stabile senza far crashare il server o incappare nei blocchi di validazione API ha richiesto una forgiatura architetturale specifica:
F16 (general.file_type = 1) per soddisfare i rigorosi controlli pre-volo dell'API Ollama.Q4_K_M. Poiché il payload viene visto come F16, il backend C++ ggml è costretto a elaborare il payload anziché eseguire una copia di memoria sicura 1:1.token_embd.weight) deve essere modellato come una matrice 2D in cui la dimensione più interna è esattamente 256 (es., [num_rows, 256]). Questo si allinea rigorosamente con i requisiti dei blocchi Q4_K_M, impedendo al backend di saltare il layer.pip install requests numpy gguf
È inoltre necessario un listener HTTP accessibile pubblicamente (come Ngrok) per intercettare i push dei layer Docker esfiltrati.
1. Avvia il Registro Rogue Avvia il listener per intercettare i blob di memoria trapelati.
sudo python3 registry.py
2. Forgia il Payload Maligno
Genera il file GGUF troncato. Puoi regolare TARGET_LEAK_SIZE_MB all'interno dello script per controllare quanta memoria heap viene raschiata per richiesta. (Consigliato: 0.5MB fino a 2.0MB per evitare segfault su pagine non mappate).
python3 forge.py
3. Lancia l'Exploit
Modifica exploit.py per includere l'IP del target e l'URL del tuo registro rogue, quindi esegui:
python3 exploit.py
4. Analizza l'Artefatto
Il registro depositerà i dump heap trapelati nella directory exfils/.
Nota sull'Integrità dei Dati (La Trappola della Quantizzazione): Sebbene l'exploit catturi ed esfiltri con successo fino a diversi megabyte di memoria heap del server, i dati vengono sottoposti all'algoritmo di down-quantizzazione Q4_K_M di Ollama durante la lettura OOB. Il backend converte i byte di memoria grezzi in float16 e applica uno schema di compressione a blocchi a 4 bit con perdita. Di conseguenza, la memoria trapelata viene matematicamente alterata. Gli strumenti standard di estrazione ASCII produrranno spazzatura binaria, rendendo il recupero di credenziali in chiaro praticamente non percorribile tramite questo specifico percorso di coercizione.
Questo progetto è destinato esclusivamente a scopi educativi e di ricerca autorizzata sulle vulnerabilità. Non utilizzare questo strumento contro sistemi che non possiedi o per i quali non hai esplicita autorizzazione al test.