{"id":"CVE-2026-84376","aliases":["CLSA-2026-1790175733","CLSA-2026-1790176521","CLSA-2026-1790185871","CLSA-2026-1790457826","CLSA-2026-1790459384","CLSA-2026-1792160952","CLSA-2026-1792161569","CLSA-2026-1792161570","CLSA-2026-1792161571","CLSA-2026-1792161572","CLSA-2026-1792161713","CLSA-2026-1792161714","CLSA-2026-1792161715","CLSA-2026-1792161716","CLSA-2026-1792161717","CLSA-2026-1792161800","CLSA-2026-1792161801","CLSA-2026-1792161802","CLSA-2026-1792161803","CLSA-2026-1792161865","CLSA-2026-1792161866","CLSA-2026-1792161867","CLSA-2026-1792454046","CLSA-2026-1792482295","EUVD-2026-70213","GHSA-26w7-cxv4-gfx2","GHSA-376h-93r7-7g6f"],"status":"published","title":"Astro: Authorization bypass from missing path-segment boundary check when stripping the configured base","description":"Astro is a web framework for content-driven websites. Prior to 7.2.4, Astro stripped a configured non-root base path from request pathnames using a string-prefix check without verifying a path-segment boundary. With base \"/app\", a request to \"/appX/admin\" resolved internally to the protected \"/admin\" route while middleware observed \"/appX/admin\" in context.url.pathname. In applications that authorize base-prefixed routes by inspecting context.url.pathname, an unauthenticated remote attacker could bypass pathname-based middleware authorization and reach protected routes. This issue is fixed in version 7.2.4.","severity":{"version":"4.0","score":6.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N","level":"medium","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-10","score":0.00707,"percentile":0.53734,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-125","CWE-187","CWE-787"],"published":"2026-09-02T16:24:23Z","modified":"2026-10-30T19:46:06Z","fixes":[{"ecosystem":"npm","package":"astro","fixed_in":["7.2.8","7.2.4"],"sources":["ghsa","osv"]},{"ecosystem":"TuxCare:npm","package":"astro","fixed_in":["1.9.2-tuxcare.7","2.10.15-tuxcare.9","3.6.5-tuxcare.9","5.18.1-tuxcare.8","4.16.19-tuxcare.6","5.18.2-tuxcare.2"],"sources":["osv"]},{"ecosystem":"TuxCare:npm","package":"@astrojs/studio","fixed_in":["4.16.19-tuxcare.6"],"sources":["osv"]},{"ecosystem":"TuxCare:npm","package":"@astrojs/internal-helpers","fixed_in":["2.10.15-tuxcare.9","3.6.5-tuxcare.9","5.18.1-tuxcare.8","4.16.19-tuxcare.6"],"sources":["osv"]},{"ecosystem":"TuxCare:npm","package":"@astrojs/prism","fixed_in":["1.9.2-tuxcare.7","2.10.15-tuxcare.9","3.6.5-tuxcare.9","5.18.1-tuxcare.8","4.16.19-tuxcare.6"],"sources":["osv"]},{"ecosystem":"TuxCare:npm","package":"@astrojs/underscore-redirects","fixed_in":["2.10.15-tuxcare.9","3.6.5-tuxcare.9","5.18.1-tuxcare.8","4.16.19-tuxcare.6"],"sources":["osv"]},{"ecosystem":"TuxCare:npm","package":"@astrojs/upgrade","fixed_in":["3.6.5-tuxcare.9","5.18.1-tuxcare.8","4.16.19-tuxcare.6"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"npm","package":"astro","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"7.2.8"}]}]},{"source":"ghsa","ecosystem":"npm","package":"astro","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"7.2.3"},{"fixed":"7.2.4"}]}]},{"source":"osv","ecosystem":"TuxCare:npm","package":"astro","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.9.2-tuxcare.0"},{"fixed":"1.9.2-tuxcare.7"}]}],"versions":["1.9.2","1.9.2-tuxcare.1","1.9.2-tuxcare.2","1.9.2-tuxcare.3","1.9.2-tuxcare.4","1.9.2-tuxcare.5","1.9.2-tuxcare.6"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"astro","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.10.15-tuxcare.0"},{"fixed":"2.10.15-tuxcare.9"}]}],"versions":["2.10.15","2.10.15-tuxcare.1","2.10.15-tuxcare.2","2.10.15-tuxcare.3","2.10.15-tuxcare.4","2.10.15-tuxcare.5","2.10.15-tuxcare.6","2.10.15-tuxcare.7","2.10.15-tuxcare.8"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"astro","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.6.5-tuxcare.0"},{"fixed":"3.6.5-tuxcare.9"}]}],"versions":["3.6.5","3.6.5-tuxcare.1","3.6.5-tuxcare.2","3.6.5-tuxcare.3","3.6.5-tuxcare.4","3.6.5-tuxcare.5","3.6.5-tuxcare.6","3.6.5-tuxcare.7","3.6.5-tuxcare.8"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"astro","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"5.18.1-tuxcare.0"},{"fixed":"5.18.1-tuxcare.8"}]}],"versions":["5.18.1","5.18.1-tuxcare.1","5.18.1-tuxcare.2","5.18.1-tuxcare.3","5.18.1-tuxcare.4","5.18.1-tuxcare.5","5.18.1-tuxcare.6","5.18.1-tuxcare.7"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"astro","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"4.16.19-tuxcare.0"},{"fixed":"4.16.19-tuxcare.6"}]}],"versions":["4.16.19","4.16.19-tuxcare.1","4.16.19-tuxcare.2","4.16.19-tuxcare.3","4.16.19-tuxcare.4","4.16.19-tuxcare.5"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@astrojs/studio","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"4.16.19-tuxcare.0"},{"fixed":"4.16.19-tuxcare.6"}]}],"versions":["4.16.19","4.16.19-tuxcare.1","4.16.19-tuxcare.2","4.16.19-tuxcare.3","4.16.19-tuxcare.5"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@astrojs/internal-helpers","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.10.15-tuxcare.0"},{"fixed":"2.10.15-tuxcare.9"}]}],"versions":["2.10.15","2.10.15-tuxcare.1","2.10.15-tuxcare.2","2.10.15-tuxcare.3","2.10.15-tuxcare.4","2.10.15-tuxcare.5","2.10.15-tuxcare.6","2.10.15-tuxcare.8"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@astrojs/internal-helpers","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.6.5-tuxcare.0"},{"fixed":"3.6.5-tuxcare.9"}]}],"versions":["3.6.5","3.6.5-tuxcare.1","3.6.5-tuxcare.2","3.6.5-tuxcare.3","3.6.5-tuxcare.5","3.6.5-tuxcare.6","3.6.5-tuxcare.7","3.6.5-tuxcare.8"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@astrojs/internal-helpers","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"5.18.1-tuxcare.0"},{"fixed":"5.18.1-tuxcare.8"}]}],"versions":["5.18.1","5.18.1-tuxcare.2","5.18.1-tuxcare.3","5.18.1-tuxcare.4","5.18.1-tuxcare.5","5.18.1-tuxcare.6","5.18.1-tuxcare.7"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@astrojs/internal-helpers","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"4.16.19-tuxcare.0"},{"fixed":"4.16.19-tuxcare.6"}]}],"versions":["4.16.19","4.16.19-tuxcare.1","4.16.19-tuxcare.2","4.16.19-tuxcare.3","4.16.19-tuxcare.5"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@astrojs/prism","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.9.2-tuxcare.0"},{"fixed":"1.9.2-tuxcare.7"}]}],"versions":["1.9.2","1.9.2-tuxcare.1","1.9.2-tuxcare.2","1.9.2-tuxcare.4","1.9.2-tuxcare.5","1.9.2-tuxcare.6"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@astrojs/prism","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.10.15-tuxcare.0"},{"fixed":"2.10.15-tuxcare.9"}]}],"versions":["2.10.15","2.10.15-tuxcare.1","2.10.15-tuxcare.2","2.10.15-tuxcare.3","2.10.15-tuxcare.4","2.10.15-tuxcare.5","2.10.15-tuxcare.6","2.10.15-tuxcare.8"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@astrojs/prism","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.6.5-tuxcare.0"},{"fixed":"3.6.5-tuxcare.9"}]}],"versions":["3.6.5","3.6.5-tuxcare.1","3.6.5-tuxcare.2","3.6.5-tuxcare.3","3.6.5-tuxcare.5","3.6.5-tuxcare.6","3.6.5-tuxcare.7","3.6.5-tuxcare.8"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@astrojs/prism","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"5.18.1-tuxcare.0"},{"fixed":"5.18.1-tuxcare.8"}]}],"versions":["5.18.1","5.18.1-tuxcare.2","5.18.1-tuxcare.3","5.18.1-tuxcare.4","5.18.1-tuxcare.5","5.18.1-tuxcare.6","5.18.1-tuxcare.7"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@astrojs/prism","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"4.16.19-tuxcare.0"},{"fixed":"4.16.19-tuxcare.6"}]}],"versions":["4.16.19","4.16.19-tuxcare.1","4.16.19-tuxcare.2","4.16.19-tuxcare.3","4.16.19-tuxcare.5"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@astrojs/underscore-redirects","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.10.15-tuxcare.0"},{"fixed":"2.10.15-tuxcare.9"}]}],"versions":["2.10.15","2.10.15-tuxcare.1","2.10.15-tuxcare.2","2.10.15-tuxcare.3","2.10.15-tuxcare.4","2.10.15-tuxcare.5","2.10.15-tuxcare.6","2.10.15-tuxcare.8"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@astrojs/underscore-redirects","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.6.5-tuxcare.0"},{"fixed":"3.6.5-tuxcare.9"}]}],"versions":["3.6.5","3.6.5-tuxcare.1","3.6.5-tuxcare.2","3.6.5-tuxcare.3","3.6.5-tuxcare.5","3.6.5-tuxcare.6","3.6.5-tuxcare.7","3.6.5-tuxcare.8"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@astrojs/underscore-redirects","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"5.18.1-tuxcare.0"},{"fixed":"5.18.1-tuxcare.8"}]}],"versions":["5.18.1","5.18.1-tuxcare.2","5.18.1-tuxcare.3","5.18.1-tuxcare.4","5.18.1-tuxcare.5","5.18.1-tuxcare.6","5.18.1-tuxcare.7"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@astrojs/underscore-redirects","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"4.16.19-tuxcare.0"},{"fixed":"4.16.19-tuxcare.6"}]}],"versions":["4.16.19","4.16.19-tuxcare.1","4.16.19-tuxcare.2","4.16.19-tuxcare.3","4.16.19-tuxcare.5"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@astrojs/upgrade","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.6.5-tuxcare.0"},{"fixed":"3.6.5-tuxcare.9"}]}],"versions":["3.6.5","3.6.5-tuxcare.1","3.6.5-tuxcare.2","3.6.5-tuxcare.3","3.6.5-tuxcare.5","3.6.5-tuxcare.6","3.6.5-tuxcare.7","3.6.5-tuxcare.8"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@astrojs/upgrade","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"5.18.1-tuxcare.0"},{"fixed":"5.18.1-tuxcare.8"}]}],"versions":["5.18.1","5.18.1-tuxcare.2","5.18.1-tuxcare.3","5.18.1-tuxcare.4","5.18.1-tuxcare.5","5.18.1-tuxcare.6","5.18.1-tuxcare.7"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@astrojs/upgrade","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"4.16.19-tuxcare.0"},{"fixed":"4.16.19-tuxcare.6"}]}],"versions":["4.16.19","4.16.19-tuxcare.1","4.16.19-tuxcare.2","4.16.19-tuxcare.3","4.16.19-tuxcare.5"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"astro","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"5.18.2-tuxcare.0"},{"fixed":"5.18.2-tuxcare.1"}]}],"versions":["5.18.2"],"bundled":9},{"source":"osv","ecosystem":"TuxCare:npm","package":"astro","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"5.18.2-tuxcare.0"},{"fixed":"5.18.2-tuxcare.2"}]}],"versions":["5.18.2","5.18.2-tuxcare.1"]},{"source":"osv","ecosystem":"npm","package":"astro","ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"7.2.8"}]}]},{"source":"osv","ecosystem":"npm","package":"astro","ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"7.2.4"}]}]}],"products":[{"vendor":"withastro","product":"astro"}],"references":[{"url":"https://github.com/withastro/astro/security/advisories/GHSA-376h-93r7-7g6f","tags":["x_refsource_CONFIRM","advisory","web"]},{"url":"https://github.com/withastro/astro/pull/17701","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/withastro/astro/commit/05763a0884aabb1da78a2749d5bb9d41ae620527","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/withastro/astro/releases/tag/astro@7.2.4","tags":["x_refsource_MISC","web"]},{"url":"https://github.com/strukturag/libheif/security/advisories/GHSA-g89c-p67h-r497","tags":["web"]},{"url":"https://github.com/withastro/astro/security/advisories/GHSA-26w7-cxv4-gfx2","tags":["web"]},{"url":"https://github.com/withastro/astro/commit/ecb4082131490b4fe9a56aa44fda84b54ef8967b","tags":["web"]},{"url":"https://github.com/withastro/astro/releases/tag/astro@7.2.8","tags":["web"]},{"url":"https://github.com/advisories/GHSA-26w7-cxv4-gfx2"},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-84376","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-376h-93r7-7g6f"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/84xxx/CVE-2026-84376.json","tags":["advisory"]},{"url":"https://github.com/withastro/astro","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2026-84376","title":"Astro: Authorization bypass from missing path-segment boundary check when stripping the configured base","description":"Astro is a web framework for content-driven websites. Prior to 7.2.4, Astro stripped a configured non-root base path from request pathnames using a string-prefix check without verifying a path-segment boundary. With base \"/app\", a request to \"/appX/admin\" resolved internally to the protected \"/admin\" route while middleware observed \"/appX/admin\" in context.url.pathname. In applications that authorize base-prefixed routes by inspecting context.url.pathname, an unauthenticated remote attacker could bypass pathname-based middleware authorization and reach protected routes. This issue is fixed in version 7.2.4.","status":"published","published":"2026-09-02T16:24:23.799Z","modified":"2026-09-04T02:44:22.828Z","cvss":[{"version":"4.0","score":6.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N","level":"medium","assessor":"cna"}],"cwes":["CWE-187"],"updated_at":"2026-11-02T14:20:08.391556Z"}],"euvd":[{"id":"EUVD-2026-70213","description":"Astro is a web framework for content-driven websites. Prior to 7.2.4, Astro stripped a configured non-root base path from request pathnames using a string-prefix check without verifying a path-segment boundary. With base \"/app\", a request to \"/appX/admin\" resolved internally to the protected \"/admin\" route while middleware observed \"/appX/admin\" in context.url.pathname. In applications that authorize base-prefixed routes by inspecting context.url.pathname, an unauthenticated remote attacker could bypass pathname-based middleware authorization and reach protected routes. This issue is fixed in version 7.2.4.","status":"published","published":"2026-09-02T16:24:23Z","modified":"2026-09-04T02:44:22Z","cvss":[{"version":"4.0","score":6.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N","level":"medium"}],"updated_at":"2026-11-02T18:01:12.73639Z"}],"ghsa":[{"id":"GHSA-26w7-cxv4-gfx2","title":"Astro: Remote code execution through AVIF image optimization","description":"A vulnerability in `libheif`, used by the default Sharp image service in Astro, can lead to remote code execution when a malicious AVIF image is optimized.\n\nProjects are affected when an attacker can cause Astro to process an untrusted AVIF image.\n\nThe fix was released in Astro 7.2.8, which requires Sharp 0.35.4.","status":"published","published":"2026-09-08T21:26:16Z","modified":"2026-09-08T21:26:18Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"cwes":["CWE-125","CWE-787"],"updated_at":"2026-11-02T14:41:14.764963Z"},{"id":"GHSA-376h-93r7-7g6f","title":"Astro: Authorization bypass from missing path-segment boundary check when stripping the configured base","description":"## Summary\n\nAstro stripped a configured `base` path from request pathnames using a string-prefix check that did not verify a path-segment boundary. With `base: \"/app\"`, a request to `/appX/admin` was treated as being under the base and resolved internally to the `/admin` route, while middleware still observed the public pathname `/appX/admin`. Middleware that authorizes routes by inspecting `context.url.pathname` could therefore be bypassed.\n\n## Impact\n\nAn unauthenticated remote attacker can bypass pathname-based middleware authorization in applications that:\n\n- Configure a non-root `base`.\n- Protect base-prefixed routes in middleware using `context.url.pathname`.\n\nBecause routing and middleware resolved different effective pathnames, a request such as `/appX/admin` (or other single-character extensions like `/app2/admin` or `/app-/admin`) reached the protected `/admin` route without passing the middleware check that guards `/app/admin`. Astro's authentication guide demonstrates protecting routes in middleware via `context.url.pathname`, so this is a reasonable and expected pattern.\n\n## Affected versions\n\n`astro` \u003c= 7.2.3.\n\n## Patches\n\nFixed in `astro` 7.2.4. Base stripping now requires the pathname to equal the base without its trailing slash, or to be followed by a `/`, so a prefix that does not end on a path-segment boundary is no longer treated as being under the base. Routing and `context.url.pathname` now resolve the same pathname.\n\n## Workarounds\n\nUpgrade to `astro` 7.2.4 or later. As a mitigation before upgrading, avoid relying solely on prefix checks of `context.url.pathname` for authorization, or reject requests whose pathname does not begin with the configured base followed by a path-segment boundary.\n\n## Credits\n\nReported by @Ryoga-exe.","status":"published","published":"2026-09-08T21:26:02Z","modified":"2026-09-08T21:26:04Z","cvss":[{"version":"4.0","score":6.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N","level":"medium"}],"cwes":["CWE-187"],"updated_at":"2026-11-02T14:41:14.764963Z"}],"nvd":[{"id":"CVE-2026-84376","description":"Astro is a web framework for content-driven websites. Prior to 7.2.4, Astro stripped a configured non-root base path from request pathnames using a string-prefix check without verifying a path-segment boundary. With base \"/app\", a request to \"/appX/admin\" resolved internally to the protected \"/admin\" route while middleware observed \"/appX/admin\" in context.url.pathname. In applications that authorize base-prefixed routes by inspecting context.url.pathname, an unauthenticated remote attacker could bypass pathname-based middleware authorization and reach protected routes. This issue is fixed in version 7.2.4.","status":"published","published":"2026-09-02T17:18:00.497Z","modified":"2026-09-09T21:04:42.813Z","cvss":[{"version":"4.0","score":6.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/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","level":"medium","assessor":"secondary"}],"cwes":["CWE-187"],"updated_at":"2026-11-02T14:12:43.399612Z"}],"osv":[{"id":"CVE-2026-84376","title":"Astro: Authorization bypass from missing path-segment boundary check when stripping the configured base","description":"Astro is a web framework for content-driven websites. Prior to 7.2.4, Astro stripped a configured non-root base path from request pathnames using a string-prefix check without verifying a path-segment boundary. With base \"/app\", a request to \"/appX/admin\" resolved internally to the protected \"/admin\" route while middleware observed \"/appX/admin\" in context.url.pathname. In applications that authorize base-prefixed routes by inspecting context.url.pathname, an unauthenticated remote attacker could bypass pathname-based middleware authorization and reach protected routes. This issue is fixed in version 7.2.4.","status":"published","published":"2026-09-02T16:24:23.799Z","modified":"2026-10-28T02:30:56.375504978Z","cvss":[{"version":"4.0","score":6.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N","level":"medium"}],"cwes":["CWE-187"],"updated_at":"2026-11-02T15:45:18.482949Z"},{"id":"GHSA-26w7-cxv4-gfx2","title":"Astro: Remote code execution through AVIF image optimization","description":"A vulnerability in `libheif`, used by the default Sharp image service in Astro, can lead to remote code execution when a malicious AVIF image is optimized.\n\nProjects are affected when an attacker can cause Astro to process an untrusted AVIF image.\n\nThe fix was released in Astro 7.2.8, which requires Sharp 0.35.4.","status":"published","published":"2026-09-08T21:26:16Z","modified":"2026-09-08T21:30:05.563003658Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"cwes":["CWE-125","CWE-787"],"updated_at":"2026-11-02T15:46:33.956911Z"},{"id":"GHSA-376h-93r7-7g6f","title":"Astro: Authorization bypass from missing path-segment boundary check when stripping the configured base","description":"## Summary\n\nAstro stripped a configured `base` path from request pathnames using a string-prefix check that did not verify a path-segment boundary. With `base: \"/app\"`, a request to `/appX/admin` was treated as being under the base and resolved internally to the `/admin` route, while middleware still observed the public pathname `/appX/admin`. Middleware that authorizes routes by inspecting `context.url.pathname` could therefore be bypassed.\n\n## Impact\n\nAn unauthenticated remote attacker can bypass pathname-based middleware authorization in applications that:\n\n- Configure a non-root `base`.\n- Protect base-prefixed routes in middleware using `context.url.pathname`.\n\nBecause routing and middleware resolved different effective pathnames, a request such as `/appX/admin` (or other single-character extensions like `/app2/admin` or `/app-/admin`) reached the protected `/admin` route without passing the middleware check that guards `/app/admin`. Astro's authentication guide demonstrates protecting routes in middleware via `context.url.pathname`, so this is a reasonable and expected pattern.\n\n## Affected versions\n\n`astro` \u003c= 7.2.3.\n\n## Patches\n\nFixed in `astro` 7.2.4. Base stripping now requires the pathname to equal the base without its trailing slash, or to be followed by a `/`, so a prefix that does not end on a path-segment boundary is no longer treated as being under the base. Routing and `context.url.pathname` now resolve the same pathname.\n\n## Workarounds\n\nUpgrade to `astro` 7.2.4 or later. As a mitigation before upgrading, avoid relying solely on prefix checks of `context.url.pathname` for authorization, or reject requests whose pathname does not begin with the configured base followed by a path-segment boundary.\n\n## Credits\n\nReported by @Ryoga-exe.","status":"published","published":"2026-09-08T21:26:02Z","modified":"2026-09-08T21:30:04.767703624Z","cvss":[{"version":"4.0","score":6.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N","level":"medium"}],"cwes":["CWE-187"],"updated_at":"2026-11-02T15:46:35.406455Z"},{"id":"CLSA-2026-1790175733","title":"TuxCare security update for astro (1 CVE)","description":"TuxCare rebuilt astro to address 1 CVE. Fixed in 1.9.2-tuxcare.7.","status":"published","published":"2026-09-23T15:02:13Z","modified":"2026-10-30T19:45:12.961565612Z","updated_at":"2026-11-02T15:43:48.28229Z"},{"id":"CLSA-2026-1790176521","title":"TuxCare security update for astro (2 CVEs)","description":"TuxCare rebuilt astro to address 2 CVEs. Fixed in 2.10.15-tuxcare.9.","status":"published","published":"2026-09-23T15:15:21Z","modified":"2026-10-30T19:46:06.505807889Z","updated_at":"2026-11-02T15:43:48.28229Z"},{"id":"CLSA-2026-1790185871","title":"TuxCare security update for astro (2 CVEs)","description":"TuxCare rebuilt astro to address 2 CVEs. Fixed in 3.6.5-tuxcare.9.","status":"published","published":"2026-09-23T17:51:11Z","modified":"2026-10-30T19:46:05.125090846Z","updated_at":"2026-11-02T15:43:48.28229Z"},{"id":"CLSA-2026-1790457826","title":"TuxCare security update for astro (2 CVEs)","description":"TuxCare rebuilt astro to address 2 CVEs. Fixed in 5.18.1-tuxcare.8.","status":"published","published":"2026-09-26T21:23:46Z","modified":"2026-10-30T19:45:13.114544469Z","updated_at":"2026-11-02T15:43:48.65893Z"},{"id":"CLSA-2026-1790459384","title":"TuxCare security update for astro (2 CVEs)","description":"TuxCare rebuilt astro to address 2 CVEs. Fixed in 4.16.19-tuxcare.6.","status":"published","published":"2026-09-26T21:49:44Z","modified":"2026-10-30T19:46:05.822077305Z","updated_at":"2026-11-02T15:43:48.65893Z"},{"id":"CLSA-2026-1792160952","title":"TuxCare security update for @astrojs/studio (2 CVEs)","description":"TuxCare rebuilt @astrojs/studio to address 2 CVEs. Fixed in 4.16.19-tuxcare.6.","status":"published","published":"2026-10-16T14:29:08Z","modified":"2026-10-16T16:30:36.811067265Z","updated_at":"2026-11-02T15:43:50.949147Z"},{"id":"CLSA-2026-1792161569","title":"TuxCare security update for @astrojs/internal-helpers (2 CVEs)","description":"TuxCare rebuilt @astrojs/internal-helpers to address 2 CVEs. Fixed in 2.10.15-tuxcare.9.","status":"published","published":"2026-10-16T14:39:29Z","modified":"2026-10-16T16:31:11.751284445Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161570","title":"TuxCare security update for @astrojs/internal-helpers (2 CVEs)","description":"TuxCare rebuilt @astrojs/internal-helpers to address 2 CVEs. Fixed in 3.6.5-tuxcare.9.","status":"published","published":"2026-10-16T14:39:30Z","modified":"2026-10-16T16:31:11.743494173Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161571","title":"TuxCare security update for @astrojs/internal-helpers (2 CVEs)","description":"TuxCare rebuilt @astrojs/internal-helpers to address 2 CVEs. Fixed in 5.18.1-tuxcare.8.","status":"published","published":"2026-10-16T14:39:31Z","modified":"2026-10-16T16:30:31.967723752Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161572","title":"TuxCare security update for @astrojs/internal-helpers (2 CVEs)","description":"TuxCare rebuilt @astrojs/internal-helpers to address 2 CVEs. Fixed in 4.16.19-tuxcare.6.","status":"published","published":"2026-10-16T14:39:32Z","modified":"2026-10-16T16:30:31.969937634Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161713","title":"TuxCare security update for @astrojs/prism (1 CVE)","description":"TuxCare rebuilt @astrojs/prism to address 1 CVE. Fixed in 1.9.2-tuxcare.7.","status":"published","published":"2026-10-16T14:41:53Z","modified":"2026-10-16T16:30:23.856144312Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161714","title":"TuxCare security update for @astrojs/prism (2 CVEs)","description":"TuxCare rebuilt @astrojs/prism to address 2 CVEs. Fixed in 2.10.15-tuxcare.9.","status":"published","published":"2026-10-16T14:41:54Z","modified":"2026-10-16T16:31:07.771879401Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161715","title":"TuxCare security update for @astrojs/prism (2 CVEs)","description":"TuxCare rebuilt @astrojs/prism to address 2 CVEs. Fixed in 3.6.5-tuxcare.9.","status":"published","published":"2026-10-16T14:41:55Z","modified":"2026-10-16T16:31:07.772058819Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161716","title":"TuxCare security update for @astrojs/prism (2 CVEs)","description":"TuxCare rebuilt @astrojs/prism to address 2 CVEs. Fixed in 5.18.1-tuxcare.8.","status":"published","published":"2026-10-16T14:41:56Z","modified":"2026-10-16T16:31:07.821518418Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161717","title":"TuxCare security update for @astrojs/prism (2 CVEs)","description":"TuxCare rebuilt @astrojs/prism to address 2 CVEs. Fixed in 4.16.19-tuxcare.6.","status":"published","published":"2026-10-16T14:41:57Z","modified":"2026-10-16T16:31:07.826728079Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161800","title":"TuxCare security update for @astrojs/underscore-redirects (2 CVEs)","description":"TuxCare rebuilt @astrojs/underscore-redirects to address 2 CVEs. Fixed in 2.10.15-tuxcare.9.","status":"published","published":"2026-10-16T14:43:20Z","modified":"2026-10-16T16:30:29.173689455Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161801","title":"TuxCare security update for @astrojs/underscore-redirects (2 CVEs)","description":"TuxCare rebuilt @astrojs/underscore-redirects to address 2 CVEs. Fixed in 3.6.5-tuxcare.9.","status":"published","published":"2026-10-16T14:43:21Z","modified":"2026-10-16T16:30:33.643308077Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161802","title":"TuxCare security update for @astrojs/underscore-redirects (2 CVEs)","description":"TuxCare rebuilt @astrojs/underscore-redirects to address 2 CVEs. Fixed in 5.18.1-tuxcare.8.","status":"published","published":"2026-10-16T14:43:22Z","modified":"2026-10-16T16:30:34.045420039Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161803","title":"TuxCare security update for @astrojs/underscore-redirects (2 CVEs)","description":"TuxCare rebuilt @astrojs/underscore-redirects to address 2 CVEs. Fixed in 4.16.19-tuxcare.6.","status":"published","published":"2026-10-16T14:43:23Z","modified":"2026-10-16T16:30:32.828368747Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161865","title":"TuxCare security update for @astrojs/upgrade (2 CVEs)","description":"TuxCare rebuilt @astrojs/upgrade to address 2 CVEs. Fixed in 3.6.5-tuxcare.9.","status":"published","published":"2026-10-16T14:44:25Z","modified":"2026-10-16T16:31:17.389289768Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161866","title":"TuxCare security update for @astrojs/upgrade (2 CVEs)","description":"TuxCare rebuilt @astrojs/upgrade to address 2 CVEs. Fixed in 5.18.1-tuxcare.8.","status":"published","published":"2026-10-16T14:44:26Z","modified":"2026-10-16T16:31:16.216789682Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161867","title":"TuxCare security update for @astrojs/upgrade (2 CVEs)","description":"TuxCare rebuilt @astrojs/upgrade to address 2 CVEs. Fixed in 4.16.19-tuxcare.6.","status":"published","published":"2026-10-16T14:44:27Z","modified":"2026-10-16T16:31:16.367562464Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792454046","title":"TuxCare security update for astro (9 CVEs)","description":"TuxCare rebuilt astro to address 9 CVEs. Fixed in 5.18.2-tuxcare.1.","status":"published","published":"2026-10-19T23:54:06Z","modified":"2026-10-20T01:45:16.00100881Z","updated_at":"2026-11-02T15:43:54.378946Z"},{"id":"CLSA-2026-1792482295","title":"TuxCare security update for astro (1 CVE)","description":"TuxCare rebuilt astro to address 1 CVE. Fixed in 5.18.2-tuxcare.2.","status":"published","published":"2026-10-20T07:44:55Z","modified":"2026-10-20T13:45:07.766305447Z","updated_at":"2026-11-02T15:43:54.378946Z"}]}}
