<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://cve.radiocsirt.org</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Thu, 15 Oct 2026 05:21:42 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-34935 — PraisonAI: OS Command Injection in MCPHandler.parse_mcp_command()</title>
      <link>https://cve.radiocsirt.org/vuln/cve-2026-34935</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; MervinPraison PraisonAI&lt;/p&gt;
&lt;p&gt;PraisonAI is a multi-agent teams system. From version 4.5.15 to before version 4.5.69, the --mcp CLI argument is passed directly to shlex.split() and forwarded through the call chain to anyio.open_process() with no validation, allowlist check, or sanitization at any hop, allowing arbitrary OS command execution as the process user. This issue has been patched in version 4.5.69.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; MervinPraison PraisonAI&lt;/p&gt;
&lt;p&gt;PraisonAI is a multi-agent teams system. From version 4.5.15 to before version 4.5.69, the --mcp CLI argument is passed directly to shlex.split() and forwarded through the call chain to anyio.open_process() with no validation, allowlist check, or sanitization at any hop, allowing arbitrary OS command execution as the process user. This issue has been patched in version 4.5.69.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/cve-2026-34935</guid>
    </item>
    <item>
      <title>GHSA-9gm9-c8mq-vq7m — PraisonAI: OS Command Injection in MCPHandler.parse_mcp_command()</title>
      <link>https://cve.radiocsirt.org/vuln/ghsa-9gm9-c8mq-vq7m</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: praisonai&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;The `--mcp` CLI argument is passed directly to `shlex.split()` and forwarded through the call chain to `anyio.open_process()` with no validation, allowlist check, or sanitization at any hop, allowing arbitrary OS command execution as the process user.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;`cli/features/mcp.py:61` (source) -&amp;gt; `praisonaiagents/mcp/mcp.py:345` (hop) -&amp;gt; `mcp/client/stdio/__init__.py:253` (sink)
```python
# source
parts = shlex.split(command)&lt;/p&gt;
&lt;p&gt;# hop
cmd, args, env = self.parse_mcp_command(command, env_vars)
self.server_params = StdioServerParameters(command=cmd, args=arguments)&lt;/p&gt;
&lt;p&gt;# sink
process = await anyio.open_process([command, *args])&lt;/p&gt;
&lt;p&gt;```&lt;/p&gt;
&lt;p&gt;Fixed in commit `47bff65413beaa3c21bf633c1fae4e684348368c` (v4.5.69) by introducing a command allowlist:
```python
ALLOWED_COMMANDS = {&amp;#34;npx&amp;#34;, &amp;#34;uvx&amp;#34;, &amp;#34;node&amp;#34;, &amp;#34;python&amp;#34;}
if cmd not in ALLOWED_COMMANDS:
    raise ValueError(f&amp;#34;Disallowed command: {cmd}&amp;#34;)
```&lt;/p&gt;
&lt;p&gt;### PoC
```python
# tested on: praisonai==4.5.48
# install: pip install praisonai==4.5.48
# run: praisonai --mcp &amp;#34;bash -c &amp;#39;id &amp;gt; /tmp/pwned&amp;#39;&amp;#34;
# verify: cat /tmp/pwned
# expected output: uid=1000(...) gid=1000(...) groups=1000(...)
```&lt;/p&gt;
&lt;p&gt;### Impact&lt;/p&gt;
&lt;p&gt;Any deployment where the `--mcp` argument is influenced by untrusted input is exposed to full OS command execution as the process user. No authentication is required.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: praisonai&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;The `--mcp` CLI argument is passed directly to `shlex.split()` and forwarded through the call chain to `anyio.open_process()` with no validation, allowlist check, or sanitization at any hop, allowing arbitrary OS command execution as the process user.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;`cli/features/mcp.py:61` (source) -&amp;gt; `praisonaiagents/mcp/mcp.py:345` (hop) -&amp;gt; `mcp/client/stdio/__init__.py:253` (sink)
```python
# source
parts = shlex.split(command)&lt;/p&gt;
&lt;p&gt;# hop
cmd, args, env = self.parse_mcp_command(command, env_vars)
self.server_params = StdioServerParameters(command=cmd, args=arguments)&lt;/p&gt;
&lt;p&gt;# sink
process = await anyio.open_process([command, *args])&lt;/p&gt;
&lt;p&gt;```&lt;/p&gt;
&lt;p&gt;Fixed in commit `47bff65413beaa3c21bf633c1fae4e684348368c` (v4.5.69) by introducing a command allowlist:
```python
ALLOWED_COMMANDS = {&amp;#34;npx&amp;#34;, &amp;#34;uvx&amp;#34;, &amp;#34;node&amp;#34;, &amp;#34;python&amp;#34;}
if cmd not in ALLOWED_COMMANDS:
    raise ValueError(f&amp;#34;Disallowed command: {cmd}&amp;#34;)
```&lt;/p&gt;
&lt;p&gt;### PoC
```python
# tested on: praisonai==4.5.48
# install: pip install praisonai==4.5.48
# run: praisonai --mcp &amp;#34;bash -c &amp;#39;id &amp;gt; /tmp/pwned&amp;#39;&amp;#34;
# verify: cat /tmp/pwned
# expected output: uid=1000(...) gid=1000(...) groups=1000(...)
```&lt;/p&gt;
&lt;p&gt;### Impact&lt;/p&gt;
&lt;p&gt;Any deployment where the `--mcp` argument is influenced by untrusted input is exposed to full OS command execution as the process user. No authentication is required.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/ghsa-9gm9-c8mq-vq7m</guid>
    </item>
  </channel>
</rss>
