Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconAuthenticate as Ech0 admin
-
DeliveryPOST webhook with nip.io DNS-bypass URL
-
ExploitvalidateWebhookURL skips IP check (net.ParseIP returns nil)
-
InstallWebhook stored as active in database
-
C2Application event fires Dispatcher.HandleObservation
-
ExecuteServer DNS-resolves hostname to 169.254.169.254
-
ImpactPOST to cloud metadata endpoint exfiltrates credentials
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 attacker to hold admin-level privileges within Ech0 (CVSS PR:H), sufficient to call the webhook creation API (POST /api/webhook). No special non-default configuration is required beyond the webhook feature being enabled, which is part of standard Ech0 functionality. Once the malicious webhook is stored, exploitation recurs automatically on every application event without further attacker interaction. Exploitation is most impactful when Ech0 is deployed in a cloud environment (AWS, Azure, GCP) where the instance metadata service (169.254.169.254) is reachable from the server; in purely on-premises deployments without accessible internal HTTP services, impact is reduced. Limiting factors: admin access is required (not user-level or unauthenticated); the attacker cannot directly read the HTTP response via the webhook creation API - a separate out-of-band channel (attacker-controlled server or SSRF response reflection) is needed to capture exfiltrated data. |
| Impact | The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:H/UI:N) scores 5.1 (Medium), and the PR:H metric is the decisive limiting factor - exploitation is confined to users with admin-level access to the Ech0 instance. This substantially reduces real-world risk compared to a network-exploitable unauthenticated SSRF. That said, in cloud-hosted deployments, an admin-level compromise converting to IMDS (Instance Metadata Service) credential theft is a meaningful lateral movement step. Impact metrics (VC:L/VI:L/SC:L/SI:L) are appropriately calibrated: the attacker gains limited read access to internal services and can make limited write-side requests via webhook POST. No EPSS score was provided in the input; given the niche product footprint and PR:H requirement, real-world exploitation probability is expected to be low. Publicly available exploit code (curl PoC in the GHSA advisory) exists, but no CISA KEV listing confirms active exploitation. There is no conflict between stated signals. The primary realistic threat actor is a malicious or compromised admin in a cloud environment. |
| Exploit ScenarioDerived | An admin-level user authenticates to Ech0 and issues a POST /api/webhook request with a URL such as http://169.254.169.254.nip.io/latest/meta-data/iam/security-credentials/. The validateWebhookURL function passes the hostname through net.ParseIP(), receives nil, skips all private-IP checks, and stores the webhook as active. A publicly available curl-based PoC demonstrates this flow. On each subsequent application echo event, the Dispatcher fires the stored webhook, causing the Ech0 server to DNS-resolve the nip.io hostname to 169.254.169.254 and POST to the cloud metadata endpoint, returning temporary IAM credentials or instance identity data to the attacker. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 25, 2026
Server-side request forgery in Ech0 through 4.2.1 (Go-based self-hosted application by lin-snow) allows an authenticated admin to exfiltrate data from internal network services and cloud metadata endpoints by exploiting a DNS resolution bypass in webhook URL validation. The validateWebhookURL function checks only literal IP strings via net.ParseIP(), so hostnames like 169.254.169.254.nip.io pass validation unchallenged and DNS-resolve to private IPs at request time. Publicly available exploit code exists (curl-based PoC in GHSA-r2x7-427f-rq69); no confirmed active exploitation (not in CISA KEV). The CVSS 4.0 score of 5.1 reflects the PR:H prerequisite, which substantially limits real-world exposure.
RemediationAI
Upgrade Ech0 to version 4.4.3 or later; this is the vendor-released patch confirmed by both the GitHub security advisory (GHSA-r2x7-427f-rq69) and VulnCheck. The fix should replace the net.ParseIP()-only check with a DNS-resolving validation that resolves the webhook hostname at creation time and validates the resulting IPs against private/loopback/link-local ranges. If upgrading immediately is not possible, a compensating control is to restrict the admin interface to trusted network segments only, reducing the population of users who can create webhooks. In cloud environments, consider enabling IMDS v2 (IMDSv2 on AWS), which requires a PUT-initiated session token, making metadata access via simple GET-based SSRF non-trivial - note this is a cloud-side mitigation and does not fix the SSRF itself. Blocking outbound server connections to RFC-1918 and 169.254.x.x ranges at the network/firewall layer would prevent exploitation against internal resources. See https://github.com/lin-snow/Ech0/security/advisories/GHSA-r2x7-427f-rq69 for fix details.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in go, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Ech0 is a Go-based self-hosted messaging or echo application (CPE: cpe:2.3:a:lin-snow:ech0). The vulnerable component is validateWebhookURL() in internal/service/setting/webhook_setting_service.go (lines 180-199). The function uses net.ParseIP() to identify private/loopback addresses, but net.ParseIP() returns nil for any hostname (non-literal IP string), causing the entire private-IP guard block to be skipped. This is a classic CWE-918 (Server-Side Request Forgery) pattern: trusted input (the hostname) is used to initiate a server-side network connection without verifying the resolved destination. Both the TestWebhook and Dispatcher HTTP clients use standard http.Client with no custom DialContext to intercept and validate post-resolution IPs. Once a malicious webhook is stored (is_active: true), the Dispatcher.HandleObservation function triggers it on every application event without re-validation, making the SSRF persistent and recurring. Cloud metadata endpoints (169.254.169.254 on AWS, Azure, GCP) are the primary high-value targets.
Know when Ech0 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:H/UI:N/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N
PR:H reflects mandatory admin privileges; S:C because the vulnerable server initiates requests to out-of-scope internal systems; no availability impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
1DescriptionCVE.org
Ech0 through 4.2.1 contains a server-side request forgery vulnerability in the validateWebhookURL function (webhook_setting_service.go), which only validates literal IP addresses via net.ParseIP() and fails to reject hostnames that DNS-resolve to private or internal IPs (e.g., 169.254.169.254.nip.io). An attacker with admin privileges can create a webhook with such a hostname to bypass validation and cause the server to make requests to internal services, cloud metadata endpoints, and private network resources. The issue is fixed in 4.4.3.
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.
Persistent authentication bypass in Ech0 (lin-snow's self-hosted lightweight publishing/memo app) before 4.7.3 lets an a
OAuth redirect URI validation in Ech0 through 4.5.6 allows session hijacking via exchange-code theft by exploiting incom
Authorization bypass in Ech0 before 4.5.1 allows any authenticated non-admin user to invoke privileged admin endpoints b
Denial of service in Ech0 before 5.0.1 allows unauthenticated remote attackers to saturate server CPU by exploiting a qu
Privilege escalation in Ech0 before 4.4.3 allows an attacker holding an admin's profile:read access token to change the
Server-side request forgery in Ech0 before version 4.7.3 allows authenticated users to pivot through the application ser
Scope enforcement in Ech0 4.3.4 and earlier is opt-in at the route level, meaning privileged admin routes that omit the
Missing administrator authorization on dashboard log endpoints in Ech0 before 4.4.3 allows any authenticated low-privile
Scope enforcement bypass in Ech0's comment panel admin API allows any holder of a valid admin-issued access token - rega
Unauthenticated metric inflation in Ech0 before 4.7.3 allows any remote attacker to arbitrarily increment the fav_count
Unauthenticated remote attackers can increment the fav_count of any echo - including private ones - in Ech0 through 4.5.
Ech0 before version 4.7.3 exposes guest commenter email addresses to unauthenticated remote callers via public comment-l
EUVD-2026-65443
GHSA-7rwv-fqq2-88c4
NVD
CVE.org
EPSS
VulDB
Exploit-DB