
Riproduce la lettura heap out-of-bounds di CVE-2026-7482 nel caricamento e nella quantizzazione GGUF di Ollama, con analisi differenziale degli artefatti quantizzati per dimostrare l'influenza dell'OOB.
Questo repository contiene il mio script di riproduzione locale per CVE-2026-7482, una lettura heap out-of-bounds nei percorsi vulnerabili di caricamento e quantizzazione GGUF di Ollama.
Il risultato importante di questo lavoro è limitato: sono riuscito a far verificare la condizione Heap OOB in modo affidabile e a produrre artefatti GGUF quantizzati influenzati da OOB. Non sono riuscito a dimostrare un impatto black-box chiaro come il recupero affidabile di segreti in chiaro o l'estrazione diretta di stringhe canary dall'artefatto risultante.
exp.py crea due file GGUF:
Carica entrambi i file su un'istanza Ollama vulnerabile tramite l'API Ollama locale, attiva la quantizzazione con /api/create, copia i blob GGUF generati dal container Docker locale e confronta l'output malevolo con l'output di controllo a zeri.
Il confronto differenziale è utile perché mostra che il percorso di quantizzazione vulnerabile ha utilizzato byte che non erano presenti nel file GGUF malevolo originale. Nei miei test, questo comportamento era stabile su Ollama 0.17.0 e rifiutato dal percorso corretto di 0.17.1.
requests0.17.0 esposto su una porta API localeollama-old-testEsempio di target di laboratorio:
docker run -d --name ollama-old-test -p 11435:11434 ollama/ollama:0.17.0
Installa l'unica dipendenza Python:
python3 -m pip install requests
Esegui il test predefinito contro http://localhost:11435 e il container ollama-old-test:
python3 exp.py
Argomenti espliciti:
python3 exp.py http://localhost:11435 ollama-old-test Q4_K_M F16
python3 exp.py http://localhost:11435 ollama-old-test Q8_0 F16
python3 exp.py http://localhost:11435 ollama-old-test Q8_0 F32
Lo script scrive artefatti locali come:
malicious_model.ggufcontrol_model.ggufquantized_model.ggufcontrol_quantized_model.ggufq8_dequantized_f32.binq8_pseudo_f16.binq8_pseudo_f16.txtNei miei test locali, la versione Ollama vulnerabile ha creato output quantizzati in cui il payload del tensore malevolo differiva da un tensore di controllo a zeri nonostante il file GGUF malevolo non contenesse quei byte.
Questo è sufficiente per mostrare un artefatto influenzato da OOB. Non è sufficiente per affermare una divulgazione pratica di dati black-box.
Ho anche testato dati in stile canary in prompt di modelli concorrenti e cercato negli artefatti generati, nei byte float32 dequantizzati Q8_0 e nell'output di ricostruzione pseudo-F16. Non ho recuperato canary esatte né frammenti di testo in chiaro significativi.
La ragione probabile è che i byte non vengono copiati come memoria heap grezza. Passano attraverso la pipeline di conversione e quantizzazione del modello:
byte heap -> interpretati come valori tensore F16/F32 -> convertiti/quantizzati -> output tensore GGUF
Questo percorso è con perdita, specialmente con formati quantizzati come Q4_K_M. Q8_0 preserva più informazioni numeriche di Q4_K_M, ma non ha comunque prodotto un recupero affidabile di testo in chiaro nei miei test in stile black-box.
Questo è uno strumento di riproduzione di laboratorio locale e di analisi degli artefatti.
Non fornisce una primitiva affidabile di esfiltrazione remota di segreti. Richiede inoltre accesso Docker locale per copiare il blob generato da Ollama dal container di test, quindi la fase di analisi non è un flusso di lavoro remoto puramente black-box.
La conclusione pratica dei miei test è:
Esiste anche un repository PoC separato di 0x0OZ:
Quell'implementazione dimostra un flusso di lavoro in stile white-box più robusto spingendo l'artefatto del modello generato verso un registry controllato. Con la correzione del flusso di upload del registry dalla mia PR, si completa correttamente nel mio laboratorio locale:
Anche con quel percorso migliore di raccolta degli artefatti end-to-end, la stessa avvertenza sulla qualità dei dati rimane importante: l'output è dato quantizzato/trasformato dal modello, non un dump heap grezzo diretto.
Questo repository è solo per ricerca di vulnerabilità autorizzata e riproduzione difensiva. Testa solo contro sistemi che possiedi o per cui hai esplicita autorizzazione a valutare.