GHSA-GW32-9RMW-QWWW: Svelte SSR XSS: Textarea 함정
Source: Dev.to
취약점 개요
- ID: GHSA-GW32-9RMW-QWWW
- CVSS 점수: 8.4 (높음)
- 공개일: 2026-01-16
- CWE: CWE-79
- 벡터: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:H/VI:L/VA:N/SC:H/SI:H/SA:N
- 공격 벡터: 네트워크
- 유형: XSS (교차 사이트 스크립팅)
설명
Svelte의 서버‑사이드 렌더링(SSR) 컴파일러에 고위험 XSS 취약점이 존재합니다. 컴파일러가 SSR 중 <textarea> 요소의 bind:value 지시어 내용을 이스케이프하지 못합니다. <textarea> 내용은 속성이 아니라 자식 노드이기 때문에, 공격자는 </textarea> 를 삽입해 태그 컨텍스트를 탈출하고 임의의 JavaScript 코드를 실행할 수 있습니다.
이 문제는 Svelte 3.59.2에서 수정되었습니다.
영향을 받는 버전
- Svelte ≥ 3.0.0 < 3.59.2
- 취약한 컴파일러를 사용하는 SSR 모드의 SvelteKit 애플리케이션
수정
패치는 SSR 중 textarea 자식 노드를 이스케이프합니다:
@@ -149,7 +149,7 @@ export default function (node: Element, renderer: Renderer, options: RenderOptio
// value = name === 'textContent' ? x`@escape($$value)` : x`$$value`;
} else if (binding.name === 'value' && node.name === 'textarea') {
const snippet = expression.node;
- node_contents = x`${snippet} || ""`;
+ node_contents = x`@escape(${snippet} || "")`;
} else if (binding.name === 'value' && node.name === 'select') {
완화 단계
-
package.json에서 Svelte 버전을 확인합니다. -
Svelte 3.59.2 이상으로 업그레이드합니다:
npm install svelte@latest # or yarn upgrade svelte -
설치된 버전을 확인합니다:
npm list svelte -
애플리케이션을 다시 빌드하고 재배포하여 컴파일러가 안전한 코드를 생성하도록 합니다.
참고 자료
- GitHub Advisory – GHSA‑GW32‑9RMW‑QWWW
- OSV entry (link)
- Full report for GHSA‑GW32‑9RMW‑QWWW (interactive diagrams and exploit analysis)