Local Deep Research
CVE-2025-67743
MEDIUM
Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate to application API
-
DeliverySubmit malicious internal/metadata URL via resource endpoint
-
ExploitTrigger download of stored resource
-
ExecutionServer issues raw requests.get() bypassing SSRF filter
-
ImpactExfiltrate cloud credentials or internal reconnaissance data
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 | Exploitation requires authenticated access to the application API (PR:L): the attacker must be able to POST a crafted URL to /api/resources/<research_id> and then invoke /library/api/download/<resource_id> to trigger the download. It affects Local Deep Research versions 1.3.0 up to (but not including) 1.3.9, where download_service.py uses raw requests.get() instead of the existing safe_requests.py wrapper. Realized confidentiality impact is LIMITED by the deployment: the attacker only gains value if the host can actually reach sensitive internal services or cloud provider metadata endpoints (AWS/GCP/Azure 169.254.169.254), and the advisory explicitly notes impact depends on 'surrounding controls.' No user interaction is required, and no special non-default feature toggle is needed - the download service is standard functionality. |
| Impact | This is a genuine but moderate-priority SSRF (CWE-918) in Local Deep Research versions 1.3.0 to before 1.3.9. The signals are internally consistent rather than conflicting: the CVSS 3.1 vector (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N, base 6.5) indicates network-reachable, low-complexity exploitation requiring low-level privileges (PR:L), with high confidentiality impact and no integrity or availability impact - consistent with an SSRF that reads internal/metadata responses but does not alter or disrupt the system. Publicly available exploit code exists (the GHSA advisory includes a detailed PoC), which raises practical exploitability, but this should not be conflated with active exploitation. The EPSS score is low (0.32%, 23rd percentile) and the CVE is NOT on CISA KEV, so there is no public exploit identified as actively used in the wild. The net picture is a real, verifiable flaw with a working PoC but a limited real-world footprint and no evidence of mass exploitation - prioritize patching for anyone running this product, especially in cloud environments where metadata endpoints are reachable, but it is not an emergency-tier internet-wide threat. One nuance to verify: the advisory states impact 'depends on the deployment and surrounding controls,' so actual confidentiality impact (C:H) hinges on whether sensitive internal services or cloud metadata endpoints are actually reachable from the host. |
| Exploit ScenarioDerived | An attacker with authenticated API access submits a malicious URL (e.g., http://169.254.169.254/latest/meta-data/) via POST /api/resources/<research_id>, which is stored without SSRF validation. The attacker then triggers /library/api/download/<resource_id>, causing download_service.py to fetch the URL via raw requests.get(), bypassing the application's safe_requests SSRF protection and returning cloud metadata or internal service responses. A public PoC demonstrating this chain with a mock internal service is published in the GHSA advisory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 19, 2026
Server-side request forgery in Local Deep Research 1.3.0 through 1.3.8 lets an authenticated API user submit a crafted resource URL that the download service later fetches with raw requests.get(), bypassing the application's own SSRF validator. Exploitation requires posting the URL to /api/resources/<research_id> and triggering /library/api/download/<resource_id> (CVSS PR:L, no user interaction); realized impact is confidentiality-only and depends on whether the host can actually reach internal services or cloud metadata endpoints such as 169.254.169.254. Publicly available exploit code exists via the GHSA-9c54-gxh7-ppjc write-up and PoC, EPSS is a low 0.32% (23rd percentile), and there is no CISA KEV listing - no public exploit identified at time of analysis as being actively exploited.
RemediationAI
Upgrade to Local Deep Research 1.3.9, which routes all download-service traffic through safe_get/safe_post/SafeSession and adds a pre-commit/CI AST guard against reintroducing raw requests calls (commit https://github.com/LearningCircuit/local-deep-research/commit/b79089ff30c5d9ae77e6b903c408e1c26ad5c055, advisory https://github.com/LearningCircuit/local-deep-research/security/advisories/GHSA-9c54-gxh7-ppjc). Vendor-released patch: 1.3.9. Where upgrading is not immediate, enforce egress filtering at the container or network-policy layer to block 169.254.169.254/32, 127.0.0.0/8, and RFC1918 ranges from the app - trade-off is that legitimate self-hosted research targets on private networks stop resolving, so scope the deny rules to the metadata IP first. Enforce IMDSv2 (or disable the metadata service / use workload identity) so a successful SSRF yields no usable credentials, at the cost of reworking any IMDSv1-dependent tooling. Restrict who can call POST /api/resources/<research_id> and /library/api/download/<resource_id> to trusted accounts via reverse-proxy auth, or disable the research library download feature entirely for untrusted users - this removes legitimate download functionality. Because exploitation is authenticated (PR:L), auditing and rotating credentials of any low-privilege account that could reach those endpoints is prudent.
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 CWE-918 (Server-Side Request Forgery). Local Deep Research already ships an SSRF defense layer - security/safe_requests.py, which wraps outbound HTTP through security/ssrf_validator.py and blocks loopback (127.0.0.0/8), RFC1918 private ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16), link-local addresses, and the classic AWS instance metadata IP 169.254.169.254. The research_library download service (src/local_deep_research/research_library/services/download_service.py, roughly lines 1038-1298) simply never routed through that wrapper: nine call sites use bare requests.get() for generic downloads, API lookups, PDF retrieval, and Europe PMC/PubMed eLink and eSummary endpoints. Because URLs are persisted by resource_service.py:add_resource() without validation and fetched later, the trust boundary is broken in two places - no validation at ingest and no validation at fetch time. The upstream fix (commit b79089ff30c5d9ae77e6b903c408e1c26ad5c055) migrates those calls to safe_get/safe_post/SafeSession and adds a CI/pre-commit AST hook (.pre-commit-hooks/check-safe-requests.py) plus new security test suites (test_ssrf_validator.py, test_safe_requests_hook.py) that fail the build on any direct requests.get/post/Session usage, with an allowlist only for the wrapper itself and test files.
Know when Local Deep Research 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:L/UI:N/S:U/C:H/I:N/A:N
Network-reachable API with low complexity but requires authenticated access to add/trigger resources (PR:L); SSRF discloses internal/metadata data (C:H) with no integrity or availability impact.
Primary rating from NVD.
CVSS VectorNVD
DescriptionNVD
Local Deep Research is an AI-powered research assistant for deep, iterative research. In versions from 1.3.0 to before 1.3.9, the download service (download_service.py) makes HTTP requests using raw requests.get() without utilizing the application's SSRF protection (safe_requests.py). This can allow attackers to access internal services and attempt to reach cloud provider metadata endpoints (AWS/GCP/Azure), as well as perform internal network reconnaissance, by submitting malicious URLs through the API, depending on the deployment and surrounding controls. This issue has been patched in version 1.3.9.
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
Attack Technique
Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.
NVD
CVE.org
EPSS
GitHub
Exploit-DB