{"id":"CVE-2026-117183","kind":"vulnerability","aliases":["CVE-2026-117183"],"related":[],"title":"astro-notion-blog: path traversal in FeaturedImage lets attackers read and overwrite server files","description":"A path traversal vulnerability in the FeaturedImage component of astro-notion-blog 0.13.0 allows attackers to escape the intended directory, as well as read and overwrite files on the server via a crafted URL.","summary":"astro-notion-blog (otoyo template, latest 0.13.0) downloads Notion FeaturedImage files at build time and writes them using the remote filename without keeping the path inside ./public/notion/. A Notion editor can overwrite project files and, per a public PoC write-up, get code execution on the build host. No fixed release exists as of 2026-10-30.","severity":"high","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"astro-notion-blog","fixed":[],"affected":"<= 0.13.0","ecosystem":"npm"}],"ecosystems":[],"tags":["astro","astro-notion-blog","build-time","ci","node","notion","package","self-hosted"],"not_affected_if":["different-version","no-external-featured-image","static-hosting-only-no-build-from-untrusted-notion","trusted-notion-editors"],"how_to_check":"- Check package.json / your fork for astro-notion-blog 0.13.0 or earlier (it is a template, so compare your src/lib/notion/client.ts)\n- Open downloadFile() in src/lib/notion/client.ts: if it appends the URL-decoded last path segment to ./public/notion/ with no basename/resolve check, you are exposed\n- Review who has edit access to the Notion database","fix":"No fixed version published as of 2026-10-30 (0.13.0 is the latest release). Interim, from the PoC write-up (not vendor): in downloadFile() use a random filename with the original extension, or take the basename, reject ./.. and null bytes, resolve the path and confirm it stays inside public/notion; restrict Notion edit access; run builds without secrets.","status":"open","published_at":"2026-10-30T16:17:41+00:00","first_seen_at":"2026-10-30T16:31:25+00:00","triaged_at":"2026-10-30T16:32:33+00:00","updated_at":"2026-10-30T16:34:27+00:00","category":"package","confidence":0.6,"triage":{"at":"2026-10-30T16:32:33Z","model":"claude-haiku-5-5","output":{"fix":"unknown","reach":"internet","title":"astro-notion-blog: path traversal in FeaturedImage lets attackers read and overwrite server files","impact":"high","summary":"The FeaturedImage component of astro-notion-blog 0.13.0 fails to keep file paths inside its intended directory. A crafted URL lets an attacker read and overwrite files on the server.","audience":"businesses","category":"package","nicknames":[],"who_cares":["astro-notion-blog","astro","node","self-hosted"],"confidence":0.6,"fix_status":"unknown","needs_auth":"unknown","worst_case":"Attacker reads and overwrites arbitrary files on the server","analyst_note":"Confirm the fixed version and whether the flaw needs a default or special configuration; check the NVD entry and the astro-notion-blog repository advisory.","how_to_check":"- Check the installed version with `npm ls astro-notion-blog` in the blog project\n- Look for `astro-notion-blog` at version `0.13.0` in `package.json` or `package-lock.json`","plain_action":"","needs_analyst":true,"not_affected_if":["different-version"],"who_is_affected":"Sites built with astro-notion-blog 0.13.0 that render the FeaturedImage component are exposed, because the crafted URL reaches the file handling path directly. Sites on other versions, or sites that do not use this component, are not described as affected. The sources do not state whether a default configuration is exposed or whether authentication is needed.","user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"high"},"cost_usd":0.000685,"input_tokens":4096,"output_tokens":550,"severity_before":"unknown"},"analyst_status":"done","analyst_note":"Confirm the fixed version and whether the flaw needs a default or special configuration; check the NVD entry and the astro-notion-blog repository advisory.","search":"'-10':98B '-117183':18A,21A '-2026':17A,20A '-30':99B '/public/notion':68B '0.13.0':48B,113C '2026':97B 'allow':114C 'astro':2A,23A,26B,28B,42B,110C 'astro-notion-blog':1A,22A,27B,41B,109C 'attack':10A,115C 'blog':4A,25A,30B,44B,112C 'build':32B,54B,89B 'build-tim':31B 'ci':34B 'code':85B 'compon':107C 'craft':133C 'cve':16A,19A 'directori':120C 'download':49B 'editor':71B 'escap':117C 'execut':86B 'exist':94B 'featuredimag':8A,51B,106C 'file':15A,52B,75B,127C 'filenam':62B 'fix':92B 'get':84B 'host':40B,90B 'insid':67B 'intend':119C 'keep':64B 'latest':47B 'let':9A 'node':35B 'notion':3A,24A,29B,36B,43B,50B,70B,111C 'otoyo':45B 'overwrit':13A,73B,126C 'packag':37B 'path':5A,66B,101C 'per':77B 'poc':80B 'project':74B 'public':79B 'read':11A,124C 'releas':93B 'remot':61B 'self':39B 'self-host':38B 'server':14A,130C 'templat':46B 'time':33B,55B 'travers':6A,102C 'url':134C 'use':59B 'via':131C 'vulner':103C 'well':122C 'without':63B 'write':57B,82B 'write-up':81B","nicknames":[],"mitigations":[],"who_affected":"Sites built from otoyo/astro-notion-blog at 0.13.0 (the write-up says 0.6.1 to 0.13.0) that use the FeaturedImage downloader, where anyone other than you can edit the Notion database or supply image URLs. The impact lands on the machine or CI runner that runs the build, including its secrets. If only trusted people edit your Notion content, the risk is much lower; this is a build-time flaw, not a request to the live site.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"none","audience":"developers","plain_action":null,"first_public_at":"2026-10-30T16:17:41+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":1,"sources":[{"source":"nvd","external_id":"CVE-2026-117183","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-117183","severity":null,"published_at":"2026-10-30T16:17:41+00:00","modified_at":"2026-10-30T16:17:41+00:00","first_seen_at":"2026-10-30T16:31:25+00:00","fetched_at":"2026-10-30T16:31:25+00:00","note":null},{"source":"analyst","external_id":"CVE-2026-117183:1175","url":null,"severity":null,"published_at":"2026-10-30T16:34:27+00:00","modified_at":"2026-10-30T16:34:27+00:00","first_seen_at":"2026-10-30T16:34:27+00:00","fetched_at":"2026-10-30T16:34:27+00:00","note":"Primary NVD page unreadable; no maintainer advisory found. Only source is a third-party PoC write-up (CVE listed RESERVED) claiming build-time RCE needing Notion edit access, 0.6.1-0.13.0. Releases page shows no fix. Nothing verified. Description 'crafted URL read/overwrite' is more precisely a build-time write; read claim unconfirmed."}],"documents":[{"id":24661,"url":"https://github.com/Primandito/CVE-2026-117183","title":"Primandito: build-time RCE via FeaturedImage path traversal in astro-notion-blog 0.13.0","kind":"poc","source":"analyst","publisher":null,"text":"Third-party write-up. Preconditions: attacker has Notion DB edit access; site uses external FeaturedImage + featured-image-downloader integration; build host reaches attacker URL. downloadFile() in src/lib/notion/client.ts URL-decodes last URL segment and concatenates to ./public/notion/ without containment check; overwrites e.g. src/pages file, executed at same build. Claims 0.6.1-0.13.0 affected, tested 0.13.0. CVE noted RESERVED at time of writing.","published_at":null,"relation":"poc","confidence":null,"note":null},{"id":24662,"url":"https://github.com/otoyo/astro-notion-blog/releases","title":"otoyo/astro-notion-blog releases","kind":"release","source":"analyst","publisher":null,"text":"Latest release 0.13.0 (16 Oct). No release note mentions path traversal or a security fix.","published_at":null,"relation":"fix","confidence":null,"note":null}],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}