GHSA-GW32-9RMW-QWWW: Svelte SSR XSS: Textarea 함정

발행: (2026년 1월 17일 오후 12:03 GMT+9)
2 min read
원문: Dev.to

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') {

완화 단계

  1. package.json에서 Svelte 버전을 확인합니다.

  2. Svelte 3.59.2 이상으로 업그레이드합니다:

    npm install svelte@latest
    # or
    yarn upgrade svelte
  3. 설치된 버전을 확인합니다:

    npm list svelte
  4. 애플리케이션을 다시 빌드하고 재배포하여 컴파일러가 안전한 코드를 생성하도록 합니다.

참고 자료

Back to Blog

관련 글

더 보기 »

기술은 구원자가 아니라 촉진자다

왜 사고의 명확성이 사용하는 도구보다 더 중요한가? Technology는 종종 마법 스위치처럼 취급된다—켜기만 하면 모든 것이 개선된다. 새로운 software, ...

에이전틱 코딩에 입문하기

Copilot Agent와의 경험 나는 주로 GitHub Copilot을 사용해 인라인 편집과 PR 리뷰를 수행했으며, 대부분의 사고는 내 머리로 했습니다. 최근 나는 t...