highCVSS 7.1Vulnerability

CVE-2026-55537

### Summary `praisonai/jobs/models.py::JobSubmitRequest.validate_webhook_url()` validates webhook URLs by resolving the hostname and checking whether the IP is private. When DNS resolution fails (`socket.gaierror`), the validator **silently passes** the URL via `except socket.gaierror: pass`. Additionally, even when DNS succeeds at validation time, the webhook is fired much later by `JobExecutor._send_webhook()`, which calls `httpx.AsyncClient().post(job.webhook_url)` — performing a **fresh, independent DNS lookup** at execution time. Together, these flaws create a TOCTOU SSRF window. An attacker can: 1. Submit a job with `webhook_url` pointing to a hostname that currently does not resolve (NXDOMAIN) → validation passes (`gaierror` → `pass`) 2. Update DNS to point that hostname to `127.0.0.1` or another private IP 3. When the job completes, `_send_webhook()` resolves the hostname fresh → POST sent to the internal IP ### Details **Flaw 1 — Fail-open on DNS error (`jobs/models.py` lines 58-66):** ```python @field_validator("webhook_url") @classmethod def validate_webhook_url(cls, v): ... try: ip = socket.gethostbyname(hostname) ip_obj = ipaddress.ip_address(ip) if ip_obj.is_private or ip_obj.is_loopback or ip_obj.is_link_local: raise ValueError("Webhook URL resolves to private network address") except socket.gaierror: pass # <-- FAIL-OPEN: DNS failure allows the URL without restriction return v ``` When `socket.gethostbyname(hostname)` raises `socket.gaierror` (NXDOMAIN, timeout, network error during validation), execution flows to `pass` and the URL is accepted. **Flaw 2 — Fresh DNS at execution time (`jobs/executor.py` lines 376-406):** ```python async def _send_webhook(self, job: Job): async with httpx.AsyncClient(timeout=30.0) as client: response = await client.post( job.webhook_url, # <-- fresh DNS resolution here, not cached from validation json=

Properties

ghsa_id
GHSA-rg5q-pp8p-f7jm
severity
high
summary
PraisonAI: Webhook SSRF via DNS fail-open in `JobSubmitRequest.validate_webhook_url()` — bypass of CVE-2026-40114
cvss_score
7.1
cve_id
CVE-2026-55537
cvss_vector
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:L/A:N
is_ghsa_only
false
ghsa_published
2026-08-25T14:59:44Z
source_url
https://github.com/advisories/GHSA-rg5q-pp8p-f7jm
ghsa_updated
2026-08-25T14:59:48Z

Related Entities (6)

VULNERABLE_TO (1)

[Software]pip/PraisonAI

AFFECTS (1)

[Software]pip/PraisonAI

HAS_WEAKNESS (3)

[Weakness]Server-Side Request Forgery (SSRF)
[Weakness]Incorrect Control Flow Scoping
[Weakness]Time-of-check Time-of-use (TOCTOU) Race Condition

REPORTED_BY (1)

[Source]GitHub Advisory Database

Explore deeper with Ninja Signal's threat intelligence graph

CVE-2026-55537 (CVSS 7.1) — Ninja Signal Threat Intelligence | Ninja Signal