
CVE-2026-30691: Cross-Site Scripting (XSS) almacenado en @cyntler/react-doc-viewer
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
[Suggested description]
La vulnerabilidad de Cross-Site Scripting (XSS) en @cyntler/react-doc-viewer v1.17.1 permite a atacantes remotos ejecutar JavaScript arbitrario a través de un archivo .txt manipulado. El componente TXTRenderer no sanitiza el contenido del archivo y convierte explícitamente los datos brutos en un ReactNode.
[Additional Information]
"El TXTRenderer se utiliza por defecto para cualquier archivo de texto. Dado que la librería se usa ampliamente en aplicaciones React para previsualizar contenido subido por el usuario, esta vulnerabilidad supone un riesgo significativo para las aplicaciones que no validan estrictamente el contenido de los archivos antes de pasarlos al visor."
[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]
"Un atacante debe proporcionar un archivo .txt especialmente manipulado que contenga código HTML o JavaScript malicioso. Cuando la víctima abre este archivo usando el componente DocViewer, el script se ejecuta en su navegador."
[Reference] https://github.com/cyntler/react-doc-viewer/issues/317
[Discoverer] Walid Riouah
Utilice CVE-2026-30691.
-----BEGIN PGP SIGNATURE-----
-----END PGP SIGNATURE-----
Se identificó una vulnerabilidad de Cross-Site Scripting (XSS) almacenado en el paquete @cyntler/react-doc-viewer (v1.17.1). La vulnerabilidad existe en el componente TXTRenderer, que renderiza el contenido bruto de archivos .txt al convertirlo explícitamente en un ReactNode sin sanitización previa ni escape de entidades.
En src/renderers/txt/index.tsx:
{currentDocument?.fileData as ReactNode}
Para reproducir la vulnerabilidad, cree un archivo llamado exploit.txt con la siguiente carga útil de script explícita y cárguelo en el componente visor 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')">
Un atacante puede ejecutar JavaScript arbitrario en el contexto del navegador de la víctima. Esto puede conllevar:
Sanitice la entrada de texto dinámico con una librería de sanitización de HTML como DOMPurify antes de renderizar, o evite la conversión insegura de cadenas de entrada brutas a objetos ReactNode:
import DOMPurify from 'dompurify';
const sanitizedHTML = DOMPurify.sanitize(currentDocument?.fileData);
return <div dangerouslySetInnerHTML={{ __html: sanitizedHTML }} />;
Aviso curado por Walid Riouah (Investigador de Ciberseguridad y Red Teamer)