Ech0 Unauthenticated Server-Side Request Forgery Vulnerability
Ech0 is vulnerable to Server-Side Request Forgery (SSRF) due to an unauthenticated API endpoint (`/api/website/title`) that fetches website titles from user-controlled URLs, lacking proper validation and TLS verification, allowing attackers to access internal resources and potentially cause denial of service.
The Ech0 application suffers from an unauthenticated Server-Side Request Forgery (SSRF) vulnerability in its website preview feature. The /api/website/title endpoint, intended to fetch website titles, accepts a fully attacker-controlled URL without authentication. This allows anyone who can reach the Ech0 instance to force the server to make HTTP/HTTPS requests to arbitrary URLs. The application lacks a host allowlist, SSRF filter, and disables TLS certificate validation (InsecureSkipVerify: true). The backend reads the full HTML body into memory, which combined with enabled HTTP redirect following and the insecure TLS setting, allows attackers to target internal services and potentially cause a denial of service. The vulnerability is present in Ech0 versions prior to 1.4.8-0.20260401031029-4ca56fea5ba4.
Attack Chain
- An attacker identifies an Ech0 instance and the
/api/website/titleendpoint. - The attacker crafts a malicious URL targeting an internal resource or a service on the Ech0 server’s network.
- The attacker sends an unauthenticated GET request to
/api/website/titlewith thewebsite_urlparameter set to the malicious URL (e.g.,http://127.0.0.1:6277/api/website/title?website_url=http://host.docker.internal:9999/poc_ssrf_proof.html). - The Ech0 server, lacking proper validation, makes an HTTP(S) request to the attacker-specified URL using
internal/util/http/http.go. - If the targeted URL redirects, the Ech0 server follows the redirect due to the default
http.Clientbehavior. - The Ech0 server reads the entire response body into memory using
io.ReadAll, potentially leaking sensitive information or causing a denial of service if the response is large. - The Ech0 server parses the HTML body looking for the title and returns the title, or an error message, to the attacker.
- The attacker gains access to information from internal services or causes a denial-of-service condition by exhausting server resources.
Impact
This SSRF vulnerability allows unauthenticated attackers to force the Ech0 server to make HTTP(S) requests to internal or reserved targets reachable from the server’s network. A successful attack can lead to information disclosure, such as leaking cloud metadata from 169.254.169.254-class endpoints, or access to internal services that are not exposed to the public internet. The io.ReadAll function makes the Ech0 server susceptible to denial-of-service attacks if the attacker provides a URL that returns a large response. The number of victims depends on the deployment of the Ech0 application and the accessibility of internal resources from the Ech0 server’s network.
Recommendation
- Deploy the Sigma rule
Detect Ech0 SSRF via Website Title APIto detect attempts to exploit this vulnerability by monitoring requests to the/api/website/titleendpoint with suspicious URLs. - Block access to internal metadata endpoints like
169.254.169.254from the Ech0 server if not explicitly required, mitigating the risk of cloud metadata exposure. - Apply the patch by upgrading to Ech0 version 1.4.8-0.20260401031029-4ca56fea5ba4 or later, addressing the underlying code flaws (CVE-2026-35036).
Detection coverage 2
Detect Ech0 SSRF via Website Title API
highDetects potential SSRF attacks against the Ech0 application by monitoring requests to the /api/website/title endpoint with suspicious URLs.
Detect Ech0 SSRF - HTTP Client InsecureSkipVerify
mediumDetects requests originating from Ech0 server where TLS verification is skipped (InsecureSkipVerify is true).
Detection queries are kept inside the platform. Get full rules →
Indicators of compromise
1
ip
1
url
| Type | Value |
|---|---|
| url | http://host.docker.internal:9999/poc_ssrf_proof.html |
| ip | 169.254.169.254 |