
CVE-2026-30691: @cyntler/react-doc-viewer의 저장형 크로스 사이트 스크립팅(XSS)
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
[제안된 설명]
@cyntler/react-doc-viewer v1.17.1의 교차 사이트 스크립팅(XSS) 취약점으로 인해 원격 공격자가 조작된 .txt 파일을 통해 임의의 JavaScript를 실행할 수 있습니다. TXTRenderer 구성 요소는 파일 콘텐츠를 처리하지 않고 원시 데이터를 ReactNode로 명시적으로 캐스팅합니다.
[추가 정보]
"TXTRenderer는 모든 텍스트 기반 파일에 기본적으로 사용됩니다. 이 라이브러리는 사용자가 업로드한 콘텐츠를 미리 보기 위해 React 애플리케이션에서 널리 사용되므로, 이 취약점은 뷰어에 파일 콘텐츠를 전달하기 전에 파일 콘텐츠를 엄격하게 검증하지 않는 애플리케이션에 심각한 위험을 초래합니다."
[취약점 유형] 교차 사이트 스크립팅(XSS)
[제품 공급업체] cyntler
[영향 받는 제품 코드 베이스] @cyntler/react-doc-viewer - 1.17.1
[영향 받는 구성 요소] src/renderers/txt/index.tsx
[공격 유형] 원격
[코드 실행 영향] true
[정보 공개 영향] true
[공격 벡터]
"공격자는 악성 HTML 또는 JavaScript 코드가 포함된 특수하게 조작된 .txt 파일을 제공해야 합니다. 피해자가 DocViewer 구성 요소를 사용하여 이 파일을 열면 브라우저에서 스크립트가 실행됩니다."
[참고 자료] https://github.com/cyntler/react-doc-viewer/issues/317
[발견자] Walid Riouah
CVE-2026-30691을 사용하십시오.
-----BEGIN PGP SIGNATURE-----
-----END PGP SIGNATURE-----
@cyntler/react-doc-viewer 패키지(v1.17.1)에서 저장형 교차 사이트 스크립팅(XSS) 취약점이 확인되었습니다. 이 취약점은 TXTRenderer 구성 요소에 존재하며, .txt 파일의 원시 파일 콘텐츠를 사전 처리나 엔티티 이스케이프 없이 명시적으로 ReactNode로 캐스팅하여 렌더링합니다.
src/renderers/txt/index.tsx 내:
{currentDocument?.fileData as ReactNode}
취약점을 재현하려면 다음 명시적 스크립트 페이로드가 포함된 exploit.txt 파일을 생성하고 문서 뷰어 구성 요소에 로드하십시오:
<h1 style="color: red;">Vulnerable!</h1>
<script>alert('XSS_SUCCESS'); document.body.style.background='red';</script>
<img src=x onerror="console.log('XSS_Executed_Successfully')">
공격자는 피해자 브라우저 컨텍스트에서 임의의 JavaScript를 실행할 수 있습니다. 이로 인해 다음과 같은 결과가 발생할 수 있습니다:
렌더링 전에 DOMPurify와 같은 HTML 처리 라이브러리를 사용하여 동적 텍스트 입력을 처리하거나, 원시 문자열 입력을 ReactNode 객체로 안전하지 않게 캐스팅하지 마십시오:
import DOMPurify from 'dompurify';
const sanitizedHTML = DOMPurify.sanitize(currentDocument?.fileData);
return <div dangerouslySetInnerHTML={{ __html: sanitizedHTML }} />;
본 권고는 Walid Riouah(사이버 보안 연구원 및 레드 팀원)가 작성하였습니다.