Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate to Glean
-
DeliveryPOST /api/feeds/discover with malicious feed_url
-
ExploitFeed items link to internal/metadata URLs
-
ExecutionWorker fetches links without validation
-
PersistResponse stored in Entry.content
-
ImpactGET /api/entries/{id} discloses internal 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 | Requires an authenticated Glean account able to reach POST /api/feeds/discover (PR:L) on a version prior to 0.2.6; no user interaction and no special non-default configuration are needed because feed discovery and background full-text extraction are core features. Exploitation succeeds against any deployment where the Glean backend/worker has network reachability to internal, loopback, link-local (169.254.0.0/16), or cloud-metadata (169.254.169.254) endpoints. The limiting factors are: valid authentication is mandatory (not anonymous), and impact is bounded to what the server itself can reach; disclosure is retrieved out-of-band via GET /api/entries/{id}, so the attacker needs read access to their own stored entries (which they have by default). |
| Impact | This is a genuine, well-substantiated SSRF (CWE-918) with above-average real-world impact because it is NON-BLIND: the fetched internal response is stored in Entry.content and readable via GET /api/entries/{id}, giving full response disclosure rather than blind timing/error signals. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N = 7.7) is internally consistent with the description: network-reachable, low complexity, requires a valid authenticated account (PR:L) to POST /api/feeds/discover, scope-changed (S:C) because the server pivots to distinct internal systems, and high confidentiality with no integrity/availability impact. No EPSS score, KEV listing, POC, or SSVC data was provided in the input, so exploitation-probability signals are absent - per the precision rule this is 'no public exploit identified at time of analysis.' The patch commit (cdc05dd) is confirmed and introduces a self-contained SSRF-safe httpx client (safe_async_client) that blocks RFC1918/loopback/link-local/cloud-metadata ranges and resolves DNS-rebinding, corroborating both the root cause and the remediation. Net: a real, patch-now priority for anyone running Glean with the feed-discovery API exposed to untrusted authenticated users, but not evidence of mass exploitation - treat as targeted-risk given the product's small footprint. |
| Exploit ScenarioDerived | An authenticated Glean user submits POST /api/feeds/discover with feed_url pointing to a malicious server that returns an RSS feed whose item links reference internal targets (e.g. http://169.254.169.254/latest/meta-data/ or http://127.0.0.1:PORT). The background worker fetches each link via fetch_and_extract_fulltext() without network validation, stores the response in Entry.content, and the attacker reads the full internal response through GET /api/entries/{id}. No public exploit code was identified in the provided data, but the attack is low-complexity and non-blind. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 17, 2026
Server-side request forgery in the self-hosted Glean RSS reader (all versions prior to 0.2.6) allows an authenticated user to make the backend worker issue HTTP requests to attacker-chosen URLs, including loopback, RFC 1918 private-range, link-local and cloud metadata endpoints such as 169.254.169.254. Because the fetched response is written into Entry.content and can be read back through GET /api/entries/{id}, this is a non-blind SSRF with full response disclosure rather than a timing or error oracle. Exploitation requires a valid Glean account able to reach POST /api/feeds/discover (PR:L) and no user interaction, so the limiting factor is authentication plus the server's own network reachability; no public exploit code was identified at time of analysis and there is no confirmed active exploitation (no CISA KEV listing).
RemediationAI
Vendor-released patch: upgrade to Glean 0.2.6, which is the first version containing the SSRF-safe HTTP transport; the upstream fix commit is cdc05dd34df58d8d210e0cbed0ccc60108e4eeed and the release is published at https://github.com/LeslieLeung/glean/releases/tag/v0.2.6, with the vendor advisory at https://github.com/LeslieLeung/glean/security/advisories/GHSA-78qf-q8fg-jcpg. If an immediate upgrade is not possible, apply compensating network-level controls in this order of effectiveness: restrict outbound egress from the Glean API/worker containers to only the internet destinations they legitimately need (an egress proxy or firewall rule denying RFC 1918, 127.0.0.0/8, 169.254.0.0/16, fc00::/7, fe80::/10 and 100.64.0.0/10), accepting the trade-off that legitimate feeds hosted on internal networks will stop working; block or NAT the cloud metadata endpoints specifically (enforce IMDSv2 and hop-limit 1 on AWS, or block 169.254.169.254/169.254.170.2 and 100.100.100.200 at the network layer), which prevents credential/token theft but does not stop internal port scanning or internal web-content disclosure; and temporarily restrict who can create subscriptions (remove untrusted accounts' access to POST /api/feeds/discover) or disable the feed-discovery and full-text-extraction features, at the cost of losing those functions for all users. Note that simply validating the submitted feed_url at the API layer is insufficient, because the vulnerable flow re-fetches per-item links from the parsed feed content after redirects and DNS resolution, so the fix must sit in the HTTP transport layer as upstream implemented it.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The root cause is CWE-918 (Server-Side Request Forgery): user-controlled URLs are handed to HTTP clients without any destination validation. In Glean, POST /api/feeds/discover forwards an attacker-supplied feed_url into discover_feed(feed_url), registers a subscription via FeedService.create_subscription(), and enqueues fetch_feed_task. The background path then calls fetch_feed(feed.url) and parse_feed(), which copies each RSS item link into ParsedEntry.url; that value is finally passed to fetch_and_extract_fulltext(parsed_entry.url) in backend/packages/rss/glean_rss/extractor.py and backend/apps/worker/glean_worker/tasks/feed_fetcher.py, where httpx.AsyncClient connects to whatever host the feed author specified. Multiple unvalidated call sites exist (discoverer.py, extractor.py, bookmark_metadata.py), and because httpx is used with follow_redirects, redirect targets are equally unconstrained. Networking primitives matter here: DNS resolution occurs inside the client, so a hostname that resolves to a public address at check time and to 127.0.0.1 or 169.254.169.254 at connect time (DNS rebinding/TOCTOU) is a viable bypass for naive denylists. The vendor fix in commit cdc05dd34df58d8d210e0cbed0ccc60108e4eeed introduces backend/packages/rss/glean_rss/safe_http.py, an SSRF-safe httpx transport that validates scheme, hostname blocklists (localhost, cloud metadata, Kubernetes internal DNS), and all resolved IPs against comprehensive IPv4/IPv6 blocklists (RFC 1918, loopback, link-local 169.254.0.0/16, CGN 100.64.0.0/10, multicast, NAT64 and IPv4-mapped ranges, plus specific metadata addresses such as 169.254.169.254, 169.254.170.2, 100.100.100.200 and fd00:ec2::254), rewrites the connection to a validated IP while preserving Host/SNI, and re-validates every redirect hop.
Know when Glean 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:C/C:H/I:N/A:N
Authenticated API call (PR:L) triggers server-side fetch pivoting to distinct internal systems (S:C) with full response disclosure (C:H); no integrity or availability impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Glean is a self-hosted RSS reader and personal knowledge management tool. Prior to 0.2.6, POST /api/feeds/discover passes an attacker-supplied feed_url to discover_feed(feed_url), creates a subscription through FeedService.create_subscription(), and enqueues fetch_feed_task. The background path calls fetch_feed(feed.url) and parse_feed(), which assigns each RSS item link to ParsedEntry.url. The task then passes ParsedEntry.url to fetch_and_extract_fulltext(parsed_entry.url) without network-level validation in backend/packages/rss/glean_rss/extractor.py and backend/apps/worker/glean_worker/tasks/feed_fetcher.py. A malicious feed can therefore make the server request private, loopback, link-local, or cloud-metadata resources. The fetched response is stored in Entry.content and can be retrieved through GET /api/entries/{id}, producing non-blind server-side request forgery with full response disclosure. This can bypass network perimeters, probe internal services and ports, expose internal configuration or web content, and potentially disclose cloud metadata access tokens. This issue is fixed in version 0.2.6.
Technical POC Analysis
CWE-918 (Server-Side Request Forgery).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Self-hosted Glean RSS reader versions prior to 0.2.6 have a flaw that lets an authenticated user make the server retrieve and reveal content from internal or cloud metadata systems. This can expose cloud credentials and internal network data to any valid Glean account holder, raising the risk of lateral movement and data breach. Leadership should prioritize the available vendor patch because the vulnerability is high severity, though no public exploit identified at time of analysis and no confirmed active exploitation.
Apply vendor patch.
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.
EUVD-2026-82429
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB