{"id":"GHSA-qpr4-c339-7vq8","summary":"Server-Side Request Forgery via /_image endpoint in Astro Cloudflare adapter","details":"### Summary\n\nWhen using Astro's Cloudflare adapter (`@astrojs/cloudflare`) configured with `output: 'server'` while using the default `imageService: 'compile'`, the generated image optimization endpoint doesn't check the URLs it receives, allowing content from unauthorized third-party domains to be served.\n\n### Details\n\nOn-demand rendered sites built with Astro include an `/_image` endpoint, which returns optimized versions of images.\n\nThe `/_image` endpoint is restricted to processing local images bundled with the site and also supports remote images from domains the site developer has manually authorized (using the [`image.domains`](https://docs.astro.build/en/reference/configuration-reference/#imagedomains) or [`image.remotePatterns`](https://docs.astro.build/en/reference/configuration-reference/#imageremotepatterns) options).\n\nHowever, a bug in impacted versions of the `@astrojs/cloudflare` adapter for deployment on Cloudflare’s infrastructure, allows an attacker to bypass the third-party domain restrictions and serve any content from the vulnerable origin.\n\n### PoC\n\n1. Create a new minimal Astro project (`astro@5.13.3`)\n\n2. Configure it to use the Cloudflare adapter (`@astrojs/cloudflare@12.6.5`) and server output:\n\n   ```js\n   // astro.config.mjs\n   import { defineConfig } from 'astro/config';\n   import cloudflare from '@astrojs/cloudflare';\n\n   export default defineConfig({\n     output: 'server',\n     adapter: cloudflare(),\n   });\n   ```\n\n3. Deploy to Cloudflare Pages or Workers\n\n4. Append `/_image?href=https://placehold.co/600x400` to the deployment URL.\n\n7. This will serve the placeholder image from the unauthorised `placehold.co` domain.\n\n### Impact\n\nAllows a non-authorized third-party to create URLs on an impacted site’s origin that serve unauthorized content. This includes the risk of server-side request forgery (SSRF) and by extension cross-site scripting (XSS) if a user follows a link to a maliciously crafted URL.","aliases":["CVE-2025-58179"],"modified":"2025-09-05T16:10:42Z","published":"2025-09-04T19:24:11Z","database_specific":{"severity":"HIGH","github_reviewed":true,"github_reviewed_at":"2025-09-04T19:24:11Z","nvd_published_at":"2025-09-05T00:15:32Z","cwe_ids":["CWE-918"]},"references":[{"type":"WEB","url":"https://github.com/withastro/astro/security/advisories/GHSA-qpr4-c339-7vq8"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2025-58179"},{"type":"WEB","url":"https://github.com/withastro/astro/commit/9ecf3598e2b29dd74614328fde3047ea90e67252"},{"type":"PACKAGE","url":"https://github.com/withastro/astro"}],"affected":[{"package":{"name":"@astrojs/cloudflare","ecosystem":"npm","purl":"pkg:npm/%40astrojs/cloudflare"},"ranges":[{"type":"SEMVER","events":[{"introduced":"11.0.3"},{"fixed":"12.6.6"}]}],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2025/09/GHSA-qpr4-c339-7vq8/GHSA-qpr4-c339-7vq8.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N"}]}