Skip to content
Heist/ feed
Back to feed
High

Ech0 Affected by Unauthenticated Server-Side Request Forgery in Website Preview Feature

Type: advisorySources: OSV

Ech0 is an open-source, self-hosted publishing platform for personal idea sharing. Prior to 4.2.8, Ech0 implements link preview (editor fetches a page title) through GET /api/website/title. That is legitimate product behavior, but the implementation is unsafe: the route is unauthenticated, accepts a fully attacker-controlled URL, performs a server-side GET, reads the entire response body into memory (io.ReadAll). There is no host allowlist, no SSRF filter, and InsecureSkipVerify: true on the outbound client. Anyone who can reach the instance can force the Ech0 server to open HTTP/HTTPS URLs of their choice as seen from the server’s network position (Docker bridge, VPC, localhost from the process view). This vulnerability is fixed in 4.2.8.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-35036
Confirmed fixed CVEs
Not specified
Updated in this feed
4 Nov 2026, 03:52 UTC · Revision 1

Source evidence

Ech0 Affected by Unauthenticated Server-Side Request Forgery in Website Preview Feature

core-osv · Original source

Published 6 Apr 2026, 16:55 UTC

Ech0 is an open-source, self-hosted publishing platform for personal idea sharing. Prior to 4.2.8, Ech0 implements link preview (editor fetches a page title) through GET /api/website/title. That is legitimate product behavior, but the implementation is unsafe: the route is unauthenticated, accepts a fully attacker-controlled URL, performs a server-side GET, reads the entire response body into memory (io.ReadAll). There is no host allowlist, no SSRF filter, and InsecureSkipVerify: true on the outbound client. Anyone who can reach the instance can force the Ech0 server to open HTTP/HTTPS URLs of their choice as seen from the server’s network position (Docker bridge, VPC, localhost from the process view). This vulnerability is fixed in 4.2.8.

osv:CVE-2026-35036
Complete source record
{
  "id": "4bc34b4dd44163198eedd24ae1209a48377b40ed39224bd2ad39c56e8b9c7fc6",
  "url": "https://osv.dev/vulnerability/CVE-2026-35036",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "Ech0 Affected by Unauthenticated Server-Side Request Forgery in Website Preview Feature",
    "summary": "Ech0 is an open-source, self-hosted publishing platform for personal idea sharing. Prior to 4.2.8, Ech0 implements link preview (editor fetches a page title) through GET /api/website/title. That is legitimate product behavior, but the implementation is unsafe: the route is unauthenticated, accepts a fully attacker-controlled URL, performs a server-side GET, reads the entire response body into memory (io.ReadAll). There is no host allowlist, no SSRF filter, and InsecureSkipVerify: true on the outbound client. Anyone who can reach the instance can force the Ech0 server to open HTTP/HTTPS URLs of their choice as seen from the server’s network position (Docker bridge, VPC, localhost from the process view). This vulnerability is fixed in 4.2.8.",
    "evidence": "osv:CVE-2026-35036",
    "products": [],
    "severity": "high",
    "structured": {
      "id": "CVE-2026-35036",
      "aliases": [
        "CVE-2026-35036",
        "GHSA-wc4h-2348-jc3p",
        "GO-2026-5704"
      ],
      "metrics": [
        {
          "type": "CVSS_V3",
          "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/lin-snow/ech0",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "4ca56fea5ba4cd477bd1c6134a0435014635b5d8"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "4.2.8"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StringRangeExpression"
                  },
                  {
                    "cpe": "cpe:2.3:a:ech0:ech0:*:*:*:*:*:*:*:*",
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "4.2.8"
                      }
                    ],
                    "source": "CPE_RANGE"
                  }
                ]
              }
            }
          ],
          "versions": [
            "v4.2.7",
            "v4.2.5",
            "v4.2.4",
            "v4.2.3",
            "v4.2.2",
            "v4.2.1",
            "v4.2.0",
            "v4.1.9",
            "v4.1.8",
            "v4.1.7",
            "v4.1.6",
            "v4.1.5",
            "v4.1.4",
            "v4.1.3",
            "v4.1.2",
            "v4.1.1",
            "v4.1.0",
            "v4.0.2",
            "v4.0.0",
            "v3.1.4",
            "v3.1.3",
            "v3.1.2",
            "v3.1.1",
            "v3.1.0",
            "v3.0.9",
            "v3.0.8",
            "v3.0.7",
            "v3.0.6",
            "v3.0.5",
            "v2.9.2",
            "v3.0.4",
            "v3.0.3",
            "v3.0.2",
            "v3.0.1",
            "v3.0.0",
            "v2.9.10",
            "v2.9.9",
            "v2.9.8",
            "v2.9.7",
            "v2.9.6",
            "v2.9.5",
            "v2.9.4",
            "v2.9.3",
            "v2.9.1",
            "v2.9.0",
            "v2.8.10",
            "v2.8.9",
            "v2.8.8",
            "v2.8.7",
            "v2.8.6",
            "v2.8.5",
            "v2.8.4",
            "v2.8.3",
            "v2.8.2",
            "v2.8.1",
            "v2.8.0",
            "v2.7.10",
            "v2.7.9",
            "v2.7.8",
            "v2.7.7",
            "v2.7.6",
            "v2.7.5",
            "v2.7.4",
            "v2.7.3",
            "v2.7.2",
            "v2.7.1",
            "v2.7.0",
            "v2.6.10",
            "v2.6.9",
            "v2.6.8",
            "v2.6.7",
            "v2.6.6",
            "v2.6.5",
            "v2.6.4",
            "v2.6.3",
            "v2.6.2",
            "v2.6.1",
            "v2.6.0",
            "v2.5.10",
            "v2.5.9",
            "v2.5.8",
            "v2.5.7",
            "v2.5.6",
            "v2.5.5",
            "v2.5.4",
            "v2.5.3",
            "v2.5.1",
            "v2.5.0",
            "v2.4.9",
            "v2.4.8",
            "v2.4.7",
            "v2.4.6",
            "v2.4.5",
            "v2.4.4",
            "v2.4.3",
            "v2.4.2",
            "v2.4.1",
            "v2.4.0",
            "v2.3.9",
            "v2.3.8",
            "v2.3.7",
            "v2.3.6",
            "v2.3.5",
            "v2.3.4",
            "v2.3.3",
            "v2.3.2",
            "v2.3.1",
            "v2.3.0",
            "v2.2.9",
            "v2.2.8",
            "v2.2.7",
            "v2.2.6",
            "v2.2.5",
            "v2.2.4",
            "v2.2.3",
            "v2.2.2",
            "v2.2.1",
            "v2.2.0",
            "v2.1.10",
            "v2.1.9",
            "v2.1.8",
            "v2.1.7",
            "v2.1.6",
            "v2.1.5",
            "v2.1.4",
            "v2.1.3",
            "v2.1.2",
            "v2.1.1",
            "v2.1.0",
            "v2.0.0",
            "v1.4.7",
            "v1.4.6",
            "v1.4.5",
            "v1.4.4",
            "v1.4.3",
            "v1.4.2",
            "v1.4.1",
            "v1.4.0",
            "v1.3.9",
            "v1.3.8",
            "v1.3.7",
            "v1.3.6",
            "v1.3.5",
            "v1.3.4",
            "v1.3.3",
            "v1.3.2",
            "v1.3.1",
            "v1.3.0",
            "v1.2.9",
            "v1.2.8",
            "v1.2.7",
            "v1.2.6",
            "v1.2.5",
            "v1.2.4",
            "v1.2.3",
            "v1.2.2",
            "v1.2.1",
            "v1.2.0",
            "v1.1.1",
            "v1.1.0",
            "v1.0.0"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-35036.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:32.837355368Z",
      "provider": "osv",
      "references": [
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/35xxx/CVE-2026-35036.json",
        "https://github.com/lin-snow/Ech0/security/advisories/GHSA-wc4h-2348-jc3p",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-35036"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-918"
        ],
        "cna_assigner": "GitHub_M",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/35xxx/CVE-2026-35036.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-35036",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 500125,
  "published_at": "2026-04-06T16:55:47.544+00:00"
}