Skip to main content

llama.cpp EUVDEUVD-2026-109577

| CVE-2026-116096 LOW
Buffer Overflow (CWE-119)
2026-10-25 cna@vuldb.com GHSA-w879-pch3-42x5
1.9
CVSS 4.0 · Vendor: vuldb
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Gain local low-privilege access
  2. Exploit
    Supply crafted mmproj to Pocket-TTS gen path
  3. Execution
    Trigger OOB write in list_pockettts_state_slots
  4. Impact
    Corrupt adjacent heap state buffers

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Bounds checking, buffer size validation
MITRE ATT&CK

2 techniques across 2 tactics: Execution, Privilege Escalation

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires local access with low privileges (PR:L) and that the target host loads an attacker-controlled or malformed mmproj (multimodal projector) file through llama.cpp's Pocket-TTS audio-generation / gen-audio state_out path (the list_pockettts_state_slots function in tools/mtmd/models/pockettts-gen.cpp). The decisive prerequisite is that the victim process ingests an untrusted mmproj file while using the Pocket-TTS TTS feature - a non-default, specialized workflow, not a core inference path. Limiting factors: no remote/network vector (AV:L), the operator must actively load the malicious model file, and on release b11871 and current master the malformed file no longer causes a silent exploitable write but instead trips a release-active GGML_ASSERT and aborts, reducing impact to a controlled abort rather than arbitrary heap corruption.

Impact

All available signals point to this being a genuinely low-priority issue rather than a high-CVSS inflation case. The CVSS 4.0 vector is AV:L (local attack vector), AC:L, AT:N, PR:L (requires local low-privilege access), UI:N, with only Low confidentiality, integrity and availability impact (VC:L/VI:L/VA:L) and no subsequent-system impact, yielding a base score of just 1.9. This is not a KEV entry - there is no indication of confirmed active exploitation. EPSS is not provided in the input, so exploitation probability cannot be quantified. A public PoC reference exists but is explicitly flagged as not verified as working exploit code, and the vuln.today Decision label is 'monitor' - the lowest actionable tier - which is consistent with the low CVSS and local-only vector. Note a conflict in the source data: the NVD-style Description states 'The exploit has been made available to the public and could be used for attacks,' while the multi-source intelligence qualifies the same artifact as 'reference only, not verified as working exploit code' - treat the PoC as unverified. A further mitigating nuance from the evidence: on current master and release b11871 the malformed-mmproj condition now trips a release-active GGML_ASSERT and aborts rather than performing a silent exploitable heap write, so the condition is detected-and-aborted (a denial-of-service-style abort) rather than prevented by design; the submitter's by-construction fix (PR #29360) remains open. Overall this is a low real-world priority: local access and operator-supplied model files are required, impacts are rated Low, and there is no confirmed exploitation.

Exploit ScenarioDerived

An attacker who can place or substitute a crafted multimodal projector (mmproj) model file that is then loaded by a victim's llama.cpp Pocket-TTS audio-generation workflow triggers an out-of-bounds heap write in list_pockettts_state_slots / the gen-audio state_out path. Because the CVSS vector is AV:L/PR:L, this requires local access and low-level privileges on the host - it is not a remote network attack. A public PoC reference exists but is not verified as working exploit code, and on b11871/master the malformed file now causes a GGML_ASSERT abort rather than a silent memory write.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
No patch listed yet

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 25, 2026

Loading a malformed mmproj (multimodal projector) file into llama.cpp's Pocket-TTS audio-generation path can drive an out-of-bounds heap write through list_pockettts_state_slots in tools/mtmd/models/pockettts-gen.cpp. The exposure is narrow: it requires local access with low privileges (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L) plus the operator actually loading an untrusted projector while using the non-default Pocket-TTS feature, so it is not a remote or default-inference risk. A public PoC reference exists but is not verified as working exploit code, there is no KEV listing, and the reviewed decision label is monitor; vendor build b11796 (commit 0a1ef309) is the documented fix, and on current master and b11871 the same malformed input trips a release-active GGML_ASSERT and aborts instead of corrupting the heap, while the by-construction hardening PR #29360 remains open.

RemediationAI

