
CVE-2026-27621 - Il core di TypiCMS presenta una vulnerabilità di Cross-Site Scripting (XSS) memorizzato tramite caricamento di file SVG.
| Campo | Dettagli |
|---|
| ID CVE | CVE-2026-27621 |
| Gravità | MEDIA |
| Advisory | Visualizza Advisory |
| Scoperto da | Lukasz Rybak |
Nel modulo di caricamento file di TypiCMS esiste una vulnerabilità di Cross-Site Scripting (XSS) Memorizzato. L'applicazione consente agli utenti con permessi di caricamento file di caricare file SVG. Sebbene sia presente una validazione del tipo MIME, il contenuto del file SVG non viene sanificato. Un attaccante può caricare un file SVG appositamente predisposto contenente codice JavaScript malevolo. Quando un altro utente (come un amministratore) visualizza o accede a questo file tramite l'applicazione, lo script viene eseguito nel suo browser, portando alla compromissione della sessione dell'utente.
Il problema è aggravato da un bug nella logica di parsing SVG, che può causare un errore 500 se l'SVG caricato non contiene un attributo viewBox. Tuttavia, questo non mitiga la vulnerabilità XSS, poiché un attaccante può facilmente includere un attributo viewBox valido nel proprio payload malevolo.
TypiCMS\Modules\Core\Http\Requests\FileFormRequest.php e TypiCMS\Modules\Core\Services\FileUploader.php.La vulnerabilità deriva da due punti principali:
FileFormRequest inserisce esplicitamente svg nella whitelist dei tipi MIME consentiti per il caricamento.FileUploader salva il file SVG sul server senza analizzarne e sanificarne il contenuto per rimuovere elementi potenzialmente malevoli come i tag <script> o i gestori di eventi on*.Quando il disco del filesystem predefinito è impostato su public, il file SVG caricato viene archiviato in una directory accessibile pubblicamente, rendendo banale l'accesso al file tramite un URL diretto e l'attivazione del payload XSS.
Creare un file SVG malevolo:
Creare un file denominato malicious.svg con il seguente contenuto. L'attributo viewBox è incluso per bypassare il bug di parsing dell'applicazione.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
<script>
// A simple PoC to demonstrate the vulnerability
alert('XSS in TypiCMS! Your session cookie is: ' + document.cookie);
</script>
<text x="10" y="50">If you see this, the script has run.</text>
</svg>
Caricare il file malevolo:
/admin/files).malicious.svg. L'applicazione accetterà il file e lo archivierà.
http://<your-site>/storage/files/malicious.svg.Lo sfruttamento riuscito di questa vulnerabilità consente a un attaccante di eseguire JavaScript arbitrario nel contesto del browser della vittima. Sebbene l'uso del flag HttpOnly sui cookie di sessione impedisca il furto diretto dell'ID di sessione tramite document.cookie, l'attaccante può comunque ottenere la compromissione completa dell'account della vittima eseguendo azioni per suo conto.
L'impatto include:
Compromissione dell'Account tramite Falsificazione di Azioni: Lo script dell'attaccante può effettuare richieste autenticate all'API dell'applicazione dal browser della vittima. Ciò consente all'attaccante di eseguire qualsiasi azione che la vittima è autorizzata a compiere, come:
Divulgazione di Informazioni Sensibili: Lo script può leggere il contenuto di qualsiasi pagina visualizzata dalla vittima all'interno del pannello di amministrazione. Ciò include elenchi di utenti (con nomi ed email), impostazioni private dell'applicazione e altri dati sensibili, che possono poi essere esfiltrati verso un server controllato dall'attaccante.
Phishing e Ingegneria Sociale: Lo script può manipolare l'interfaccia del pannello di amministrazione per visualizzare moduli di login falsi, inducendo l'utente a reinserire le proprie credenziali, oppure reindirizzarlo a un sito web malevolo.
Registrazione dei tasti premuti: Lo script può catturare qualsiasi informazione che la vittima digita nei moduli della pagina compromessa.
Poiché l'attaccante può eseguire qualsiasi azione come amministratore autenticato, questa vulnerabilità porta effettivamente a una compromissione completa dell'applicazione, anche senza accesso diretto al cookie di sessione. Il rischio è Alto.
Si consiglia di applicare un approccio di difesa in profondità per mitigare questa vulnerabilità.
Correzione primaria: Sanificare il contenuto SVG:
La soluzione più robusta è sanificare i file SVG al momento del caricamento. Prima di salvare il file, è necessario analizzarlo per rimuovere tutti gli elementi potenzialmente pericolosi, inclusi i tag <script>, <style>, <foreignObject> e tutti gli attributi di evento on*. Ciò può essere ottenuto utilizzando una libreria dedicata alla sanificazione SVG.
Correzione secondaria: Disabilitare i caricamenti SVG:
Se i caricamenti SVG non sono una funzionalità critica per l'applicazione, la soluzione più semplice e sicura è disabilitarli completamente. Ciò può essere fatto rimuovendo 'svg' dall'elenco dei tipi MIME consentiti in TypiCMS\Modules\Core\Http\Requests\FileFormRequest.php.
// In FileFormRequest.php
// BEFORE:
$fileRule = 'mimes:jpeg,gif,png,...,svg,...|max:...';
// AFTER:
$fileRule = 'mimes:jpeg,gif,png,...,pdf,...|max:...'; // Removed 'svg'
Hardening - Content-Security-Policy (CSP): Implementare un'intestazione Content-Security-Policy (CSP) rigorosa per l'applicazione. Una CSP ben configurata può impedire l'esecuzione di script inline, mitigando l'impatto di questa vulnerabilità XSS.
Hardening - Servire i Contenuti Utente da un Dominio Separato: Servire tutti i file caricati dagli utenti da un dominio separato e senza cookie. Questa è una misura di sicurezza altamente efficace che isola i contenuti generati dagli utenti dall'applicazione principale, impedendo agli script di accedere ai cookie di sessione o di interagire con il DOM dell'applicazione.
Questa CVE è stata divulgata in modo responsabile seguendo le pratiche di divulgazione coordinata delle vulnerabilità. Le informazioni qui fornite hanno esclusivamente finalità educative e difensive.