PraisonAI: Jobs webhook SSRF protection bypass via DNS rebinding
What fixes it
- 4.6.59praisonai, PyPIOSV
pip install "praisonai>=4.6.59"
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
PraisonAI is a multi-agent teams system. From version 4.5.126 to before version 4.6.59, PraisonAI's Async Jobs API validates webhook_url when a job request is parsed and again when the internal Job object is constructed. That validation blocks direct loopback/private targets, but it is not bound to the later network request. When a job completes, _send_webhook() passes the original hostname to httpx.AsyncClient.post() with no send-time validation, IP pinning, or guarded transport. An attacker-controlled hostname can therefore resolve to a public IP during Pydantic validation and later resolve to loopback/private/cloud-metadata infrastructure during webhook delivery. This bypasses the intended SSRF guard in current supported releases. This appears to be an incomplete fix / patch bypass for GHSA-8frj-8q3m-xhgm. This issue has been patched in version 4.6.59.
Text from CVE List
Affected versions 53
- PraisonAIaffected: >= 4.5.126, < 4.6.59CVE List
- praisonai, pip>= 4.5.126, <= 4.6.57GitHub
- praisonai, PyPIfrom 4.5.126, fixed in 4.6.59OSV
- praisonai, PyPI4.5.126OSV
- praisonai, PyPI4.5.127OSV
- praisonai, PyPI4.5.128OSV
- praisonai, PyPI4.5.129OSV
- praisonai, PyPI4.5.130OSV
- praisonai, PyPI4.5.131OSV
- praisonai, PyPI4.5.132OSV
- praisonai, PyPI4.5.133OSV
- praisonai, PyPI4.5.134OSV
- praisonai, PyPI4.5.135OSV
- praisonai, PyPI4.5.136OSV
- praisonai, PyPI4.5.137OSV
- praisonai, PyPI4.5.139OSV
- praisonai, PyPI4.5.140OSV
- praisonai, PyPI4.5.143OSV
- praisonai, PyPI4.5.144OSV
- praisonai, PyPI4.5.145OSV
- praisonai, PyPI4.5.149OSV
- praisonai, PyPI4.6.10OSV
- praisonai, PyPI4.6.11OSV
- praisonai, PyPI4.6.12OSV
- praisonai, PyPI4.6.13OSV
- praisonai, PyPI4.6.14OSV
- praisonai, PyPI4.6.15OSV
- praisonai, PyPI4.6.16OSV
- praisonai, PyPI4.6.18OSV
- praisonai, PyPI4.6.19OSV
- praisonai, PyPI4.6.20OSV
- praisonai, PyPI4.6.21OSV
- praisonai, PyPI4.6.22OSV
- praisonai, PyPI4.6.23OSV
- praisonai, PyPI4.6.24OSV
- praisonai, PyPI4.6.25OSV
- praisonai, PyPI4.6.26OSV
- praisonai, PyPI4.6.27OSV
- praisonai, PyPI4.6.28OSV
- praisonai, PyPI4.6.29OSV
- praisonai, PyPI4.6.30OSV
- praisonai, PyPI4.6.31OSV
- praisonai, PyPI4.6.32OSV
- praisonai, PyPI4.6.33OSV
- praisonai, PyPI4.6.34OSV
- praisonai, PyPI4.6.35OSV
- praisonai, PyPI4.6.36OSV
- praisonai, PyPI4.6.37OSV
- praisonai, PyPI4.6.38OSV
- praisonai, PyPI4.6.39OSV
- praisonai, PyPI4.6.40OSV
- praisonai, PyPI4.6.41OSV
- praisonai, PyPI4.6.42OSV