<?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://db.gcve.eu</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>Sat, 31 Oct 2026 20:59:32 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-60091 — PraisonAI before 4.6.78 Unauthenticated SSRF via webhook_url</title>
      <link>https://db.gcve.eu/vuln/cve-2026-60091</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; MervinPraison PraisonAI&lt;/p&gt;
&lt;p&gt;PraisonAI before 4.6.78 contains an unauthenticated server-side request forgery vulnerability in the Jobs API /api/v1/runs endpoint. The webhook_url parameter is validated at request time but re-resolved at connection time, allowing attackers to use DNS rebinding to reach internal services with a blind SSRF attack.&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 before 4.6.78 contains an unauthenticated server-side request forgery vulnerability in the Jobs API /api/v1/runs endpoint. The webhook_url parameter is validated at request time but re-resolved at connection time, allowing attackers to use DNS rebinding to reach internal services with a blind SSRF attack.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/cve-2026-60091</guid>
    </item>
    <item>
      <title>PYSEC-2026-4249 — PraisonAI: Jobs API is unauthenticated by default and allows attacker-controlled webhook SSRF</title>
      <link>https://db.gcve.eu/vuln/pysec-2026-4249</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;PraisonAI&amp;#39;s Async Jobs API enables its API-key middleware **only when `PRAISONAI_JOBS_API_KEY` is set**, so by default every endpoint is unauthenticated. An unauthenticated `POST /api/v1/runs` accepts an attacker-controlled `webhook_url`; on job completion the server POSTs the job payload to it via `httpx`. The `webhook_url` has an SSRF validator (`gethostbyname` + private-IP check), but it validates at request time while `httpx` re-resolves at connection time — a DNS-rebinding TOCTOU that reaches internal services. Runtime-confirmed as an **unauthenticated, blind** SSRF (the internal canary received the POST; the internal response is not returned to the attacker). Severity Medium.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;### Affected component
- Package: `praisonai` 4.6.63. Files: `src/praisonai/praisonai/jobs/server.py`, `jobs/router.py`, `jobs/executor.py`, `jobs/models.py`.&lt;/p&gt;
&lt;p&gt;### Vulnerable code / root cause&lt;/p&gt;
&lt;p&gt;Path:
`src/praisonai/praisonai/jobs/server.py`&lt;/p&gt;
&lt;p&gt;Function:
`create_app`&lt;/p&gt;
&lt;p&gt;Snippet:
```python
jobs_api_key = os.environ.get(&amp;#34;PRAISONAI_JOBS_API_KEY&amp;#34;)
# ...
if jobs_api_key:
    app.add_middleware(JobsAPIKeyMiddleware)   # auth ONLY when env var is set
```
Issue: with the env var unset (default), no auth middleware is added → all endpoints unauthenticated. Default bind is `127.0.0.1`.&lt;/p&gt;
&lt;p&gt;Path:
`src/praisonai/praisonai/jobs/router.py`&lt;/p&gt;
&lt;p&gt;Function:
`submit_job`&lt;/p&gt;
&lt;p&gt;Snippet:
```python
@router.post(&amp;#34;&amp;#34;, response_model=JobSubmitResponse, status_code=202)
async def submit_job(request, response, body:…&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;PraisonAI&amp;#39;s Async Jobs API enables its API-key middleware **only when `PRAISONAI_JOBS_API_KEY` is set**, so by default every endpoint is unauthenticated. An unauthenticated `POST /api/v1/runs` accepts an attacker-controlled `webhook_url`; on job completion the server POSTs the job payload to it via `httpx`. The `webhook_url` has an SSRF validator (`gethostbyname` + private-IP check), but it validates at request time while `httpx` re-resolves at connection time — a DNS-rebinding TOCTOU that reaches internal services. Runtime-confirmed as an **unauthenticated, blind** SSRF (the internal canary received the POST; the internal response is not returned to the attacker). Severity Medium.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;### Affected component
- Package: `praisonai` 4.6.63. Files: `src/praisonai/praisonai/jobs/server.py`, `jobs/router.py`, `jobs/executor.py`, `jobs/models.py`.&lt;/p&gt;
&lt;p&gt;### Vulnerable code / root cause&lt;/p&gt;
&lt;p&gt;Path:
`src/praisonai/praisonai/jobs/server.py`&lt;/p&gt;
&lt;p&gt;Function:
`create_app`&lt;/p&gt;
&lt;p&gt;Snippet:
```python
jobs_api_key = os.environ.get(&amp;#34;PRAISONAI_JOBS_API_KEY&amp;#34;)
# ...
if jobs_api_key:
    app.add_middleware(JobsAPIKeyMiddleware)   # auth ONLY when env var is set
```
Issue: with the env var unset (default), no auth middleware is added → all endpoints unauthenticated. Default bind is `127.0.0.1`.&lt;/p&gt;
&lt;p&gt;Path:
`src/praisonai/praisonai/jobs/router.py`&lt;/p&gt;
&lt;p&gt;Function:
`submit_job`&lt;/p&gt;
&lt;p&gt;Snippet:
```python
@router.post(&amp;#34;&amp;#34;, response_model=JobSubmitResponse, status_code=202)
async def submit_job(request, response, body:…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/pysec-2026-4249</guid>
    </item>
  </channel>
</rss>