Upgrade llama.cpp to build b11796 or later (commit 0a1ef309cdbb9f2024f58a38fb4c42352c5db569, release at https://github.com/ggml-org/llama.cpp/releases/tag/b11796); builds at b11871 and current master additionally carry the clip_gen_state refactor that turns the malformed-mmproj condition into a release-active GGML_ASSERT abort. Track PR #29360, which would prevent the out-of-bounds access by construction, since until it merges the root cause is only detected and aborted. Because the decisive prerequisite is the process ingesting an untrusted projector, the actionable compensating control is to restrict Pocket-TTS usage to mmproj files from trusted, integrity-checked sources and avoid the gen-audio/state_out workflow with third-party model files - the trade-off being loss of the ability to run community or downloaded projectors. Also restrict local shell access to the host running llama.cpp, since the vector is AV:L/PR:L; note that on patched builds a malformed projector now terminates the process with an assertion failure rather than degrading gracefully, so plan for an abort rather than a clean error.

Affected VersionsENISA

llama.cpp b9058
llama.cpp b5693
llama.cpp 55d4206c8
llama.cpp b8585
llama.cpp b8492
llama.cpp b7824
llama.cpp 0.17.1
llama.cpp 0.4.0
llama.cpp b7445
llama.cpp b9060
llama.cpp 55abc39

Affected Packages

euvd llama_cpp no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The flaw is a CWE-119 improper-restriction-of-operations-within-a-memory-buffer case in llama.cpp's multimodal tooling (tools/mtmd). The Pocket-TTS generator keeps per-sequence decoder state - RNG, decoder KV/conv state and output buffers - that the mmproj itself writes and reads back between inference calls, and it is serialized through the gen-audio state_out path whose slot layout is enumerated by list_pockettts_state_slots(). Because that layout is derived from model hyper-parameters carried in the mmproj file, a crafted projector can describe slots that do not match the buffer the caller sized for them. The upstream commit 0a1ef309 rewrote this design: state now lives in a clip_gen_state allocated with ggml_backend_alloc_ctx_tensors and cleared on cold start, state_out copying goes through copy_gen_state_out(), which asserts ggml_nbytes(src) == ggml_nbytes(dst) before touching memory, and README-dev.md now states the mmproj-facing API is explicitly responsible for only its own per-sequence data. The commit does not describe the precise arithmetic that overran the buffer; what it changes is the ownership and validation of the state slots. On current master and release b11871 a malformed mmproj that previously produced a silent heap write instead aborts on a release-active GGML_ASSERT, so the condition is detected-and-aborted rather than prevented-by-design until PR #29360 ('prevent OOB accesses from malformed mmproj files') lands.

Know when the next one hits your stack

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (vuldb) PRIMARY 1.9 LOW
CVSS:4.0/AV:L/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N/E:P
vuln.today AI 5.3 MEDIUM

Local-only trigger via an attacker-supplied mmproj loaded under low local privileges (AV:L/PR:L); heap OOB write with impacts rated Low and no scope change, matching the input's VC:L/VI:L/VA:L.

3.1 AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L
4.0 AV:L/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N

Primary rating from Vendor (vuldb).

CVSS VectorVendor: vuldb

Attack Vector
Local
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
Low
Vulnerable system: Integrity
Low
Vulnerable system: Availability
Low
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

A weakness has been identified in ggml-org llama.cpp. Affected by this issue is the function list_pockettts_state_slots of the file tools/mtmd/models/pockettts-gen.cpp of the component Pocket-TTS. This manipulation of the argument mmproj causes out-of-bounds write. The attack requires local access. The exploit has been made available to the public and could be used for attacks. Upgrading to version b11796 can resolve this issue. Patch name: 0a1ef309cdbb9f2024f58a38fb4c42352c5db569. The affected component should be upgraded. The reported heap out‑of‑bounds write (gen‑audio / pocket‑tts state_out path) is no longer a silent exploitable heap write on current master and the latest release b11871 - a malicious mmproj that previously triggered it now trips a release‑active GGML_ASSERT and aborts. But the submitter's recommended by‑construction fix (PR #29360 "prevent OOB accesses from malformed mmproj files") is still open. So the root cause is detected‑and‑aborted, not prevented‑by‑design.

Threat Intelligence Overview

Prevalence
Medium
llama.cpp is popular, but the Pocket-TTS audio-gen path is a niche feature
Exploit
POC
Public exploit code exists
Social Media
3
Sightings
Data Quality
4 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity LOW
CISA KEV No
Public POC Yes
EPSS N/A
Patch available No
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation· derived
Poc
System Exposure· derived
Small
Automatable· derived
No
Human Impact· derived
Low

Priority Score

30
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +10
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

A buffer overflow occurs when a program writes more data to a memory buffer than it was allocated to hold, causing the excess data to spill into adjacent memory regions.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy