Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Outils/GitHubGitHub/hunt-benito/one-multiply-too-many-cve-2026-70638-llama-cpp-android-jni-integer-overflow
Sécurité AndroidGénération de PayloadsAnalyse des VulnérabilitésAnalyse Dynamique de Code (DAST)ExploitationApprentissage et Éducation
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

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Reproduit le débordement d'entier CVE-2026-70638 dans llama.cpp Android JNI avec une démonstration arithmétique sûre, un générateur GGUF malveillant et un hook Frida pour la recherche en sécurité autorisée.

Voir le dépôt
il y a 12 joursPas encore vérifié

CVE-2026-70638 - Dépassement d'entier JNI LLaMA-Android de llama.cpp

PoC compagnon pour l'article de Hunt-Benito « Une multiplication de trop : CVE-2026-70638 — Dépassement d'entier dans l'allocation de tas JNI Android de llama.cpp » → https://www.hunt-benito.com/blog/one-multiply-too-many-cve-2026-70638-llama-cpp-android-jni-integer-overflow/

Le bug

Java_android_llama_cpp_LLamaAndroid_new_1batch() dans examples/llama.android/llama/src/main/cpp/llama-android.cpp (builds llama.cpp b1886–b7445) est une copie manuelle de llama_batch_init() qui effectue plusieurs calculs malloc(sizeof(T) * count) non vérifiés. Avec un multiplicateur contrôlé par l'attaquant (n_seq_max, n_tokens ou embd), la taille déborde, le bloc de tas est sous-dimensionné et les écritures ultérieures de l'appelant débordent de ce bloc (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).

Le cœur vulnérable de la fonction :

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

Fichiers

Exécution

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

Sortie attendue de la démonstration (extrait)

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)

Notes de portée et de précision

  • Le débordement menant à une allocation sous-dimensionnée est directement atteignable sur les ABI 32 bits (armeabi-v7a, toujours distribuées). Sur 64 bits (arm64-v8a), la même expression non vérifiée demande à la place un bloc de plusieurs Gio que malloc ne peut pas allouer (NULL → crash ultérieur / DoS) ; la corruption du tas nécessite le chemin 32 bits.
  • overflow_demo.c n'effectue aucune écriture hors limites — il prouve uniquement que l'arithmétique déborde. craft_gguf.py produit un modèle non exécutable (aucun tenseur) et ne peut donc pas être utilisé comme arme tel quel ; il démontre que le multiplicateur contrôlé par l'attaquant provient de métadonnées non fiables.

Remédiation

Mettez à jour llama.cpp vers b7446 ou une version ultérieure (le chemin JNI new_1batch a été supprimé par la réécriture de la liaison Android). Si vous devez rester sur une build affectée ou un fork en aval, appliquez le patch de validation de Cyera depuis https://github.com/Vladimir-tokarev-cyera/llama-cpp-security-patches (la protection batch-init CVE-2026-43627 est le correctif canonique pour cette classe de bug).

Sources

  • NVD — https://nvd.nist.gov/vuln/detail/CVE-2026-70638
  • Correctif (réécriture) — https://github.com/ggml-org/llama.cpp/commit/5c0d18881e0e9794c96b2602736b758bac9d9388
  • Source affectée — https://github.com/ggml-org/llama.cpp/blob/b7445/examples/llama.android/llama/src/main/cpp/llama-android.cpp

RÉSERVÉ À LA RECHERCHE EN SÉCURITÉ AUTORISÉE ET À L'USAGE ÉDUCATIF UNIQUEMENT.

Télécharger l’outil
FichierObjectif
overflow_demo.cReproducteur autonome de l'arithmétique de dépassement de la taille en 32 bits (armeabi-v7a) vs 64 bits (arm64-v8a) size_t. Aucune écriture corrompue — sûr à exécuter n'importe où.
craft_gguf.pyConstruit un GGUF minimal et structurellement valide avec llama.embedding_length défini sur une valeur contrôlée par l'attaquant, montrant le vecteur de livraison par fichier de modèle (embd est lu directement depuis des métadonnées non fiables).
hook_new_batch.jsHook Frida qui journalise/remplace les trois multiplicandes à la frontière JNI en direct sur un appareil de recherche.