{"id":"CVE-2026-116096","kind":"vulnerability","aliases":["CVE-2026-116096"],"related":[],"title":"llama.cpp: malformed mmproj file causes out-of-bounds write locally","description":"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.","summary":"A malicious mmproj file passed to the Pocket-TTS state-slot code in llama.cpp writes past the end of a heap buffer. Per the sources, a local attacker can use this to corrupt memory, and public exploit code exists, though current master and the latest release now abort on such files instead of silently writing.","severity":"medium","cvss":5.3,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["ai-tooling","llama.cpp","local-inference","self-hosted"],"not_affected_if":["no-pocket-tts","trusted-mmproj-only"],"how_to_check":"- Confirm the llama.cpp build in use is older than `b11796`, which the advisory names as fixed.\n- Check whether the deployment runs the Pocket-TTS / gen-audio path and loads mmproj files from untrusted sources.\n- unknown: the sources do not give a command that prints the build tag.","fix":"- Move llama.cpp to `b11796` or later, as the advisory recommends.\n- Move to the latest release `b11871`, which aborts on a malformed mmproj instead of writing out of bounds.\n- Only load mmproj files from trusted sources until the by-construction fix (PR #29360) is merged.","status":"open","published_at":"2026-10-25T23:17:41+00:00","first_seen_at":"2026-10-25T23:36:15+00:00","triaged_at":"2026-10-25T23:37:01+00:00","updated_at":"2026-10-25T23:37:01+00:00","category":"ai-tooling","confidence":0.6,"triage":{"at":"2026-10-25T23:37:01Z","model":"claude-haiku-5-5","output":{"fix":"- Move llama.cpp to `b11796` or later, as the advisory recommends.\n- Move to the latest release `b11871`, which aborts on a malformed mmproj instead of writing out of bounds.\n- Only load mmproj files from trusted sources until the by-construction fix (PR #29360) is merged.","reach":"local","title":"llama.cpp: malformed mmproj file causes out-of-bounds write locally","impact":"medium","summary":"A malicious mmproj file passed to the Pocket-TTS state-slot code in llama.cpp writes past the end of a heap buffer. Per the sources, a local attacker can use this to corrupt memory, and public exploit code exists, though current master and the latest release now abort on such files instead of silently writing.","category":"ai-tooling","nicknames":[],"who_cares":["llama.cpp","self-hosted","local-inference"],"confidence":0.6,"needs_auth":"unknown","worst_case":"Heap out-of-bounds write from a malformed mmproj file, locally.","analyst_note":"Sources conflict: NVD says upgrading to b11796 fixes it, but the addendum says current master and b11871 abort rather than prevent the write and PR #29360 is still open. Check the llama.cpp release notes and PR #29360 at github.com/ggml-org/llama.cpp/pull/29360 to confirm the fixed version.","how_to_check":"- Confirm the llama.cpp build in use is older than `b11796`, which the advisory names as fixed.\n- Check whether the deployment runs the Pocket-TTS / gen-audio path and loads mmproj files from untrusted sources.\n- unknown: the sources do not give a command that prints the build tag.","needs_analyst":true,"not_affected_if":["no-pocket-tts","trusted-mmproj-only"],"who_is_affected":"Systems that run llama.cpp's Pocket-TTS or gen-audio code and load mmproj files, especially where other local users can supply those files. Hosts that do not use this path or only load trusted mmproj files can skip urgent action, though the upgrade still applies.","user_interaction":"unknown","needs_special_setup":"unknown","severity_if_unknown":"unknown"},"cost_usd":0.001301,"input_tokens":3569,"output_tokens":1888,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-116096':14A,17A '-2026':13A,16A '0a1ef309cdbb9f2024f58a38fb4c42352c5db569':158C '29360':220C 'abort':77B,210C,238C 'access':132C,223C 'activ':206C 'affect':95C,160C 'ai':19B 'ai-tool':18B 'argument':120C 'assert':208C 'attack':57B,129C,147C 'audio':173C 'avail':138C 'b11796':151C 'b11871':194C 'bound':9A,126C,170C 'buffer':51B 'caus':5A,122C,234C 'code':41B,67B 'compon':112C,161C 'construct':217C 'corrupt':62B 'could':143C 'current':70B,188C 'cve':12A,15A 'design':242C 'detect':236C 'end':47B 'exist':68B 'exploit':66B,134C,184C 'file':4A,31B,80B,108C,227C 'fix':218C 'function':101C 'gen':172C 'ggml':92C,207C 'ggml-org':91C 'heap':50B,167C,185C 'host':27B 'identifi':89C 'infer':24B 'instead':81B 'issu':98C,155C 'latest':74B,192C 'list':102C 'llama.cpp':1A,21B,43B,94C 'local':11A,23B,56B,131C 'local-infer':22B 'longer':181C 'made':137C 'malform':2A,225C 'malici':29B,196C 'manipul':117C 'master':71B,189C 'memori':63B 'mmproj':3A,30B,121C,197C,226C 'name':157C 'oob':222C 'open':230C 'org':93C 'out-of-bound':6A,123C 'pass':32B 'past':45B 'patch':156C 'path':178C 'per':52B 'pocket':36B,114C,174C 'pocket-tt':35B,113C 'pockettt':103C 'pr':219C 'prevent':221C,240C 'previous':199C 'public':65B,141C 'recommend':215C 'releas':75B,193C,205C 'report':166C 'requir':130C 'resolv':153C 'root':233C 'self':26B 'self-host':25B 'silent':83B,183C 'slot':40B,105C 'sourc':54B 'state':39B,104C,176C 'state-slot':38B 'still':229C 'submitt':213C 'though':69B 'tool':20B 'tools/mtmd/models/pockettts-gen.cpp':109C 'trigger':200C 'trip':203C 'tts':37B,115C,175C 'upgrad':148C,164C 'use':59B,145C 'version':150C 'weak':86C 'write':10A,44B,84B,127C,171C,186C","nicknames":[],"mitigations":[],"who_affected":"Systems that run llama.cpp's Pocket-TTS or gen-audio code and load mmproj files, especially where other local users can supply those files. Hosts that do not use this path or only load trusted mmproj files can skip urgent action, though the upgrade still applies.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-25T23:17:41+00:00","kev":null,"cvss_vector":"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/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","cvss_by":"cna@vuldb.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-116096","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-116096","severity":null,"published_at":"2026-10-25T23:17:41+00:00","modified_at":"2026-10-25T23:17:41+00:00","first_seen_at":"2026-10-25T23:36:15+00:00","fetched_at":"2026-10-25T23:36:15+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}