Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate to Omnivore instance
-
DeliverySubmit scanFeeds GraphQL mutation with internal target URL
-
ExploitServer issues unvalidated axios request to internal endpoint
-
ExecutionParse response for feed metadata or link elements
-
PersistInfer port reachability from error differentiation
-
ImpactEnumerate internal network topology
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 | A valid authenticated Omnivore session is required (CVSS PR:L confirmed) - unauthenticated actors cannot reach the scanFeedsResolver endpoint. The attacker must be able to submit a scanFeeds GraphQL mutation to the Omnivore API. No special server configuration is needed; the vulnerability exists in the default deployment of the API package. Exploitation is limited by the response parser: only feed-shaped metadata fields (url, title, description, type) and advertised RSS/Atom link elements from the fetched response are returned - raw HTTP response bodies are not exposed. However, port reachability can still be inferred through error differentiation even when content is not parseable as a feed. The Omnivore server must have outbound network access to the targeted internal addresses for exploitation to succeed; network egress filtering to RFC-1918 and link-local ranges blocks the attack independently of the application-layer fix. |
| Impact | The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:N/SC:L/SI:N/SA:N) yields a score of 5.3, placing this in the medium band. The PR:L metric is the primary mitigating factor: exploitation is gated behind a valid authenticated session, excluding unauthenticated actors. Impact is intentionally bounded by the response parser - only feed-shaped metadata and link elements are surfaced, not raw HTTP response bodies - which distinguishes this from full-response SSRF variants that can exfiltrate arbitrary secrets. The SC:L rating reflects that subsequent internal systems can have their metadata partially exposed. No EPSS data was provided, the vulnerability is not listed in CISA KEV, and no public exploit code has been identified, all of which suggest this has not been broadly weaponized. Practical risk scales with deployment context: an Omnivore instance whose API server has outbound access to cloud metadata services (e.g., AWS IMDSv1 at 169.254.169.254) or internal APIs faces meaningful lateral-movement exposure even with limited response fidelity, because port reachability inference alone can map internal topology. Organizations without network-level egress controls between the Omnivore server and sensitive internal resources should treat the patch as a priority. |
| Exploit ScenarioDerived | An authenticated Omnivore user submits a scanFeeds GraphQL mutation supplying an internal URL such as http://169.254.169.254/latest/meta-data/ (AWS IMDSv1) as the target. The server fetches the URL via axios; if the response contains parseable feed metadata or HTML link elements advertising RSS/Atom feeds, those fields are returned to the attacker. Even when the target does not return parseable feed content, the attacker can distinguish open from closed internal ports through differing error responses, enabling systematic internal network enumeration from an authenticated session. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 20, 2026
Server-side request forgery in Omnivore's scanFeedsResolver GraphQL endpoint allows authenticated users to direct the API server to fetch arbitrary internal URLs, bypassing the validateUrl() guard consistently applied elsewhere in the same codebase. Reachable internal endpoints return partial feed metadata (URL, title, description, type) and advertised RSS/Atom link elements; unreachable ports are distinguishable through error differentiation, enabling internal network enumeration. No public exploit has been identified and this vulnerability is not listed in CISA KEV; an upstream patch has been merged as commit c4d7d8562.
RemediationAI
Apply the upstream patch at commit c4d7d8562e6b9aabb1d8e4dabca268e314baa43a (https://github.com/omnivore-app/omnivore/commit/c4d7d8562e6b9aabb1d8e4dabca268e314baa43a), which adds validateUrl(url) to both scanFeedsResolver and setWebhookResolver. A specific patched release version has not been independently confirmed - the fix is available on the main branch but is not tied to a tagged release in the provided data, so operators should build from the patched commit or monitor for an official release. As a compensating control prior to patching, restrict the Omnivore API server's outbound network access via host-based or perimeter firewall rules to block egress to RFC-1918 ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16), link-local (169.254.0.0/16), and loopback (127.0.0.0/8). This prevents internal endpoint access at the network layer without modifying the application; the trade-off is that intranet-hosted RSS feeds (if any) would also be blocked. Restricting scanFeeds GraphQL access to trusted user roles is an additional control if the platform supports role-based authorization at the resolver level.
Affected VersionsENISA
Affects your stack
Find out whether the stacks and servers you run are on an affected version.
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Omnivore is an open-source read-it-later and RSS aggregation platform. The vulnerable component is the scanFeedsResolver handler in packages/api/src/resolvers/subscriptions/index.ts, which invokes axios.get(url, rssParserConfig()) with a caller-supplied URL and no prior address validation. The codebase already contains a validateUrl() function - backed by the private-ip library - that rejects RFC-1918 and reserved address ranges; this guard is applied to the subscribe path and createPageSaveRequest, but was missing from scanFeedsResolver, creating an inconsistent enforcement gap within the same file. The root cause class is CWE-918 (Server-Side Request Forgery). The affected CPE is cpe:2.3:a:omnivore-app:omnivore:*:*:*:*:*:*:*:*, indicating all versions prior to the patch commit. The patch (commit c4d7d8562e6b9aabb1d8e4dabca268e314baa43a) inserts validateUrl(url) at the entry point of scanFeedsResolver and also adds the same guard to the setWebhookResolver, closing a parallel omission in that handler.
Know when Omnivore 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
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:N/SC:L/SI:N/SA:N
Network-accessible GraphQL endpoint requires an authenticated session (PR:L); partial metadata disclosure only warrants C:L; no integrity or availability impact; scope unchanged as exploitation remains within the application boundary.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
The scanFeedsResolver in packages/api/src/resolvers/subscriptions/index.ts passes the caller-supplied url straight to axios.get(url, rssParserConfig()) with no address validation. The same file guards the subscribe path with validateUrl(), which rejects private and reserved ranges through the private-ip library, and createPageSaveRequest applies the same check, so the omission is specific to this resolver. An authenticated user can direct the server to request arbitrary internal endpoints. The response is parsed as a feed or as HTML and the resolver returns the resulting url, title, description and type fields, so disclosure is limited to feed-shaped metadata and to link elements advertising RSS or Atom feeds; requests that do not parse still distinguish reachable ports from unreachable ones through the resulting error.
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.
Authentication bypass in the Omnivore API (packages/api) before commit abf53d6 lets a remote unauthenticated attacker im
Blind Server-Side Request Forgery in Omnivore's webhook registration flow allows any authenticated user to coerce the ap
EUVD-2026-63255
GHSA-w9wc-vx4j-8xwg
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB