{"id":"CVE-2026-100863","summary":"Heym before 0.0.91 SSRF via image fetching and IPv6 validation","details":"Heym versions 0.0.90 and earlier contain two server-side request forgery (SSRF) egress gaps, both remediated in app/services/ssrf_guard.py in 0.0.91. First, the LLM image-edit input loader (_load_image_bytes) fetched caller-controlled HTTP/HTTPS URLs with a bare httpx.get, applying only a scheme check and bypassing the egress-pinning HTTP client; because the workflow DSL supports \"imageInput\": \"$userInput.body.imageUrl\", a webhook or API caller can choose the fetch target when a workflow author uses that expression, allowing requests to loopback, RFC1918, and cloud metadata endpoints. Second, _is_public_address unwrapped only IPv4-mapped IPv6 addresses, so IPv6 transition forms — the NAT64 well-known prefix 64:ff9b::/96, deprecated IPv4-compatible ::x.x.x.x addresses, and 6to4 (2002::/16, classified as globally routable by Python 3.11.0 through 3.11.9) — could carry loopback, RFC1918, link-local, or cloud-metadata IPv4 destinations past both the initial URL validation and the dial-time IP pin. Version 0.0.91 routes the image loader through guard_http_url and the guarded client, evaluates NAT64 and IPv4-compatible addresses by their embedded IPv4 address, and refuses 64:ff9b:1::/48, 6to4, and Teredo (2001::/32) outright.","aliases":["GHSA-6rph-qqcv-jqh4"],"modified":"2026-09-28T03:30:53.271804520Z","published":"2026-09-27T01:28:52.561Z","database_specific":{"cwe_ids":["CWE-918"],"osv_generated_from":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/100xxx/CVE-2026-100863.json","cna_assigner":"VulnCheck"},"references":[{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/100xxx/CVE-2026-100863.json"},{"type":"ADVISORY","url":"https://github.com/heymrun/heym/security/advisories/GHSA-6rph-qqcv-jqh4"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-100863"},{"type":"ADVISORY","url":"https://www.vulncheck.com/advisories/heym-before-0.0.91-ssrf-via-image-fetching-and-ipv6-validation"}],"affected":[{"ranges":[{"type":"GIT","repo":"https://github.com/heymrun/heym","events":[{"introduced":"0"},{"fixed":"1267b7b6a02f88eb447a5d09057296c4fac54c67"}],"database_specific":{"extracted_events":[{"introduced":"0"},{"fixed":"0.0.91"}],"source":"AFFECTED_FIELD"}}],"versions":["v0.0.90","v0.0.89","v0.0.88","v0.0.87","v0.0.86","v0.0.85","v0.0.84","v0.0.83","v0.0.82","v0.0.81","v0.0.79","v0.0.80","v0.0.78","v0.0.77","v0.0.76","v0.0.75","v0.0.74","0.0.73","v0.0.72","opencode-pr-assets","0.0.71","codex-pr-assets","0.0.70","v0.0.69","v0.0.68","v0.0.67","v0.0.66","v0.0.65","v0.0.64","v0.0.63","v0.0.62","v0.0.61","v0.0.60","v0.0.59","v0.0.58","v0.0.57","v0.0.56","v0.0.55","v0.0.54","v0.0.53","v0.0.52","v0.0.51","v0.0.50","v.0.0.49","v0.0.48","v0.0.47","v0.0.46","v0.0.45","v0.0.44","v0.0.43","v0.0.42","v0.0.41","v0.0.40","v0.0.39","v0.0.38","v0.0.37","v0.0.36","v0.0.35","v0.0.34","v0.0.33","v0.0.32","v0.0.31","v0.0.30","v0.0.29","v0.0.27","v0.0.26","v0.0.25","v0.0.24","v0.0.23","v0.0.22","v0.0.21","v0.0.20","v0.0.19","v0.0.18","v0.0.17","v0.0.16","v0.0.15","v0.0.14","v0.0.13","v0.0.12","v0.0.11","v0.0.10","v0.0.9","v0.0.8","v0.0.7","v0.0.6","v0.0.5","v0.0.4","v0.0.3","v0.0.2","v0.0.1"],"database_specific":{"source":"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-100863.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V4","score":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:N/SC:L/SI:N/SA:N"}]}