Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
one-multiply-too-many-cve-2026-70638-llama-cpp-android-jni-integer-overflow — Воспроизводит целочисленное переполнение CVE-2026-70638 в llama.cpp Android JNI с помощью безопасной арифметической демонстрации, генератора вредоносных GGUF-файлов и Frida-хука для авторизованных исследований в области безопасности. | Kitploit
Инструменты/GitHubGitHub/hunt-benito/one-multiply-too-many-cve-2026-70638-llama-cpp-android-jni-integer-overflow
Безопасность AndroidГенерация полезной нагрузкиАнализ уязвимостейДинамический анализ кода (DAST)ЭксплуатацияОбучение и Образование
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

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Воспроизводит целочисленное переполнение CVE-2026-70638 в llama.cpp Android JNI с помощью безопасной арифметической демонстрации, генератора вредоносных GGUF-файлов и Frida-хука для авторизованных исследований в области безопасности.

Репозиторий
81 месяц назадЕщё не проверено

CVE-2026-70638 - llama.cpp LLaMA-Android JNI: целочисленное переполнение

Сопутствующий PoC к статье Hunt-Benito «Одно лишнее умножение: CVE-2026-70638 — целочисленное переполнение при выделении памяти в куче в Android JNI llama.cpp» → https://www.hunt-benito.com/blog/one-multiply-too-many-cve-2026-70638-llama-cpp-android-jni-integer-overflow/

Ошибка

Java_android_llama_cpp_LLamaAndroid_new_1batch() в examples/llama.android/llama/src/main/cpp/llama-android.cpp (сборки llama.cpp b1886–b7445) — это ручная копия llama_batch_init(), выполняющая несколько непроверяемых вычислений malloc(sizeof(T) * count). При управляемом атакующим множителе (n_seq_max, n_tokens или embd) размер переполняется, блок кучи оказывается меньше запрошенного, и последующие записи вызывающего кода переполняют его (CWE-190 → CWE-122). NVD CVSS 3.1 7.8 (высокий) (AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H).

Уязвимая ключевая часть функции:

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

Файлы

Запуск

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

Ожидаемый вывод демонстрации (фрагмент)

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)

Область действия и точность

  • Превращение в слишком маленькое выделение напрямую достижимо на 32-битных ABI (armeabi-v7a, всё ещё поставляется). На 64-битных (arm64-v8a) то же непроверяемое выражение вместо этого запрашивает блок размером в несколько ГиБ, который malloc не может выделить (NULL → последующий крах / DoS); повреждение кучи требует 32-битного пути.
  • overflow_demo.c не выполняет записей за пределами границ — он лишь доказывает, что арифметика переполняется. craft_gguf.py создаёт нерабочую модель (без тензоров), поэтому её нельзя применить как оружие в текущем виде; он показывает, что управляемый атакующим множитель берётся из недоверенных метаданных.

Устранение

Обновите llama.cpp до b7446 или новее (путь JNI new_1batch был удалён при переработке Android-обвязки). Если вы вынуждены остаться на уязвимой сборке или форке, примените патч валидации Cyera с https://github.com/Vladimir-tokarev-cyera/llama-cpp-security-patches (защита batch-init из CVE-2026-43627 — каноническое исправление для этого класса ошибок).

Источники

  • NVD — https://nvd.nist.gov/vuln/detail/CVE-2026-70638
  • Исправление (переработка) — https://github.com/ggml-org/llama.cpp/commit/5c0d18881e0e9794c96b2602736b758bac9d9388
  • Затронутый исходный код — https://github.com/ggml-org/llama.cpp/blob/b7445/examples/llama.android/llama/src/main/cpp/llama-android.cpp

ТОЛЬКО ДЛЯ АВТОРИЗОВАННЫХ ИССЛЕДОВАНИЙ В ОБЛАСТИ БЕЗОПАСНОСТИ И В ОБРАЗОВАТЕЛЬНЫХ ЦЕЛЯХ.

Скачать инструмент
ФайлНазначение
overflow_demo.cАвтономный репродуктор переполнения арифметики размера для 32-битного (armeabi-v7a) и 64-битного (arm64-v8a) size_t. Без повреждённых записей — безопасен для запуска где угодно.
craft_gguf.pyСоздаёт минимальный структурно валидный GGUF со значением llama.embedding_length, заданным атакующим, демонстрируя вектор доставки через файл модели (embd читается напрямую из недоверенных метаданных).
hook_new_batch.jsFrida-хук, который логирует/переопределяет три множителя на живой JNI-границе исследовательского устройства.