CVE-2026-1721: CVE-2026-1721: JSON.stringify()가 Cloudflare 에이전트에서 당신을 배신할 때
Source: Dev.to
개요
- 취약점 ID: CVE-2026-1721
- CVSS 점수: 6.2 (중간)
- 공개일: 2026-02-13
- 취약점 유형: Reflected Cross‑Site Scripting (XSS)
- CWE ID: CWE‑79
- 공격 벡터: 네트워크 (반사형)
- Exploit 상태: PoC 제공
Cloudflare Agents AI Playground(버전 …)에 반사형 XSS 결함이 존재합니다. 브라우저가 생성된 JSON 문자열 내부의 “ 태그를 파싱하면서, 공격자는 JSON 컨텍스트를 탈출하고 임의의 JavaScript를 삽입할 수 있어 세션 탈취 및 데이터 유출(예: LLM 채팅 기록 및 Model Context Protocol (MCP) 서버)로 이어집니다.
기술적 세부 사항
근본 원인: 브라우저가 인라인 HTML 내 스크립트 태그를 파싱하는 방식을 오해함.
JSON.stringify는 “ 시퀀스를 이스케이프하지 않으므로, 공격자가 스크립트 태그를 조기에 종료시킬 수 있습니다.전형적인 취약 코드:
// Vulnerable handler (inline script)
const safeError = JSON.stringify(result.authError);
return new Response(`alert(${safeError})`);- 악용 방법: 공격자는
maliciousCode()를 포함한 조작된authError값을 제공하여, 삽입된 스크립트가 피해자의 브라우저에서 실행되도록 합니다.
영향
- 세션 탈취: 공격자는 인증 토큰이나 MCP 세션 식별자를 탈취할 수 있습니다.
- 데이터 유출: 민감한 채팅 로그와 모델 컨텍스트 데이터가 읽혀서 공격자 제어 엔드포인트로 전송될 수 있습니다.
- 범위: 취약한
agentsnpm 패키지를 사용하는 모든 애플리케이션에 영향을 미칩니다.
해결 단계
- 업그레이드
agentsnpm 패키지를 버전 0.3.10 이상으로 업데이트합니다. - 감사 커스텀 OAuth 콜백 핸들러에서
JSON.stringify(또는 유사한) 사용을 HTML/JS 응답 내부에 포함하고 있지 않은지 확인합니다. - 검증
error및error_description파라미터가 응답 본문에 그대로 렌더링되지 않도록 합니다. - 배포 인라인 스크립트를 차단하고 신뢰된 소스만 허용하는 Content Security Policy (CSP)를 적용합니다.
- HTML 컨텍스트용 적절한 직렬화기 사용
JSON.stringify대신 HTML 문자를 이스케이프하는 라이브러리(예:serialize-javascript)를 사용합니다. - CSP 구현 인라인 스크립트를 금지(
script-src 'self')하고nonce또는hash기반 스크립트 실행을 허용합니다.
참고 자료
- GitHub Pull Request #841 – 수정 구현.
- NVD Entry for CVE‑2026‑1721 – 공식 취약점 기록.