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 SecurityPayload GenerationVulnerability AnalysisDynamic Code Analysis (DAST)ExploitationLearning & Education
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 정수 오버플로우

Hunt-Benito 기사에 대한 동반 PoC "One Multiply Too Many: CVE-2026-70638 — Integer Overflow in llama.cpp's Android JNI Heap Allocation" → https://www.hunt-benito.com/blog/one-multiply-too-many-cve-2026-70638-llama-cpp-android-jni-integer-overflow/

버그

examples/llama.android/llama/src/main/cpp/llama-android.cpp의 Java_android_llama_cpp_LLamaAndroid_new_1batch() (llama.cpp 빌드 b1886–b7445)는 검사 없는 여러 malloc(sizeof(T) * count) 계산을 수행하는 llama_batch_init()의 수동 복사본입니다. 공격자가 제어하는 승수(n_seq_max, n_tokens 또는 embd)로 크기가 래핑되고, 힙 블록이 과소 할당되며, 호출자의 후속 쓰기가 이를 오버플로우합니다(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).

함수의 취약한 핵심 부분:

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) 다중 GiB 블록을 요청합니다. 힙 손상은 32비트 경로가 필요합니다.
  • overflow_demo.c는 범위를 벗어난 쓰기를 수행하지 않습니다 — 산술이 래핑된다는 것만 증명합니다. craft_gguf.py는 (텐서가 없는) 실행 불가능한 모델을 생성하므로 그대로 무기화할 수 없습니다. 공격자가 제어하는 승수가 신뢰할 수 없는 메타데이터에서 비롯된다는 것을 보여줍니다.

수정 방법

llama.cpp를 b7446 이상으로 업그레이드하십시오(new_1batch JNI 경로는 Android 바인딩 재작성으로 제거됨). 영향을 받는 빌드 또는 다운스트림 포크를 유지해야 하는 경우 https://github.com/Vladimir-tokarev-cyera/llama-cpp-security-patches 의 Cyera 검증 패치를 적용하십시오 (CVE-2026-43627 batch-init 가드는 이 버그 클래스에 대한 표준 수정입니다).

출처

  • 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.c32비트(armeabi-v7a) 및 64비트(arm64-v8a) size_t에서 래핑 크기 산술을 재현하는 독립형 리프로듀서. 손상된 쓰기 없음 — 어디서든 안전하게 실행 가능.
craft_gguf.pyllama.embedding_length를 공격자 값으로 설정한 최소한의 구조적으로 유효한 GGUF를 만들어 모델 파일 전달 벡터를 보여줌(embd는 신뢰할 수 없는 메타데이터에서 직접 읽힘).
hook_new_batch.js연구용 기기의 라이브 JNI 경계에서 세 가지 피승수를 기록/재정의하는 Frida 훅.