{"description":"Trending threats, MITRE ATT\u0026CK coverage, and detection metadata. Fed continuously.","favicon":"https://feed.craftedsignal.io/favicon-32x32.png","feed_url":"https://feed.craftedsignal.io/vendors/instatic/feed.json","home_page_url":"https://feed.craftedsignal.io/","icon":"https://feed.craftedsignal.io/apple-touch-icon.png","items":[{"_cs_actors":[],"_cs_cpes":[],"_cs_cves":[{"id":"CVE-2026-103931"}],"_cs_exploited":false,"_cs_has_poc":false,"_cs_poc_references":[],"_cs_products":["Instatic (\u003c= 0.0.13)"],"_cs_severities":["high"],"_cs_tags":["xss","web-security","cwe-79","sanitization-bypass"],"_cs_type":"advisory","_cs_vendors":["Instatic"],"content_html":"\u003cp\u003eInstatic version 0.0.13 and earlier are vulnerable to a Stored Cross-Site Scripting (XSS) vulnerability (CVE-2026-103931) within the \u003ccode\u003eisSafeUrl()\u003c/code\u003e function located in \u003ccode\u003esrc/core/html-sanitize/index.ts\u003c/code\u003e. The sanitization logic fails to correctly filter C0 control characters (U+0000 - U+001F) when checking for malicious URL schemes such as \u003ccode\u003ejavascript:\u003c/code\u003e, \u003ccode\u003evbscript:\u003c/code\u003e, or \u003ccode\u003edata:\u003c/code\u003e. Browsers strip these leading control characters during URL parsing, allowing payloads to bypass the application's security filter and execute in the context of the admin editor's same-origin frame.\u003c/p\u003e\n\u003ch2 id=\"attack-chain\"\u003eAttack Chain\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003eAn attacker with 'Client' role privileges (or any role capable of editing page content) crafts a malicious URL payload using leading C0 control characters (e.g., \u003ccode\u003e\\x01javascript:alert(document.domain)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eThe payload is submitted via a link \u003ccode\u003ehref\u003c/code\u003e, \u003ccode\u003eimage\u003c/code\u003e source, or custom HTML attribute field.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003eisSafeUrl()\u003c/code\u003e function attempts to normalize the input but fails to remove the specific C0 control characters, incorrectly marking the payload as \u0026quot;safe\u0026quot;.\u003c/li\u003e\n\u003cli\u003eThe malicious link is stored in the site content database.\u003c/li\u003e\n\u003cli\u003eAn administrator or owner opens the affected page within the admin editor canvas, which is an \u003ccode\u003esrcdoc\u003c/code\u003e iframe sharing the same origin as the \u003ccode\u003e/admin\u003c/code\u003e application.\u003c/li\u003e\n\u003cli\u003eBecause the admin interface lacks a strict \u003ccode\u003escript-src\u003c/code\u003e Content Security Policy (CSP), the browser executes the \u003ccode\u003ejavascript:\u003c/code\u003e payload within the admin origin upon interaction.\u003c/li\u003e\n\u003cli\u003eThe payload executes with the privileges of the authenticated administrator, enabling session hijacking, account creation, or other malicious administrative actions.\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"impact\"\u003eImpact\u003c/h2\u003e\n\u003cp\u003eSuccessful exploitation allows a low-privileged editor to escalate privileges to full administrative compromise by executing arbitrary JavaScript in the admin editor's origin. On published sites, the risk is dependent on the CSP; pages utilizing \u003ccode\u003e'unsafe-inline'\u003c/code\u003e are vulnerable to execution of these filtered protocols.\u003c/p\u003e\n\u003ch2 id=\"recommendation\"\u003eRecommendation\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003eUpgrade Instatic to a version containing the fix that properly strips the full C0 and space range from URL inputs.\u003c/li\u003e\n\u003cli\u003eImplement a strict \u003ccode\u003escript-src\u003c/code\u003e Content Security Policy (CSP) for the admin interface to prevent the execution of inline scripts and \u003ccode\u003ejavascript:\u003c/code\u003e protocol URLs.\u003c/li\u003e\n\u003cli\u003eAudit existing user-contributed content for links containing non-printable or unexpected control characters.\u003c/li\u003e\n\u003c/ol\u003e\n","date_modified":"2026-10-25T05:40:26Z","date_published":"2026-10-25T05:40:26Z","id":"https://feed.craftedsignal.io/briefs/2026-10-instatic-xss/","summary":"An incomplete URL sanitization routine in the Instatic isSafeUrl() function allows stored Cross-Site Scripting (XSS) via leading C0 control characters, enabling low-privileged users to achieve administrative account compromise.","title":"Instatic: Stored XSS via URL sanitization bypass (CVE-2026-103931)","url":"https://feed.craftedsignal.io/briefs/2026-10-instatic-xss/"}],"language":"en","title":"CraftedSignal Threat Feed - Instatic","version":"https://jsonfeed.org/version/1.1"}