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
one-multiply-too-many-cve-2026-70638-llama-cpp-android-jni-integer-overflow — Riproduce l'integer overflow CVE-2026-70638 in llama.cpp Android JNI con una demo aritmetica sicura, un generatore di GGUF malevoli e un hook Frida per la ricerca di sicurezza autorizzata. | Kitploit
Strumenti/GitHubGitHub/hunt-benito/one-multiply-too-many-cve-2026-70638-llama-cpp-android-jni-integer-overflow
Sicurezza AndroidGenerazione di PayloadAnalisi delle VulnerabilitàAnalisi Dinamica del Codice (DAST)ExploitApprendimento e Formazione
GitHubhunt-benito/one-multiply-too-many-cve-2026-70638-llama-cpp-android-jni-integer-overflow

one-multiply-too-many-cve-2026-70638-llama-cpp-android-jni-integer-overflow

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

Riproduce l'integer overflow CVE-2026-70638 in llama.cpp Android JNI con una demo aritmetica sicura, un generatore di GGUF malevoli e un hook Frida per la ricerca di sicurezza autorizzata.

Vedi Repository
12 giorni faNon ancora revisionato

CVE-2026-70638 - Overflow di interi JNI in LLaMA-Android di llama.cpp

PoC complementare per l'articolo di Hunt-Benito "Una moltiplicazione di troppo: CVE-2026-70638 — Overflow di interi nell'allocazione dell'heap JNI Android di llama.cpp" → https://www.hunt-benito.com/blog/one-multiply-too-many-cve-2026-70638-llama-cpp-android-jni-integer-overflow/

Il bug

Java_android_llama_cpp_LLamaAndroid_new_1batch() in examples/llama.android/llama/src/main/cpp/llama-android.cpp (build di llama.cpp b1886–b7445) è una copia manuale di llama_batch_init() che esegue diversi calcoli malloc(sizeof(T) * count) non controllati. Con un moltiplicatore controllato dall'attaccante (n_seq_max, n_tokens o embd), la dimensione subisce un wrap, il blocco heap è sottodimensionato e le successive scritture del chiamante lo fanno traboccare (CWE-190 → CWE-122). NVD CVSS 3.1 7.8 High (AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H).

Il nucleo vulnerabile della funzione:

root@kitploit:~
batch->seq_id[i] = (llama_seq_id *) malloc(sizeof(llama_seq_id) * n_seq_max);

File

Esecuzione

root@kitploit:~
# 1. Arithmetic demonstrator (the core of the article's PoC)
cc -O2 -o overflow_demo overflow_demo.c
./overflow_demo

# 2. Malicious model file
python3 craft_gguf.py 0x40000001 malicious.gguf   # -> 416-byte GGUF
xxd malicious.gguf | head                           # verify magic 'GGUF' + key

# 3. Live hook (rooted/emulator device with frida-server, authorized target only)
frida -U -l hook_new_batch.js -f <package> --no-pause

Output demo atteso (estratto)

root@kitploit:~
[2] Malicious: n_seq_max = 0x40000000 (2^30). 4 * 2^30 = 2^32 -> wraps:
  n_seq_max (attacker)   = 1073741824 (0x40000000)
  malloc size, arm64     = 4294967296 bytes (4.00 GiB)
  malloc size, armeabi-v7a = 0 bytes
  caller believes it got = 4294967296 bytes
  >>> 32-bit WRAP: 4294967296-byte write into 0-byte heap block (CWE-122)

Note su ambito e accuratezza

  • Il wrap verso un'allocazione sottodimensionata è direttamente raggiungibile sulle ABI a 32 bit (armeabi-v7a, ancora distribuite). Su 64 bit (arm64-v8a) la stessa espressione non controllata richiede invece un blocco multi-GiB che malloc non riesce ad allocare (NULL → crash successivo / DoS); la corruzione dell'heap richiede il percorso a 32 bit.
  • overflow_demo.c non esegue alcuna scrittura fuori dai limiti — dimostra solo che l'aritmetica subisce un wrap. craft_gguf.py produce un modello non eseguibile (nessun tensore) quindi non può essere armato così com'è; dimostra che il moltiplicatore controllato dall'attaccante proviene da metadati non attendibili.

Rimedio

Aggiorna llama.cpp a b7446 o successiva (il percorso JNI new_1batch è stato rimosso dalla riscrittura del binding Android). Se devi restare su una build interessata o su un fork a valle, applica la patch di validazione di Cyera da https://github.com/Vladimir-tokarev-cyera/llama-cpp-security-patches (il controllo batch-init di CVE-2026-43627 è la correzione canonica per questa classe di bug).

Fonti

  • NVD — https://nvd.nist.gov/vuln/detail/CVE-2026-70638
  • Fix (riscrittura) — https://github.com/ggml-org/llama.cpp/commit/5c0d18881e0e9794c96b2602736b758bac9d9388
  • Sorgente interessata — https://github.com/ggml-org/llama.cpp/blob/b7445/examples/llama.android/llama/src/main/cpp/llama-android.cpp

SOLO PER RICERCA SULLA SICUREZZA AUTORIZZATA E USO DIDATTICO.

Scarica lo strumento
FileScopo
overflow_demo.cRiproduttore autonomo dell'aritmetica di wrap della dimensione con size_t a 32 bit (armeabi-v7a) vs 64 bit (arm64-v8a). Nessuna scrittura corrotta — sicuro da eseguire ovunque.
craft_gguf.pyCrea un GGUF minimo e strutturalmente valido con llama.embedding_length impostato a un valore dell'attaccante, mostrando il vettore di consegna tramite file di modello (embd è letto direttamente da metadati non attendibili).
hook_new_batch.jsHook Frida che registra/sovrascrive i tre moltiplicandi al confine JNI live su un dispositivo di ricerca.