Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessPlant prompt injection in ingested content
-
DeliveryAgent LLM processes malicious instructions
-
ExploitLLM invokes search_web with internal searxng_url
-
ExecutionServer fetches internal/cloud-metadata endpoint
-
PersistResponse JSON returned into agent context
-
ImpactIAM credentials/internal data exfiltrated
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V2 - Validation and Business Logic Input validation, allowlisting
|
| Exploitation Conditions | Exploitation requires: (1) a PraisonAI agent running with the default tool profile that includes search_web/searxng_search (the vulnerable sink); (2) the agent ingesting attacker-controlled content - a web page, file, or upstream tool output - containing prompt-injection instructions; and (3) the LLM being induced to invoke the tool with an attacker-supplied searxng_url whose scheme/host/port/resolved-address are unvalidated (praisonaiagents < 1.6.62). Limiting factors: the attack is gated by UI:R because it depends on an agent actually processing malicious content and the model complying with the injected tool call; cloud-metadata/IAM credential theft further requires deployment in a cloud environment where 169.254.169.254 is reachable, and internal-service reads require SSRF-reachable internal targets. |
| Impact | This is a genuine, actionable risk for anyone running PraisonAI as an autonomous or semi-autonomous agent. The CVSS vector (AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:L/A:L, base 8.8) aligns well with the SSRF primitive described: network-reachable, low complexity, no authentication, scope changed (the agent server pivots to other internal systems), with high confidentiality impact from reading internal services and cloud-metadata (169.254.169.254) credentials. The one signal tempering raw severity is UI:R - exploitation depends on an agent ingesting attacker-controlled content, so it is not a direct unauthenticated hit on a listening service but a prompt-injection-mediated attack. No EPSS score, no CISA KEV listing, and no public POC were provided, so there is no public exploit identified at time of analysis; this is a disclosure-driven priority rather than a confirmed in-the-wild threat. The real-world weight comes from the fact that search_web/searxng_search are in the DEFAULT tool profile, making the sink reachable in typical deployments without special configuration - that makes it a real priority for PraisonAI operators even absent exploitation telemetry. Note a version inconsistency across sources (see confidence_notes) that should be verified before remediation. |
| Exploit ScenarioDerived | An attacker plants prompt-injection instructions in content an agent will ingest (a web page, a document, or upstream tool output). When the LLM processes that content it is steered into calling the default search_web/searxng_search tool with an attacker-chosen searxng_url such as http://169.254.169.254/latest/meta-data/iam/security-credentials/, and the server dutifully fetches it and feeds the JSON response back into agent context, exposing internal services or cloud IAM credentials. No public exploit was identified at time of analysis, but the attack requires no authentication and only low complexity given the tool is enabled by default. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 12, 2026
Server-side request forgery in the SearxNG-backed search tools shipped with the praisonaiagents Python package before 1.6.62 lets prompt-injected content hijack the agent's outbound HTTP requests and read the responses back into the model's context, enabling internal service and API disclosure plus internal host/port enumeration. The vulnerable sink is the LLM-exposed searxng_url tool parameter, which is forwarded to requests.get() without any validation of scheme, host, port, or resolved address; search_web and searxng_search are part of the default agent tool profile, so any agent that ingests attacker-controlled web pages, files, or upstream tool output is in scope. The CVSS vector is AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:L/A:L (8.8) - no authentication is needed (PR:N), but exploitation depends on the agent actually processing malicious content and the model complying with the injected tool call (UI:R); confidential impact is high while integrity and availability impact are low. No public exploit identified at time of analysis; in cloud deployments the same primitive can reach the instance metadata endpoint (169.254.169.254) and potentially expose IAM credentials, though that requires the instance metadata service to be reachable from the agent's network position.
RemediationAI
Vendor-released patch: praisonaiagents 1.6.62 - upgrade with pip install -U "praisonaiagents>=1.6.62" and, where the praisonai wrapper or its container images are used, move to praisonai>=4.6.62 (the Dockerfiles in commit 2a855c470077c7d2e2479a575f7ef7f548d51c33 are updated accordingly); see GHSA-4pcv-mg8v-vrgf and the v4.6.62 release tag. If immediate upgrade is not possible, the highest-value compensating control is to stop exposing the vulnerable tools: remove search_web and searxng_search from the agent tool profile (or replace them with a fixed alternative search backend) so the LLM can never supply searxng_url - the trade-off is loss of agent web-search capability. A wrapper or fork that validates the URL before requests.get() is equivalent in effect to the upstream fix but must reject non-http(s) schemes and block loopback, private, link-local, multicast, and unspecified resolved addresses, re-resolving at request time to guard against DNS rebinding; the patched code performs these checks in tools/url_safety.py. If you accept localhost search, do not broaden SEARXNG_URL_ALLOWLIST beyond the endpoints you actually run, and never set ALLOW_LOCAL_CRAWL=true in a multi-tenant or otherwise untrusted-content-processing agent, since both settings re-open the SSRF path (the built-in allowlist for localhost/127.0.0.1/::1 also permits any port on those hosts, so local-only port probing remains possible). In cloud deployments, additionally block egress from the agent workload to 169.254.169.254 via network policy or enforce IMDSv2 with a short token hop limit - this limits credential theft but does not prevent reads of other internal HTTP/JSON services, which still need network segmentation. Finally, treat agent-ingested content as untrusted input and consider requiring human approval for outbound network tools, at the cost of reduced autonomy.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The flaw is tracked as CWE-20 (Improper Input Validation) even though the practical weakness class is server-side request forgery: user- and model-controllable input is used to construct a URL with no scheme, host, port, or IP-address restrictions. In src/praisonai-agents/praisonaiagents/tools/searxng_tools.py the searxng_search() function defaults to http://localhost:32768/search but accepts an arbitrary searxng_url argument that is passed straight into requests.get(url, params=params, timeout=10); the unified dispatcher in tools/web_search.py (_search_searxng, and the public search_web() entry point which forwards the parameter) repeats the identical unvalidated pattern. What makes this reachable rather than merely latent is the tool plumbing: the tool-schema generator exposes every function parameter to the model (only self/*args/**kwargs are skipped, llm/llm.py:5968), and search_web is registered in the default tool profile (tools/profiles.py:68), so a prompt-injected instruction can supply an attacker-chosen searxng_url. The practical result is a blind-to-semi-blind SSRF primitive: the server-side request is issued by the agent process, distinct responses let an attacker distinguish open from closed internal ports, returned JSON is fed back into agent context, and in cloud environments the link-local metadata address 169.254.169.254 becomes requestable. The vendor fix introduces tools/url_safety.py with is_safe_http_url()/validate_searxng_url(), which parses the URL, permits only http/https, allows configured hostnames via the SEARXNG_URL_ALLOWLIST environment variable (defaulting to include localhost, 127.0.0.1 and ::1), and otherwise resolves the hostname with socket.getaddrinfo() and rejects loopback, private, link-local, multicast, and unspecified addresses; an ALLOW_LOCAL_CRAWL=true escape hatch and the allowlist can re-enable the risky behavior by configuration. Note that because the allowlist check precedes IP resolution, hosts on the built-in allowlist remain usable on any port, so localhost-only probing is not fully eliminated by the patch.
Know when Praisonaiagents 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
AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:L/A:L
Network-reachable prompt-injection SSRF needs no auth (PR:N) but depends on the agent ingesting malicious content (UI:R); server pivots to internal systems (S:C) and reads metadata/IAM data (C:H, I:L/A:L).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
PraisonAI is a multi-agent teams system. Prior to praisonaiagents 1.6.62, searxng_search and the search_web SearxNG provider pass the LLM-controlled searxng_url parameter directly to requests.get without validating its scheme, host, port, or resolved address. Prompt-injected content can direct the default search tool to internal JSON services, distinguish open and closed internal ports, and attempt cloud-metadata requests, with returned JSON results entering agent context. This issue is fixed in praisonaiagents 1.6.62.
Technical POC Analysis
CWE-20 (Improper Input Validation), scored by the advisory alongside CWE-918 (SSRF).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
The praisonaiagents Python package (releases prior to 1.6.62) exposes server-side request forgery through its default search tool profile, allowing attacker-injected content to redirect an AI agent's outbound HTTP requests and read internal responses back into the model's context. Any business unit deploying these agents against untrusted web pages, files, or third-party tool output can leak internal APIs, service responses, and network topology to whoever controls that content. With no vendor-released patch identified at time of analysis, this is an active exposure requiring immediate containment at the configuration and network layers rather than reliance on a software fix.
No vendor-released patch identified at time of analysis, so containment is configuration- and network-based: remove search_web and searxng_search from the default agent tool profile and stop exposing the searxng_url parameter to the model; restrict agent egress through an allowlisted proxy limited to the approved SearxNG endpoint; block outbound traffic to private, loopback, link-local, and cloud metadata ranges; enforce DNS resolution pinning; add scheme, host, port, and resolved-address validation on the tool parameter; apply prompt-injection filtering to all ingested web, file, and upstream tool content; and treat unpatched agents as untrusted for processing attacker-controllable input until a fixed release is available and deployed.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
More in Praisonaiagents
View allSSRF protection bypass in PraisonAI's praisonaiagents library (all versions before 1.6.58) lets low-privileged users rou
Authentication bypass in PraisonAI's AgentServer component exposes all routes - /publish, /events, /info, /health - to u
Arbitrary Python code execution in PraisonAI's workflow include feature allows an attacker who controls a local recipe d
Unauthorized filesystem mutation in praisonaiagents allows an LLM-controlled agent to rewrite arbitrary on-disk source f
Unauthenticated tool invocation and potential remote code execution in PraisonAI Agents (praisonaiagents) before 1.6.59,
Unauthenticated remote code execution in the PraisonAI multi-agent framework lets any network-reachable caller run arbit
Unauthenticated remote agent enumeration and invocation in PraisonAI's AgentTeam.launch() / Agents.launch() HTTP server
Arbitrary command and code execution in PraisonAI's workflow engine (versions <4.5.139) and praisonaiagents (<1.5.140) a
Command injection in PraisonAIAgents memory hooks executor allows authenticated local attackers to execute arbitrary she
Unauthenticated remote session hijacking in PraisonAI's browser bridge (versions <4.5.139) and praisonaiagents (<1.5.140
Remote attackers can invoke arbitrary application callables in PraisonAI multi-agent systems by manipulating tool-call n
Arbitrary Python code execution in PraisonAI ≤4.5.138 occurs when malicious tools.py files are automatically imported fr
EUVD-2026-97773
GHSA-4pcv-mg8v-vrgf
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB