<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://db.gcve.eu/rss/recent/all/10</id>
  <title>Most recent entries from all</title>
  <updated>2026-10-31T20:59:32.856299+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>info@gcve.eu</email>
  </author>
  <link href="https://db.gcve.eu" rel="alternate"/>
  <generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator>
  <subtitle>Contains only the most 10 recent entries.</subtitle>
  <entry>
    <id>https://db.gcve.eu/vuln/cve-2026-60091</id>
    <title>CVE-2026-60091 — PraisonAI before 4.6.78 Unauthenticated SSRF via webhook_url</title>
    <updated>2026-10-31T20:59:32.857817+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> MervinPraison PraisonAI</p>
<p>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.</p></div>
    </content>
    <link href="https://db.gcve.eu/vuln/cve-2026-60091"/>
  </entry>
  <entry>
    <id>https://db.gcve.eu/vuln/pysec-2026-4249</id>
    <title>PYSEC-2026-4249 — PraisonAI: Jobs API is unauthenticated by default and allows attacker-controlled webhook SSRF</title>
    <updated>2026-10-31T20:59:32.857892+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: praisonai</p>
<p>## Summary</p>
<p>PraisonAI'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.</p>
<p>## Details</p>
<p>### Affected component
- Package: `praisonai` 4.6.63. Files: `src/praisonai/praisonai/jobs/server.py`, `jobs/router.py`, `jobs/executor.py`, `jobs/models.py`.</p>
<p>### Vulnerable code / root cause</p>
<p>Path:
`src/praisonai/praisonai/jobs/server.py`</p>
<p>Function:
`create_app`</p>
<p>Snippet:
```python
jobs_api_key = os.environ.get("PRAISONAI_JOBS_API_KEY")
# ...
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`.</p>
<p>Path:
`src/praisonai/praisonai/jobs/router.py`</p>
<p>Function:
`submit_job`</p>
<p>Snippet:
```python
@router.post("", response_model=JobSubmitResponse, status_code=202)
async def submit_job(request, response, body:…</p></div>
    </content>
    <link href="https://db.gcve.eu/vuln/pysec-2026-4249"/>
  </entry>
</feed>
