
CVE-2026-30691: Cross-Site Scripting (XSS) Armazenado em @cyntler/react-doc-viewer
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
[Suggested description]
Cross-Site Scripting (XSS) vulnerability in @cyntler/react-doc-viewer v1.17.1 allows remote attackers to execute arbitrary JavaScript via a crafted .txt file. The TXTRenderer component fails to sanitize file content and explicitly casts raw data as a ReactNode.
[Additional Information]
"The TXTRenderer is used by default for any text-based files. Since the library is widely used in React applications to preview user-uploaded content, this vulnerability poses a significant risk for applications that do not strictly validate file contents before passing them to the viewer."
[Vulnerability Type] Cross Site Scripting (XSS)
[Vendor of Product] cyntler
[Affected Product Code Base] @cyntler/react-doc-viewer - 1.17.1
[Affected Component] src/renderers/txt/index.tsx
[Attack Type] Remote
[Impact Code execution] true
[Impact Information Disclosure] true
[Attack Vectors]
"An attacker must provide a specially crafted .txt file containing malicious HTML or JavaScript code. When the victim opens this file using the DocViewer component, the script executes in their browser."
[Reference] https://github.com/cyntler/react-doc-viewer/issues/317
[Discoverer] Walid Riouah
Use CVE-2026-30691.
-----BEGIN PGP SIGNATURE-----
-----END PGP SIGNATURE-----
Foi identificada uma vulnerabilidade de Cross-Site Scripting (XSS) Armazenado no pacote @cyntler/react-doc-viewer (v1.17.1). A vulnerabilidade existe no componente TXTRenderer, que renderiza o conteúdo bruto de arquivos .txt ao convertê-lo explicitamente em um ReactNode sem qualquer sanitização ou escape de entidades anterior.
Em src/renderers/txt/index.tsx:
{currentDocument?.fileData as ReactNode}
Para reproduzir a vulnerabilidade, crie um arquivo chamado exploit.txt com o seguinte payload de script explícito e carregue-o no componente visualizador de documentos:
<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')">
Um atacante pode executar JavaScript arbitrário no contexto do navegador da vítima. Isso pode levar a:
Sanitize a entrada de texto dinâmica usando uma biblioteca de sanitização de HTML como DOMPurify antes da renderização, ou evite a conversão insegura de entradas de string brutas para objetos ReactNode:
import DOMPurify from 'dompurify';
const sanitizedHTML = DOMPurify.sanitize(currentDocument?.fileData);
return <div dangerouslySetInnerHTML={{ __html: sanitizedHTML }} />;
Aviso com curadoria de Walid Riouah (Pesquisador de Segurança Cibernética e Red Teamer)