CVE-2025-55303
Unauthorized third-party images in Astro’s _image endpoint
Astro is a web framework for content-driven websites. In versions of astro before 5.13.2 and 4.16.18, the image optimization endpoint in projects deployed with on-demand rendering allows images from unauthorized third-party domains to be served. On-demand rendered sites built with Astro include an /_image endpoint which returns optimized versions of images. 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. This vulnerability is fixed in 5.13.2 and 4.16.18.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- None
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
6.9
Unauthorized third-party images in Astro’s _image endpoint
Astro is a web framework for content-driven websites. In versions of astro before 5.13.2 and 4.16.18, the image optimization endpoint in projects deployed with on-demand rendering allows images from unauthorized third-party domains to be served. On-demand rendered sites built with Astro include an /_image endpoint which returns optimized versions of images. 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. This vulnerability is fixed in 5.13.2 and 4.16.18.
- Record
CVE-2025-55303- CVSS 4.0
- 6.9 Medium
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N - Weakness
- CWE-79, CWE-115
- Updated
- 2026-11-02
EUVDEUVD-2025-25235
6.9
Astro is a web framework for content-driven websites. In versions of astro before 5.13.2 and 4.16.18, the image optimization endpoint in projects deployed with on-demand rendering allows images from unauthorized third-party domains to be served. On-demand rendered sites built with Astro include an /_image endpoint which returns optimized versions of images. 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. This vulnerability is fixed in 5.13.2 and 4.16.18.
- Record
EUVD-2025-25235- CVSS 4.0
- 6.9 Medium
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-xf8x-j4p2-f749
6.4
Astro allows unauthorized third-party images in _image endpoint
Summary
In 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.
Details
On-demand rendered sites built with Astro include an /_image endpoint which returns optimized versions of images.
The /_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 or image.remotePatterns options).
However, 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.
Proof of Concept
-
Create a new minimal Astro project (
[email protected]). -
Configure it to use the Node adapter (
@astrojs/[email protected]— newer versions are not impacted):// astro.config.mjs import { defineConfig } from 'astro/config'; import node from '@astrojs/node'; export default defineConfig({ adapter: node({ mode: 'standalone' }), }); -
Build the site by running
astro build. -
Run the server, e.g. with
astro preview. -
Append
/_image?href=//placehold.co/600x400to the preview URL, e.g. http://localhost:4321/_image?href=//placehold.co/600x400 -
The site will serve the image from the unauthorized
placehold.coorigin.
Impact
Allows a non-authorized third-party to create URLs on an impacted site’s origin that serve unauthorized image content. In 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.
- Record
GHSA-xf8x-j4p2-f749- CVSS 4.0
- 6.4 Medium
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N - CVSS 3.1
- 6.1 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N - Weakness
- CWE-79
- Updated
- 2026-11-02
NVD
6.9
Astro is a web framework for content-driven websites. In versions of astro before 5.13.2 and 4.16.18, the image optimization endpoint in projects deployed with on-demand rendering allows images from unauthorized third-party domains to be served. On-demand rendered sites built with Astro include an /_image endpoint which returns optimized versions of images. 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. This vulnerability is fixed in 5.13.2 and 4.16.18.
- Record
CVE-2025-55303- CVSS 4.0
- 6.9 Medium
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - CVSS 3.1
- 6.1 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N - Weakness
- CWE-79, CWE-115
- Updated
- 2026-11-02
OSV
6.9
Unauthorized third-party images in Astro’s _image endpoint
Astro is a web framework for content-driven websites. In versions of astro before 5.13.2 and 4.16.18, the image optimization endpoint in projects deployed with on-demand rendering allows images from unauthorized third-party domains to be served. On-demand rendered sites built with Astro include an /_image endpoint which returns optimized versions of images. 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. This vulnerability is fixed in 5.13.2 and 4.16.18.
- Record
CVE-2025-55303- CVSS 4.0
- 6.9 Medium
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N - Weakness
- CWE-115, CWE-79
- Updated
- 2026-11-02
OSVGHSA-xf8x-j4p2-f749
6.4
Astro allows unauthorized third-party images in _image endpoint
Summary
In 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.
Details
On-demand rendered sites built with Astro include an /_image endpoint which returns optimized versions of images.
The /_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 or image.remotePatterns options).
However, 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.
Proof of Concept
-
Create a new minimal Astro project (
[email protected]). -
Configure it to use the Node adapter (
@astrojs/[email protected]— newer versions are not impacted):// astro.config.mjs import { defineConfig } from 'astro/config'; import node from '@astrojs/node'; export default defineConfig({ adapter: node({ mode: 'standalone' }), }); -
Build the site by running
astro build. -
Run the server, e.g. with
astro preview. -
Append
/_image?href=//placehold.co/600x400to the preview URL, e.g. http://localhost:4321/_image?href=//placehold.co/600x400 -
The site will serve the image from the unauthorized
placehold.coorigin.
Impact
Allows a non-authorized third-party to create URLs on an impacted site’s origin that serve unauthorized image content. In 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.
- Record
GHSA-xf8x-j4p2-f749- CVSS 4.0
- 6.4 Medium
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N - CVSS 3.1
- 6.1 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N - Weakness
- CWE-79
- Updated
- 2026-11-02
Show 17 moreShow less
OSVCLSA-2026-1777855417 No score
TuxCare security update for astro (10 CVEs)
TuxCare rebuilt astro to address 10 CVEs. Fixed in 1.9.2-tuxcare.1.
- Record
CLSA-2026-1777855417- Updated
- 2026-11-02
OSVCLSA-2026-1777855422 No score
TuxCare security update for astro (10 CVEs)
TuxCare rebuilt astro to address 10 CVEs. Fixed in 0.26.1-tuxcare.1.
- Record
CLSA-2026-1777855422- Updated
- 2026-11-02
OSVCLSA-2026-1786365605 No score
TuxCare security update for 5 packages (4 CVEs)
TuxCare rebuilt 5 packages to address 4 CVEs. Fixed in 4.16.19-tuxcare.3.
- Record
CLSA-2026-1786365605- Updated
- 2026-11-02
OSVCLSA-2026-1792160941 No score
TuxCare security update for @astrojs/internal-helpers (4 CVEs)
TuxCare rebuilt @astrojs/internal-helpers to address 4 CVEs. Fixed in 4.16.19-tuxcare.3.
- Record
CLSA-2026-1792160941- Updated
- 2026-11-02
OSVCLSA-2026-1792161544 No score
TuxCare security update for @astrojs/internal-helpers (11 CVEs)
TuxCare rebuilt @astrojs/internal-helpers to address 11 CVEs. Fixed in 2.10.15-tuxcare.1.
- Record
CLSA-2026-1792161544- Updated
- 2026-11-02
OSVCLSA-2026-1792161546 No score
TuxCare security update for @astrojs/internal-helpers (13 CVEs)
TuxCare rebuilt @astrojs/internal-helpers to address 13 CVEs. Fixed in 3.6.5-tuxcare.1.
- Record
CLSA-2026-1792161546- Updated
- 2026-11-02
OSVCLSA-2026-1792161681 No score
TuxCare security update for @astrojs/prism (10 CVEs)
TuxCare rebuilt @astrojs/prism to address 10 CVEs. Fixed in 1.9.2-tuxcare.1.
- Record
CLSA-2026-1792161681- Updated
- 2026-11-02
OSVCLSA-2026-1792161682 No score
TuxCare security update for @astrojs/prism (10 CVEs)
TuxCare rebuilt @astrojs/prism to address 10 CVEs. Fixed in 0.26.1-tuxcare.1.
- Record
CLSA-2026-1792161682- Updated
- 2026-11-02
OSVCLSA-2026-1792161683 No score
TuxCare security update for @astrojs/prism (11 CVEs)
TuxCare rebuilt @astrojs/prism to address 11 CVEs. Fixed in 2.10.15-tuxcare.1.
- Record
CLSA-2026-1792161683- Updated
- 2026-11-02
OSVCLSA-2026-1792161686 No score
TuxCare security update for @astrojs/prism (13 CVEs)
TuxCare rebuilt @astrojs/prism to address 13 CVEs. Fixed in 3.6.5-tuxcare.1.
- Record
CLSA-2026-1792161686- Updated
- 2026-11-02
OSVCLSA-2026-1792161702 No score
TuxCare security update for @astrojs/prism (4 CVEs)
TuxCare rebuilt @astrojs/prism to address 4 CVEs. Fixed in 4.16.19-tuxcare.3.
- Record
CLSA-2026-1792161702- Updated
- 2026-11-02
OSVCLSA-2026-1792161761 No score
TuxCare security update for @astrojs/studio (4 CVEs)
TuxCare rebuilt @astrojs/studio to address 4 CVEs. Fixed in 4.16.19-tuxcare.3.
- Record
CLSA-2026-1792161761- Updated
- 2026-11-02
OSVCLSA-2026-1792161775 No score
TuxCare security update for @astrojs/underscore-redirects (11 CVEs)
TuxCare rebuilt @astrojs/underscore-redirects to address 11 CVEs. Fixed in 2.10.15-tuxcare.1.
- Record
CLSA-2026-1792161775- Updated
- 2026-11-02
OSVCLSA-2026-1792161777 No score
TuxCare security update for @astrojs/underscore-redirects (13 CVEs)
TuxCare rebuilt @astrojs/underscore-redirects to address 13 CVEs. Fixed in 3.6.5-tuxcare.1.
- Record
CLSA-2026-1792161777- Updated
- 2026-11-02
OSVCLSA-2026-1792161790 No score
TuxCare security update for @astrojs/underscore-redirects (4 CVEs)
TuxCare rebuilt @astrojs/underscore-redirects to address 4 CVEs. Fixed in 4.16.19-tuxcare.3.
- Record
CLSA-2026-1792161790- Updated
- 2026-11-02
OSVCLSA-2026-1792161848 No score
TuxCare security update for @astrojs/upgrade (13 CVEs)
TuxCare rebuilt @astrojs/upgrade to address 13 CVEs. Fixed in 3.6.5-tuxcare.1.
- Record
CLSA-2026-1792161848- Updated
- 2026-11-02
OSVCLSA-2026-1792161857 No score
TuxCare security update for @astrojs/upgrade (4 CVEs)
TuxCare rebuilt @astrojs/upgrade to address 4 CVEs. Fixed in 4.16.19-tuxcare.3.
- Record
CLSA-2026-1792161857- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
@astrojs/nodenpm |
through 9.1.0 | 9.1.1 |
astronpm |
through 4.16.18 | 4.16.19 |
astronpm |
5.0.0-alpha.0 up to 5.13.2 | 5.13.2 |
astroTuxCare:npm |
1.9.2-tuxcare.0 up to 1.9.2-tuxcare.1, plus listed versions 1.9.2 |
1.9.2-tuxcare.1 |
astroTuxCare:npm |
0.26.1-tuxcare.0 up to 0.26.1-tuxcare.1, plus listed versions 0.26.1 |
0.26.1-tuxcare.1 |
@astrojs/dbTuxCare:npm |
4.16.19-tuxcare.0 up to 4.16.19-tuxcare.3, plus listed versions 4.16.194.16.19-tuxcare.14.16.19-tuxcare.2 |
4.16.19-tuxcare.3 |
@astrojs/rssTuxCare:npm |
4.16.19-tuxcare.0 up to 4.16.19-tuxcare.3, plus listed versions 4.16.194.16.19-tuxcare.14.16.19-tuxcare.2 |
4.16.19-tuxcare.3 |
@astrojs/telemetryTuxCare:npm |
4.16.19-tuxcare.0 up to 4.16.19-tuxcare.3, plus listed versions 4.16.194.16.19-tuxcare.14.16.19-tuxcare.2 |
4.16.19-tuxcare.3 |
astroTuxCare:npm |
4.16.19-tuxcare.0 up to 4.16.19-tuxcare.3, plus listed versions 4.16.194.16.19-tuxcare.14.16.19-tuxcare.2 |
4.16.19-tuxcare.3 |
create-astroTuxCare:npm |
4.16.19-tuxcare.0 up to 4.16.19-tuxcare.3, plus listed versions 4.16.194.16.19-tuxcare.14.16.19-tuxcare.2 |
4.16.19-tuxcare.3 |
Show 16 moreShow less
| Package | Affected | Fixed |
|---|---|---|
@astrojs/internal-helpersTuxCare:npm |
4.16.19-tuxcare.0 up to 4.16.19-tuxcare.3, plus listed versions 4.16.194.16.19-tuxcare.14.16.19-tuxcare.2 |
4.16.19-tuxcare.3 |
@astrojs/internal-helpersTuxCare:npm |
2.10.15-tuxcare.0 up to 2.10.15-tuxcare.1, plus listed versions 2.10.15 |
2.10.15-tuxcare.1 |
@astrojs/internal-helpersTuxCare:npm |
3.6.5-tuxcare.0 up to 3.6.5-tuxcare.1, plus listed versions 3.6.5 |
3.6.5-tuxcare.1 |
@astrojs/prismTuxCare:npm |
1.9.2-tuxcare.0 up to 1.9.2-tuxcare.1, plus listed versions 1.9.2 |
1.9.2-tuxcare.1 |
@astrojs/prismTuxCare:npm |
0.26.1-tuxcare.0 up to 0.26.1-tuxcare.1, plus listed versions 0.26.1 |
0.26.1-tuxcare.1 |
@astrojs/prismTuxCare:npm |
2.10.15-tuxcare.0 up to 2.10.15-tuxcare.1, plus listed versions 2.10.15 |
2.10.15-tuxcare.1 |
@astrojs/prismTuxCare:npm |
3.6.5-tuxcare.0 up to 3.6.5-tuxcare.1, plus listed versions 3.6.5 |
3.6.5-tuxcare.1 |
@astrojs/prismTuxCare:npm |
4.16.19-tuxcare.0 up to 4.16.19-tuxcare.3, plus listed versions 4.16.194.16.19-tuxcare.14.16.19-tuxcare.2 |
4.16.19-tuxcare.3 |
@astrojs/studioTuxCare:npm |
4.16.19-tuxcare.0 up to 4.16.19-tuxcare.3, plus listed versions 4.16.194.16.19-tuxcare.14.16.19-tuxcare.2 |
4.16.19-tuxcare.3 |
@astrojs/underscore-redirectsTuxCare:npm |
2.10.15-tuxcare.0 up to 2.10.15-tuxcare.1, plus listed versions 2.10.15 |
2.10.15-tuxcare.1 |
@astrojs/underscore-redirectsTuxCare:npm |
3.6.5-tuxcare.0 up to 3.6.5-tuxcare.1, plus listed versions 3.6.5 |
3.6.5-tuxcare.1 |
@astrojs/underscore-redirectsTuxCare:npm |
4.16.19-tuxcare.0 up to 4.16.19-tuxcare.3, plus listed versions 4.16.194.16.19-tuxcare.14.16.19-tuxcare.2 |
4.16.19-tuxcare.3 |
@astrojs/upgradeTuxCare:npm |
3.6.5-tuxcare.0 up to 3.6.5-tuxcare.1, plus listed versions 3.6.5 |
3.6.5-tuxcare.1 |
@astrojs/upgradeTuxCare:npm |
4.16.19-tuxcare.0 up to 4.16.19-tuxcare.3, plus listed versions 4.16.194.16.19-tuxcare.14.16.19-tuxcare.2 |
4.16.19-tuxcare.3 |
@astrojs/nodenpm |
before 9.1.1 | 9.1.1 |
astronpm |
before 4.16.19 | 4.16.19 |
Public exploits
Links only. Every CVE stores no exploit code.
| Source | Link | Date |
|---|---|---|
| Nuclei | Astro - Unauthorized Third-Party Image Access |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, Nuclei, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2025-55303 is a medium vulnerability (CVSS 6.9) in Astro, published August 19, 2025. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.64%, the 50th percentile. Fixed in @astrojs/node 9.1.1.
References
github.com/withastro/astro/security/advisories/GHSA-xf8x-j4p2-f749
github.com/withastro/astro/commit/4d16de7f95db5d1ec1ce88610d2a95e606e83820
nvd.nist.gov/vuln/detail/CVE-2025-55303
github.com/advisories/GHSA-xf8x-j4p2-f749
github.com/CVEProject/cvelistV5/tree/main/cves/2025/55xxx/CVE-2025-55303.json
github.com/withastro/astro