{"id":"CVE-2025-55303","aliases":["GHSA-xf8x-j4p2-f749"],"url":"https://o3.security/vulnerability/CVE-2025-55303","summary":"Unauthorized third-party images in Astro’s _image endpoint","details":"### Summary\n\nIn affected versions of `astro`, the image optimization endpoint in projects deployed with on-demand rendering allows images 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 `astro` allows an attacker to bypass the third-party domain restrictions by using a protocol-relative URL as the image source, e.g. `/_image?href=//example.com/image.png`.\n\n### Proof of Concept\n\n1. Create a new minimal Astro project (`astro@5.13.0`).\n\n2. Configure it to use the Node adapter (`@astrojs/node@9.1.0` — newer versions are not impacted):\n\n   ```js\n   // astro.config.mjs\n   import { defineConfig } from 'astro/config';\n   import node from '@astrojs/node';\n\n   export default defineConfig({\n   \tadapter: node({ mode: 'standalone' }),\n   });\n   ```\n\n3. Build the site by running `astro build`.\n\n4. Run the server, e.g. with `astro preview`.\n\n5. Append `/_image?href=//placehold.co/600x400` to the preview URL, e.g. <http://localhost:4321/_image?href=//placehold.co/600x400>\n\n6. The site will serve the image from the unauthorized `placehold.co` origin.\n\n### Impact\n\nAllows a non-authorized third-party to create URLs on an impacted site’s origin that serve unauthorized image content.\nIn the case of SVG images, this could include the risk of cross-site scripting (XSS) if a user followed a link to a maliciously crafted SVG.","published":"2025-08-19T18:08:00.244Z","modified":"2026-08-12T03:51:48.071461708Z","cvss":null,"epss":{"score":0.00637,"percentile":0.47763,"asOf":"2026-08-24"},"cisaKev":null,"exploitsKnown":0,"affectedPackages":[{"ecosystem":"npm","name":"astro","fixedVersion":"5.13.2"},{"ecosystem":"npm","name":"@astrojs/node","fixedVersion":"9.1.1"},{"ecosystem":"npm","name":"astro","fixedVersion":"4.16.19"}],"fix":{"url":"https://github.com/withastro/astro/commit/4d16de7f95db5d1ec1ce88610d2a95e606e83820","label":"withastro/astro@4d16de7"},"references":[{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2025/55xxx/CVE-2025-55303.json"},{"type":"ADVISORY","url":"https://github.com/withastro/astro/security/advisories/GHSA-xf8x-j4p2-f749"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2025-55303"},{"type":"FIX","url":"https://github.com/withastro/astro/commit/4d16de7f95db5d1ec1ce88610d2a95e606e83820"},{"type":"PACKAGE","url":"https://github.com/withastro/astro"}],"provenance":{"sources":["OSV.dev","FIRST.org (EPSS)"],"lastVerified":"2026-08-12T03:51:48.071461708Z"}}