{"id":"CVE-2026-102983","aliases":["GHSA-4233-jc72-56c5"],"url":"https://o3.security/vulnerability/CVE-2026-102983","summary":"Astro: Netlify Image CDN allowlist bypass enables SSRF","details":"## Summary\n\nThe `@astrojs/netlify` adapter generated regular expressions for Netlify Image CDN remote-image allowlists without anchoring them to the beginning of the URL. Netlify evaluates these expressions with `RegExp.test()`, so an allowed image origin appearing anywhere in a URL, including its path or query string, could satisfy the allowlist.\n\nFor example, an application allowing `images.example.com` could accept a source URL such as:\n\n```text\nhttp://127.0.0.1:6379/?url=https://images.example.com/image.png\n```\n\nThe allowlist matched the approved origin in the query string, but Netlify parsed and fetched the URL whose actual host was `127.0.0.1`.\n\n## Impact\n\nAn unauthenticated attacker can bypass the configured `image.domains` or `image.remotePatterns` allowlist through the public `/.netlify/images` endpoint and cause Netlify Image CDN to make requests to attacker-selected URLs. This may allow probing or reaching internal services, depending on Netlify's network-level egress protections.\n\nThe Image CDN attempts to transform responses as images, which limits direct response exfiltration. No confidentiality or integrity impact has been demonstrated.\n\n## Affected versions\n\n`@astrojs/netlify` versions from 5.2.0 through 8.2.3.\n\n## Patches\n\nFixed in `@astrojs/netlify` 8.2.4. Generated remote-image allowlist expressions are now anchored to both the beginning and end of the source URL.\n\n## Workarounds\n\nUpgrade to `@astrojs/netlify` 8.2.4 or later. Before upgrading, disable Netlify Image CDN by setting `imageCDN: false` in the adapter configuration, or remove remote image allowlist entries.\n\n## Credits\n\nReported by @pacocartones.","published":"2026-09-30T14:32:03.861Z","modified":"2026-10-21T02:52:26.901150375Z","cvss":null,"epss":null,"cisaKev":null,"exploitsKnown":null,"affectedPackages":[{"ecosystem":"npm","name":"@astrojs/netlify","fixedVersion":"8.2.4"}],"fix":{"url":"https://github.com/withastro/astro/commit/e362d4cf540b27730482455c8fc02efe57d16702","label":"withastro/astro@e362d4c"},"references":[{"type":"WEB","url":"https://github.com/withastro/astro/releases/tag/@astrojs/netlify@8.2.4"},{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/102xxx/CVE-2026-102983.json"},{"type":"ADVISORY","url":"https://github.com/withastro/astro/security/advisories/GHSA-4233-jc72-56c5"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-102983"},{"type":"FIX","url":"https://github.com/withastro/astro/commit/e362d4cf540b27730482455c8fc02efe57d16702"},{"type":"FIX","url":"https://github.com/withastro/astro/pull/17752"},{"type":"PACKAGE","url":"https://github.com/withastro/astro"}],"provenance":{"sources":["OSV.dev","FIRST.org (EPSS)"],"lastVerified":"2026-10-21T02:52:26.901150375Z"}}