Skip to main content

Glean CVE-2026-54339

| EUVDEUVD-2026-82429 HIGH
Server-Side Request Forgery (SSRF) (CWE-918)
2026-09-17 GitHub_M
7.7
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate to Glean
  2. Delivery
    POST /api/feeds/discover with malicious feed_url
  3. Exploit
    Feed items link to internal/metadata URLs
  4. Execution
    Worker fetches links without validation
  5. Persist
    Response stored in Entry.content
  6. Impact
    GET /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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

glean < 0.2.6

Affected Packages

euvd glean fix: 0.2.6

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

Vendor (GitHub_M) PRIMARY 7.7 HIGH
AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N
vuln.today AI 7.7 HIGH

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.

3.1 AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:L/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Changed
Confidentiality
High
Integrity
None
Availability
None

Lifecycle Timeline

2
Patch available
Sep 17, 2026 - 21:19 EUVD
CVE Published
Sep 17, 2026 - 20:21 cve.org
HIGH 7.7

DescriptionCVE.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

Why It Matters

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.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.3%
Top 73% exploitable
Prevalence
Low
niche self-hosted single-maintainer open-source RSS/PKM tool
Data Quality
6 sources
Confidence: High

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Partial

Priority Score

38
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +38
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy