Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/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
Network-reachable and unauthenticated when no TOKEN is set (PR:N), but the required exposed/token-less/writable non-default deployment justifies AC:H; the resolved callable runs in-process giving full C/I/A:H.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
6DescriptionCVE.org
txtai through 9.10.0, fixed in commit 11b32da, exposes an API /reindex endpoint whose function body parameter is resolved through txtai.util.Resolver, which performs __import__ and getattr on the caller-supplied dotted path with no allowlist. When the API is exposed with no TOKEN configured (authentication is opt-in, so all endpoints are unauthenticated) and the index is configured writable, a remote attacker can set function to an arbitrary callable such as subprocess.getoutput, achieving remote code execution as the server process during reindexing. Exploitation requires those deployment conditions (API exposed, no TOKEN, writable index); it is not the default configuration. The fix gates the endpoint behind a new reindex configuration flag.
AnalysisAI
Remote code execution in txtai through 9.10.0 lets a remote attacker reach the API /reindex endpoint and supply an arbitrary dotted callable (for example subprocess.getoutput) that the server imports and invokes during reindexing, running commands as the server process. The flaw is exploitable only when the API is network-exposed with no TOKEN set (so all endpoints are unauthenticated) and the index is writable - not the default posture. No public exploit has been identified at time of analysis, but the issue carries a high CVSS 4.0 base score of 9.3 and was reported by VulnCheck.
Technical ContextAI
txtai (neuml/txtai, CPE cpe:2.3:a:neuml:txtai) is an open-source embeddings/semantic-search framework that ships an optional HTTP API. The vulnerability is a CWE-94 code injection arising from unsafe reflection: the /reindex endpoint passes its caller-supplied 'function' parameter to txtai.util.Resolver, which performs Python __import__ and getattr on the dotted path with no allowlist or type restriction. Because any importable module attribute can be resolved and then called, an attacker can name a dangerous standard-library callable (e.g. subprocess.getoutput, os.system) instead of a legitimate transform function, turning a reindex operation into arbitrary command execution within the server process.
RemediationAI
Apply the upstream fix in commit 11b32da (https://github.com/neuml/txtai/commit/11b32da720f03276199ebc5583c15fc5d1ccafd3), which gates the /reindex endpoint behind a new 'reindex' configuration flag; upgrade to the first tagged release that includes this commit (Upstream fix available via commit; released patched version not independently confirmed, so verify against the vendor changelog). If immediate patching is not possible, configure a TOKEN so all API endpoints require authentication (closes the unauthenticated path but requires updating every API client with credentials), and/or set the index to read-only so reindexing cannot be triggered (disables legitimate reindex/update functionality). Additionally, do not expose the txtai API directly to untrusted networks - place it behind a reverse proxy or network ACL that restricts access to the /reindex endpoint (may break legitimate remote reindex automation). See the VulnCheck advisory above for details.
Same weakness CWE-94 – Code Injection
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-40418
GHSA-m8p4-rrq5-qvmf