Skip to main content

Heimdall CVE-2026-107449

| EUVDEUVD-2026-94738 LOW
Server-Side Request Forgery (SSRF) (CWE-918)
2026-10-08 mitre GHSA-hrj5-rw8j-34qj
3.4
CVSS 3.1 · Vendor: mitre
View

Attack ChainAIDerived

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

  1. Access
    Lure victim to malicious page
  2. Delivery
    Browser auto-sends CSRF POST /test_config
  3. Exploit
    Server Guzzle client fetches attacker URL
  4. Execution
    SSRF reaches internal host/169.254.169.254
  5. Impact
    Exfiltrate port oracle and partial 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 the POST /test_config and/or GET /get_stats endpoints (the enhanced-application test and live-stats features backed by SupportedApps::execute()) to be reachable and, per the description, accessible via CSRF in a given installation - the author explicitly scopes this to 'some realistic installations,' so it is not universal across all deployments. A victim with network reachability to the Heimdall instance must be tricked into loading attacker-controlled content (UI:R), since the request is delivered through their browser rather than by direct attacker authentication. The impact of the cloud-metadata vector (169.254.169.254) is further conditioned on Heimdall running on a cloud instance exposing an unauthenticated metadata service. Limiting factors: mandatory user interaction, dependence on the test/stats endpoints being CSRF-reachable in that specific install (AC:H), and confidentiality-only impact limited to a status/port oracle plus partial response data.

Impact

This is a genuine but low-urgency issue, not a high-priority emergency. The CVSS base score is only 3.4, and the input vector (CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:N/A:N) is internally consistent with the description: network-reachable (AV:N) but requiring both high attack complexity (AC:H, reflecting the 'in some realistic installations' caveat) and user interaction (UI:R, reflecting the CSRF delivery vector), with only low confidentiality impact (C:L, a status/port oracle plus partial response data) and no integrity or availability impact. Exploitation status is 'publicly available exploit code exists' - a POC repo (kashishtopi/heimdall-unauth-ssrf) is referenced - but there is NO CISA KEV listing and NO EPSS score in the provided data, so there is no evidence of active or widespread exploitation; POC availability must not be conflated with in-the-wild use. The 'unauthenticated' framing is accurate per PR:N, but note the attacker does not directly authenticate - exploitation is laundered through a victim's browser via CSRF, which materially lowers real-world reliability. The main legitimate concern is the cloud-metadata angle (169.254.169.254), which could expose IAM credentials if Heimdall runs on a cloud instance, but that is an environment-dependent amplifier rather than a property of the base flaw. Missing signals: EPSS and KEV are both absent from input - treat exploitation likelihood as low-to-moderate and targeted, not mass-scanning.

Exploit ScenarioDerived

An attacker crafts a malicious web page that auto-submits a POST to /test_config (or triggers GET /get_stats) on a victim's reachable Heimdall instance and lures a user who can reach that instance into visiting it. Because SupportedApps::execute() uses a GuzzleHttp client with no IP restrictions, the server is coerced into contacting an attacker-chosen internal host/port - including the cloud metadata endpoint 169.254.169.254 - returning a status/port oracle and partial response data. A public POC (kashishtopi/heimdall-unauth-ssrf) exists, but the AC:H/UI:R requirements mean success depends on a reachable instance and a cooperating victim browser.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
No patch listed yet 0.2% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 08, 2026

Server-side request forgery in LinuxServer Heimdall through 2.8.3 lets an unauthenticated attacker coerce the server into issuing HTTP requests to arbitrary internal hosts and ports, including the cloud metadata address 169.254.169.254, by inducing a victim with network reachability to the instance to load attacker-controlled content that triggers the CSRF-reachable POST /test_config or GET /get_stats endpoints (CVSS 3.1 base score 3.4, vector AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:N/A:N). Publicly available exploit code exists, but there is no indication of confirmed active exploitation, and the author scopes the CSRF exposure to only 'some realistic installations' where those endpoints are reachable. The realistic impact is a status/port oracle plus partial response data - not full response exfiltration - and the cloud-metadata path additionally requires Heimdall to run on an instance exposing an unauthenticated metadata service.

