
CVE-2026-30691: Cross-Site Scripting Memorizzato (XSS) in @cyntler/react-doc-viewer
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
[Suggerita descrizione]
Vulnerabilità di Cross-Site Scripting (XSS) in @cyntler/react-doc-viewer v1.17.1 consente a un attaccante remoto di eseguire JavaScript arbitrario tramite un file .txt appositamente creato. Il componente TXTRenderer non sanifica il contenuto del file e lancia esplicitamente i dati grezzi come ReactNode.
[Informazioni aggiuntive]
"Il TXTRenderer è utilizzato per impostazione predefinita per qualsiasi file basato su testo. Poiché la libreria è ampiamente utilizzata nelle applicazioni React per visualizzare in anteprima i contenuti caricati dagli utenti, questa vulnerabilità rappresenta un rischio significativo per le applicazioni che non convalidano rigorosamente i contenuti dei file prima di passarli al visualizzatore."
[Tipo di vulnerabilità] Cross Site Scripting (XSS)
[Fornitore del prodotto] cyntler
[Base del codice prodotto affetto] @cyntler/react-doc-viewer - 1.17.1
[Componente affetto] src/renderers/txt/index.tsx
[Tipo di attacco] Remoto
[Impatto esecuzione codice] true
[Impatto divulgazione informazioni] true
[Vettori d'attacco]
"Un attaccante deve fornire un file .txt appositamente creato contenente codice HTML o JavaScript malevolo. Quando la vittima apre questo file utilizzando il componente DocViewer, lo script viene eseguito nel suo browser."
[Riferimento] https://github.com/cyntler/react-doc-viewer/issues/317
[Scopritore] Walid Riouah
Usare CVE-2026-30691.
-----BEGIN PGP SIGNATURE-----
-----END PGP SIGNATURE-----
Una vulnerabilità di Cross-Site Scripting (XSS) persistente è stata identificata nel pacchetto @cyntler/react-doc-viewer (v1.17.1). La vulnerabilità esiste nel componente TXTRenderer, che renderizza il contenuto grezzo del file da file .txt lanciandolo esplicitamente come ReactNode senza alcuna sanificazione o escaping delle entità.
In src/renderers/txt/index.tsx:
{currentDocument?.fileData as ReactNode}
Per riprodurre la vulnerabilità, creare un file chiamato exploit.txt con il seguente payload esplicito di script e caricarlo nel componente di visualizzazione dei documenti:
<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 attaccante può eseguire JavaScript arbitrario nel contesto del browser della vittima. Questo può portare a:
Sanitizzare l'input di testo dinamico utilizzando una libreria di sanitizzazione HTML come DOMPurify prima del rendering, oppure evitare il casting non sicuro di stringhe grezze a oggetti ReactNode:
import DOMPurify from 'dompurify';
const sanitizedHTML = DOMPurify.sanitize(currentDocument?.fileData);
return <div dangerouslySetInnerHTML={{ __html: sanitizedHTML }} />;
Advisory curato da Walid Riouah (Ricercatore di Cybersecurity & Red Teamer)