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
SQL/CQL injection yields full DB read/write/destroy (C/I/A:H); PR:L because a caller must be able to invoke create_collection with a controllable dimension rather than fully anonymous access.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
1DescriptionCVE.org
PraisonAI before 4.6.78 fails to validate the caller-controlled dimension argument in the PGVector and Cassandra knowledge-store create_collection() backends. Although schema, keyspace, and collection-name identifiers are validated, the dimension value (declared as int but not enforced at runtime) is interpolated directly into the vector column of the generated CREATE TABLE DDL. A caller able to influence collection-creation dimensions can pass a string such as '3); DROP TABLE tenant_secrets; --' to inject SQL/CQL tokens into the statement executed by the database driver.
AnalysisAI
SQL/CQL injection in PraisonAI's PGVector and Cassandra knowledge-store backends before 4.6.78 allows a caller who controls the create_collection() dimension argument to inject arbitrary database tokens. Although the code validates schema, keyspace, and collection-name identifiers, the dimension value - typed as int but never enforced at runtime - is string-interpolated directly into the vector column of the generated CREATE TABLE DDL, so a payload like '3); DROP TABLE tenant_secrets; --' executes against the backing database. No public exploit identified at time of analysis; the flaw was reported by VulnCheck and a vendor patch is available.
Technical ContextAI
PraisonAI is a Python multi-agent / agentic-AI orchestration framework that ships pluggable knowledge-store (vector memory) backends. The vulnerable code paths are the create_collection() implementations for the PGVector (PostgreSQL + pgvector extension) and Cassandra/CQL backends, which build a CREATE TABLE statement declaring a vector-typed column whose dimensionality is set from the caller-supplied dimension parameter. This is a textbook CWE-89 (Improper Neutralization of Special Elements used in an SQL Command) instance caused by trusting a language-level type hint (int) instead of enforcing/parameterizing the value at runtime - because DDL column definitions and vector dimensions cannot be bound as ordinary query parameters, the developer fell back to string interpolation and validated only the identifier fields, leaving the numeric-looking dimension as an unfiltered injection sink. The affected component is cpe:2.3:a:mervinpraison:praisonai across all versions prior to 4.6.78.
RemediationAI
Vendor-released patch: upgrade PraisonAI to version 4.6.78 or later, which is the primary and recommended fix (patch commit https://github.com/MervinPraison/PraisonAI/commit/3aa9cbc2bd49c23a32be0a89a5e620d13d843eab; advisory https://github.com/MervinPraison/PraisonAI/security/advisories/GHSA-wf65-4jjx-q444). If you cannot upgrade immediately, ensure the dimension argument passed to create_collection() is never derived from untrusted input: enforce strict server-side validation by casting/coercing the value to a bounded positive integer (e.g. reject anything that is not int() within an expected range) before it reaches the DDL, which closes the injection at the call site with negligible functional side effects. Additionally, run the PGVector/Cassandra backend under a least-privilege database role that lacks DROP/DDL rights on unrelated tables so an injected statement cannot destroy tenant data - the trade-off is that legitimate collection creation must be performed under a separate privileged migration path. Avoid exposing knowledge-store collection creation directly to end users.
WebSocket origin-validation bypass in PraisonAI's Browser Server (praisonai/browser/server.py) before 4.6.58 lets an att
PraisonAI's `praisonai serve` subsystem (agents and unified modes) accepts an `--api-key` CLI flag that is parsed but ne
Unauthenticated remote agent invocation in PraisonAI versions 4.6.34 through 4.6.57 allows any network-reachable caller
SSRF protection bypass in PraisonAI's praisonaiagents library (all versions before 1.6.58) lets low-privileged users rou
Authentication fail-open in PraisonAI's Recipe HTTP server allows unauthenticated remote attackers to invoke recipe exec
Authentication bypass in PraisonAI's AgentServer component exposes all routes - /publish, /events, /info, /health - to u
Arbitrary Python code execution in PraisonAI's workflow include feature allows an attacker who controls a local recipe d
Server-side request forgery in PraisonAI's web_crawl() function (versions 1.5.128-1.6.57) allows an attacker who can inf
Cross-site request forgery against the PraisonAI MCP HTTP-stream transport allows unauthenticated remote attackers to ex
Remote unauthenticated access to PraisonAI's legacy Flask API server allows attackers to execute configured agent workfl
Path traversal in praisonaiagents prior to 1.6.58 allows a low-privileged caller to write arbitrary JSON files to any pr
Server-Side Request Forgery in PraisonAI before version 4.6.58 allows unauthenticated remote attackers to force the appl
Same weakness CWE-89 – SQL Injection
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-43175
GHSA-q65p-7p84-495c