Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
one-multiply-too-many-cve-2026-70638-llama-cpp-android-jni-integer-overflow — Reproduz o estouro de inteiro CVE-2026-70638 no JNI Android do llama.cpp com uma demonstração segura de aritmética, gerador de GGUF malicioso e hook Frida para pesquisa de segurança autorizada. | Kitploit
Ferramentas/GitHubGitHub/hunt-benito/one-multiply-too-many-cve-2026-70638-llama-cpp-android-jni-integer-overflow
Segurança AndroidGeração de PayloadsAnálise de VulnerabilidadesAnálise Dinâmica de Código (DAST)ExploraçãoAprendizado e Educação
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

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Reproduz o estouro de inteiro CVE-2026-70638 no JNI Android do llama.cpp com uma demonstração segura de aritmética, gerador de GGUF malicioso e hook Frida para pesquisa de segurança autorizada.

Ver Repositório
8há 1 mêsAinda não revisado

CVE-2026-70638 - Estouro de Inteiro no JNI LLaMA-Android do llama.cpp

PoC complementar para o artigo da Hunt-Benito "Uma Multiplicação a Mais: CVE-2026-70638 — Estouro de Inteiro na Alocação de Heap do JNI Android do llama.cpp" → https://www.hunt-benito.com/blog/one-multiply-too-many-cve-2026-70638-llama-cpp-android-jni-integer-overflow/

A falha

Java_android_llama_cpp_LLamaAndroid_new_1batch() em examples/llama.android/llama/src/main/cpp/llama-android.cpp (builds b1886–b7445 do llama.cpp) é uma cópia manual de llama_batch_init() que realiza vários cálculos não verificados de malloc(sizeof(T) * count). Com um multiplicador controlado pelo atacante (n_seq_max, n_tokens ou embd), o tamanho sofre wrap, o bloco de heap fica subdimensionado e as gravações subsequentes do chamador causam estouro (CWE-190 → CWE-122). NVD CVSS 3.1 7.8 Alta (AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H).

O núcleo vulnerável da função:

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

Arquivos

Execução

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

Saída esperada da demonstração (excerto)

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)

Notas sobre escopo e precisão

  • O wrap para alocação subdimensionada é diretamente alcançável em ABIs de 32 bits (armeabi-v7a, ainda distribuídas). Em 64 bits (arm64-v8a), a mesma expressão não verificada solicita um bloco de vários GiB cujo malloc falha (NULL → falha posterior / DoS); a corrupção de heap exige o caminho de 32 bits.
  • overflow_demo.c não realiza nenhuma gravação fora dos limites — ele apenas prova que a aritmética sofre wrap. craft_gguf.py produz um modelo não executável (sem tensores), portanto não pode ser usado como arma como está; ele demonstra que o multiplicador controlado pelo atacante tem origem em metadados não confiáveis.

Correção

Atualize o llama.cpp para b7446 ou posterior (o caminho JNI new_1batch foi removido pela reescrita do binding Android). Se você precisar permanecer em uma build afetada ou em um fork downstream, aplique o patch de validação da Cyera de https://github.com/Vladimir-tokarev-cyera/llama-cpp-security-patches (a proteção CVE-2026-43627 do batch-init é a correção canônica para esta classe de falha).

Fontes

  • NVD — https://nvd.nist.gov/vuln/detail/CVE-2026-70638
  • Correção (reescrita) — https://github.com/ggml-org/llama.cpp/commit/5c0d18881e0e9794c96b2602736b758bac9d9388
  • Código-fonte afetado — https://github.com/ggml-org/llama.cpp/blob/b7445/examples/llama.android/llama/src/main/cpp/llama-android.cpp

APENAS PARA PESQUISA DE SEGURANÇA AUTORIZADA E USO EDUCACIONAL.

Baixar ferramenta
ArquivoFinalidade
overflow_demo.cReproduz de forma autônoma a aritmética de tamanho com wrap em size_t de 32 bits (armeabi-v7a) vs 64 bits (arm64-v8a). Nenhuma gravação corrompida — seguro para executar em qualquer lugar.
craft_gguf.pyConstrói um GGUF mínimo e estruturalmente válido com llama.embedding_length definido para um valor do atacante, demonstrando o vetor de entrega via arquivo de modelo (embd é lido diretamente de metadados não confiáveis).
hook_new_batch.jsHook do Frida que registra/substitui os três multiplicandos na fronteira JNI em tempo real em um dispositivo de pesquisa.