PraisonAI vulnerable to Server-Side Request Forgery via DNS rebinding bypass in webhook_url validation
Summary
The webhook_url field in the Jobs API silently passes validation when DNS resolution fails (socket.gaierror), enabling DNS rebinding attacks. An attacker's domain can initially resolve to a public IP (passing validation) then switch to an internal IP before the server makes the HTTP request.
Details
The validator catches socket.gaierror and silently allows the URL:
# src/praisonai/praisonai/jobs/models.py:55
try:
ip = socket.gethostbyname(hostname)
ip_obj = ipaddress.ip_address(ip)
if ip_obj.is_private or ip_obj.is_loopback:
raise ValueError("private address")
except socket.gaierror:
pass # BUG: DNS failure silently ignored → SSRF bypass
The HTTP call is made later with no re-validation:
# src/praisonai/praisonai/jobs/executor.py:402
async with httpx.AsyncClient() as client:
await client.post(job.webhook_url, ...) # no second IP check
Proof of Concept
DNS rebinding flow:
- Register
attacker.comwith TTL=1s → resolves to1.2.3.4(public IP) - Submit job:
webhook_url=http://attacker.com/callback - Validation passes (public IP)
- Switch DNS:
attacker.com→127.0.0.1 - Job completes → server POSTs to
127.0.0.1→ internal SSRF
Unresolvable domain bypass (no DNS rebinding required):
curl -X POST http://:8005/api/v1/runs \
-d '{"prompt":"run","webhook_url":"http://unresolvable.internal/cb","agent_yaml":"..."}'
# Validation: gaierror → pass → URL accepted
Impact
SSRF to internal HTTP services: admin panels, databases, and cloud metadata APIs (e.g., http://169.254.169.254/). Exploitable without authentication.
Software afectado
Haz clic en una tecnología para ver todas sus vulnerabilidades.
| Plataforma | Paquete | Versiones vulnerables | Corregida en |
|---|---|---|---|
| Python (PyPI) | praisonai | < 4.6.58 | 4.6.58 |
Referencias
- https://github.com/MervinPraison/PraisonAI/security/advisories/GHSA-hmfx-4v44-9qw9
- https://github.com/MervinPraison/PraisonAI/commit/2f9677abb2ea68eab864ee8b6a828fd0141612e1
- https://github.com/MervinPraison/PraisonAI
- https://github.com/MervinPraison/PraisonAI/releases/tag/v4.6.58
- https://pypi.org/project/praisonai
- https://github.com/advisories/GHSA-hmfx-4v44-9qw9
- https://nvd.nist.gov/vuln/detail/CVE-2026-55535
- Vector CVSS
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N- Debilidad (CWE)
CWE-367, CWE-918- Plataforma
- Python (PyPI)
- Paquete
praisonai- Publicada
- 25.08.2026
- Actualizado
- 11.10.2026 15:18
Fuentes y licencias
OSV / GitHub Advisory Database - PYSEC-2026-3890 - PyPA Advisory Database; CC BY 4.0
OSV / GitHub Advisory Database - GHSA-hmfx-4v44-9qw9 - CC BY 4.0
Historial de vulnerabilidades: praisonai
Todas las vulnerabilidades publicadas de este paquete (Python (PyPI)), de la más reciente a la más antigua. Muestra si es un fallo aislado o un paquete que hay que vigilar.
- Entradas en total
- 104
- Primera → última
- 04.2026 10.2026
- Sin corrección
- 0
- Explotada en ataques
- 0
Distribución por gravedad
- Crítica 27
- Alta 60
- Media 17
Divulgaciones por año
- 2026: 104
-
PraisonAI vulnerable to Server-Side Request Forgery via DNS rebinding bypass in webhook_url validation esta entrada
Identifica las vulnerabilidades de tu aplicación
Con la integración de DockRay y el inventario de software activado, DockRay compara las versiones notificadas de los componentes con las vulnerabilidades conocidas y avisa de las coincidencias confirmadas. La cobertura depende de la tecnología compatible y de los avisos disponibles.