{"id":"CVE-2026-112145","kind":"vulnerability","aliases":["CVE-2026-112145"],"related":[],"title":"speaches: model argument lets remote users select code to load","description":"A security vulnerability has been detected in speaches-ai speaches up to 0.9.0-rc.3. This vulnerability affects the function PyannoteDiarizationModelManager._load_fn of the file src/speaches/executors/pyannote_diarization.py of the component Pyannote Diarization Model Loading. The manipulation of the argument model leads to use of externally-controlled input to select classes or code. It is possible to initiate the attack remotely. The exploit has been disclosed publicly and may be used. The feature was introduced in PR #628 (feat/switch to pyannote audio), merged as commit 870e1e16a73452496e99d49f759eabd692a8e0e0. The project was informed of the problem early through an issue report but has not responded yet.","summary":"Speaches, an AI speech server, passes an attacker-controlled model name into the pyannote diarization model loader, which selects classes or code to run based on that input. A remote attacker who can reach the API may be able to execute code on the server.","severity":"high","cvss":7.5,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["ai-speech","ai-tooling","pyannote","python","self-hosted","speaches"],"not_affected_if":["default-config"],"how_to_check":"- Check the installed Speaches version; the sources say versions up to `0.9.0-rc.3` are affected, so confirm whether the deployed build is newer.\n- Confirm whether the diarization endpoint is reachable from untrusted networks.","fix":"- The sources do not name a fixed version; check the upstream speaches-ai/speaches repository for a patched release.\n- Until patched, restrict network access to the Speaches API and do not expose it publicly.","status":"open","published_at":"2026-10-19T14:17:02+00:00","first_seen_at":"2026-10-23T21:57:18+00:00","triaged_at":"2026-10-25T03:23:05+00:00","updated_at":"2026-10-25T03:23:05+00:00","category":"ai-tooling","confidence":0.6,"triage":{"at":"2026-10-25T03:23:05Z","model":"claude-haiku-5-5","output":{"fix":"- The sources do not name a fixed version; check the upstream speaches-ai/speaches repository for a patched release.\n- Until patched, restrict network access to the Speaches API and do not expose it publicly.","reach":"internet","title":"speaches: model argument lets remote users select code to load","impact":"high","summary":"Speaches, an AI speech server, passes an attacker-controlled model name into the pyannote diarization model loader, which selects classes or code to run based on that input. A remote attacker who can reach the API may be able to execute code on the server.","category":"ai-tooling","nicknames":[],"who_cares":["speaches","self-hosted","python","ai-speech","pyannote"],"confidence":0.6,"needs_auth":"unknown","worst_case":"Remote code execution on the Speaches server via model name","analyst_note":"Confirm whether the endpoint requires authentication, whether a fixed version exists, and the exact fix commit; the project has not responded to the report.","how_to_check":"- Check the installed Speaches version; the sources say versions up to `0.9.0-rc.3` are affected, so confirm whether the deployed build is newer.\n- Confirm whether the diarization endpoint is reachable from untrusted networks.","needs_analyst":true,"not_affected_if":["default-config"],"who_is_affected":"Teams running the Speaches server at or below `0.9.0-rc.3` with the pyannote diarization feature, which was introduced in PR #628. Deployments that do not run the diarization path or keep the service off untrusted networks have lower exposure. The sources do not say whether authentication is required.","user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"high"},"cost_usd":0.000637,"input_tokens":3461,"output_tokens":582,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-112145':13A,16A '-2026':12A,15A '0.9.0':88C '628':150C '870e1':158C 'abl':68B 'affect':92C 'ai':18B,21B,31B,84C 'ai-speech':17B 'ai-tool':20B 'api':65B 'argument':3A,111C 'attack':37B,60B,132C 'attacker-control':36B 'audio':154C 'base':54B 'class':49B,123C 'code':8A,51B,71B,125C 'commit':157C 'compon':102C 'control':38B,119C 'cve':11A,14A 'detect':80C 'diariz':44B,104C 'disclos':138C 'e16a73452496e99d49f759eabd692a8e0e0':159C 'earli':167C 'execut':70B 'exploit':135C 'extern':118C 'externally-control':117C 'feat/switch':151C 'featur':145C 'file':98C 'function':94C 'host':27B 'inform':163C 'initi':130C 'input':57B,120C 'introduc':147C 'issu':170C 'lead':113C 'let':4A 'load':10A,106C 'loader':46B 'manipul':108C 'may':66B,141C 'merg':155C 'model':2A,39B,45B,105C,112C 'name':40B 'pass':34B 'possibl':128C 'pr':149C 'problem':166C 'project':161C 'public':139C 'pyannot':23B,43B,103C,153C 'pyannotediarizationmodelmanager._load_fn':95C 'python':24B 'rc.3':89C 'reach':63B 'remot':5A,59B,133C 'report':171C 'respond':175C 'run':53B 'secur':76C 'select':7A,48B,122C 'self':26B 'self-host':25B 'server':33B,74B 'speach':1A,28B,29B,83C,85C 'speaches-ai':82C 'speech':19B,32B 'src/speaches/executors/pyannote_diarization.py':99C 'tool':22B 'use':115C,143C 'user':6A 'vulner':77C,91C 'yet':176C","nicknames":[],"mitigations":[],"who_affected":"Teams running the Speaches server at or below `0.9.0-rc.3` with the pyannote diarization feature, which was introduced in PR #628. Deployments that do not run the diarization path or keep the service off untrusted networks have lower exposure. The sources do not say whether authentication is required.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-19T14:17:02+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/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-112145","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-112145","severity":null,"published_at":"2026-10-19T14:17:02+00:00","modified_at":"2026-10-22T03:16:36+00:00","first_seen_at":"2026-10-23T21:57:18+00:00","fetched_at":"2026-10-23T22:28:57+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"}