RemediationAI

No vendor-released patch was identified at time of analysis, so remediation must initially rely on compensating controls. The most direct mitigation is to remove network access to the vulnerable functionality: place Heimdall behind a reverse proxy or authentication layer that requires credentials and validates the Origin/Referer and CSRF token for POST /test_config and GET /get_stats, and disable the enhanced-application test and live-statistics features if they are not needed - the trade-off is loss of per-application health/status reporting in the dashboard. Enforce outbound egress filtering from the Heimdall host so that requests to link-local (169.254.0.0/16, especially 169.254.169.254) and internal RFC1918/link-local ranges are dropped, which contains the SSRF primitive at the cost of potentially breaking legitimate probes of internal services that the dashboard is expected to reach; where legitimate internal probing is required, allowlist only the specific service hosts and ports rather than permitting arbitrary destinations. On cloud hosts, require instance metadata service v2 (IMDSv2, session-token based) so that a blind SSRF cannot retrieve metadata credentials, and run the container with a network policy that denies unnecessary outbound flows. The public proof-of-concept at https://github.com/kashishtopi/heimdall-unauth-ssrf can be used to verify each mitigation, and administrators should monitor the upstream Heimdall repository (https://github.com/linuxserver/Heimdall/blob/9ad5864a80d7025db1e6eab8eb2981c165b0ddff/app/SupportedApps.php) for a fixed release before removing these restrictions.

Affected VersionsENISA

Heimdall 0 ≤2.8.3

Affected Packages

euvd heimdall no fix

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

Heimdall is a PHP application-dashboard/launcher maintained by LinuxServer.io that stores links to self-hosted services and can actively probe them ('enhanced' application tests and live statistics). The root cause is CWE-918 (Server-Side Request Forgery): the codebase implements a SafeUrlFetcher guard that validates destinations against internal IP ranges, but that guard is wired only into ItemController. The enhanced-application test and live-stats code paths instead run through SupportedApps::execute(), which instantiates a GuzzleHttp client with no IP-address restrictions, so URLs supplied through those paths are fetched without the intended private/link-local address filtering. Because the POST /test_config and GET /get_stats routes are, in some deployments, reachable without authentication and without robust CSRF protection, an attacker who gets a victim's browser to issue those requests can drive the server-side Guzzle client toward internal hosts and arbitrary ports - most notably the link-local cloud metadata endpoint 169.254.169.254. The primary observable outcomes are a port/status oracle (differing responses for open, closed, or filtered ports) and partial response bodies, which is consistent with the assessed confidentiality-only, low-impact vector and the CVSS scope change (S:C) arising from the server acting as a proxy into other trust boundaries.

Know when Heimdall 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 (mitre) PRIMARY 3.4 LOW
AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:N/A:N
vuln.today AI 3.4 LOW

CSRF delivery forces UI:R and PR:N; conditional endpoint reachability makes AC:H; SSRF crosses into internal systems so S:C with only oracle/partial-data read as C:L.

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

Primary rating from Vendor (mitre).

CVSS VectorVendor: mitre

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

DescriptionCVE.org

linuxserver Heimdall through 2.8.3 applies its SafeUrlFetcher SSRF protection mechanism only to ItemController; the enhanced-application test and live-stats requests occur via SupportedApps::execute(), a GuzzleHttp client that lacks IP address restrictions. In some realistic installations, the POST /test_config (and GET /get_stats) endpoints are accessible through CSRF, and thus an unauthenticated attacker can force the server to send requests to arbitrary internal hosts and ports (including 169.254.169.254) and read a status/port oracle in addition to partial response data.

Threat Intelligence Overview

EPSS Score
0.2%
Top 95% exploitable
Prevalence
Low
self-hosted homelab/dashboard app, minimal production enterprise footprint
Exploit
POC
Public exploit code exists
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 LOW
CISA KEV No
Public POC Yes
EPSS 0.2%
Patch available No
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.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· derived
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Low
Technical Impact
Partial

Priority Score

37
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +17
PoC: +20
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.

Cross-Site Request Forgery exploits the automatic credential inclusion behavior of web browsers.

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