CVE-2026-47394: PraisonAI vulnerable to unauthenticated arbitrary file read via MCP workflow.show, workflow.validate, deploy.validate
The fix for GHSA-9mqq-jqxf-grvw / CVE-2026-44336 is incomplete. The original advisory description named four vulnerable handlers in mcp_server/adapters/cli_tools.py:
“registers four file-handling tools by default,
praisonai.rules.create,praisonai.rules.show,praisonai.rules.delete, andpraisonai.workflow.show. Each accepts a path or filename string from MCPtools/callarguments… with no containment check.”
Commit 68cc9427 (“fix(security): harden MCP rules path handling…”) added a _resolve_rule_path() helper and applied it to rules.create, rules.show, and rules.delete. workflow.show was left unchanged. Two adjacent handlers in the same file have the same pattern, workflow.validate and deploy.validate. Neither was mentioned in the original advisory. Both remain unchanged.
The original advisory also identified the dispatcher (server.py:281-298) as a root cause. It accepts unvalidated **kwargs from params["arguments"] with no enforcement against the tool’s declared input_schema. That code is unchanged in HEAD as of commit 42221210.
Result: A single unauthenticated MCP tools/call to praisonai.workflow.show returns the contents of any file the host user can read: /etc/passwd, ~/.ssh/id_rsa, ~/.aws/credentials, or any project .env.
References
Code Behaviors & Features
Detect and mitigate CVE-2026-47394 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Learn more about Dependency Scanning →