
CVE-2026-124439 riguarda Scriban e Scriban.Signed, la libreria di templating per .NET distribuita su NuGet, nelle versioni fino alla 7.5.2. Un template costruito ad arte provoca una StackOverflowException che .NET non può intercettare: il processo che ospita l'applicazione termina, insieme a tutte le richieste e a tutti i tenant serviti in quel momento. La correzione è nella versione 7.5.3. Se la tua applicazione accetta template da utenti, clienti o fornitori esterni, va aggiornata subito.
Cosa è successo: la vulnerabilità CVE-2026-124439 in Scriban
Scriban offre dei limiti documentati per eseguire template non fidati in sicurezza: ParserOptions.ExpressionDepthLimit (default 250), RecursiveLimit (100) e ObjectRecursionLimit (20). L'advisory GHSA-mvmw-9jxc-7pr2, pubblicato dal maintainer il 24 ottobre 2026, descrive tre percorsi di codice che aggirano tutti questi limiti con la configurazione predefinita:
- le catene postfix (accesso a membro .a o ?.a, indicizzatore [0], chiamata esplicita (1)) vengono costruite in modo iterativo dal parser, ma generano un albero sintattico annidato che poi viene valutato ricorsivamente senza passare da EnterExpression();
- il confronto tra array (ScriptArray.CompareTo) procede elemento per elemento senza limite di profondità e senza rilevare i cicli, quindi un array autoreferenziale o due array molto profondi mandano in ricorsione infinita gli operatori ==, !=, <, <=, >, >=;
- object.eval ricorre senza rispettare RecursiveLimit.
Il problema colpisce sia Template.Parse sia Template.ParseLiquid. Anche ScriptPrinter (ToText()), ScriptRewriter e ScriptFormatter ricorrono sullo stesso albero senza protezione.
Chi è colpito: versioni vulnerabili di Scriban
- Scriban (NuGet): tutte le versioni fino alla 7.5.2 inclusa.
- Scriban.Signed (NuGet): tutte le versioni fino alla 7.5.2 inclusa.
- Versione corretta per entrambi i pacchetti: 7.5.3.
Il maintainer ha verificato il difetto sulla 7.5.1 e indica che i percorsi vulnerabili sono precedenti alle correzioni sui limiti di profondità introdotte nel ramo 7.x. Le versioni più vecchie non sono state controllate una per una, ma vanno considerate esposte. Scriban è usato spesso per generare email, notifiche, report e pagine da modelli personalizzabili: in una PMI può trovarsi dentro un CRM, un portale clienti, un sistema di invio newsletter o un gestionale sviluppato su misura, anche come dipendenza indiretta di un altro pacchetto.
Quanto è grave: punteggio CVSS e sfruttamento attivo
NVD assegna un punteggio CVSS 4.0 di 8.7 (HIGH) con vettore AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H. L'advisory su GitHub riporta CVSS 3.1 7.5 con vettore AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H. In pratica: attacco via rete, nessuna autenticazione, nessuna interazione dell'utente, nessuna configurazione particolare richiesta.
L'impatto è esclusivamente sulla disponibilità. Non c'è esfiltrazione di dati né esecuzione di codice. Però una StackOverflowException in .NET non è gestibile con un blocco try/catch: l'intero processo host muore. Per un'applicazione web significa che una singola richiesta con un template piccolo abbatte il sito o il servizio per tutti gli utenti, e un attaccante può ripeterla indefinitamente.
CVE-2026-124439 non risulta nel catalogo CISA KEV: non ci sono segnalazioni ufficiali di sfruttamento attivo. L'advisory richiama due vulnerabilità precedenti della stessa famiglia (GHSA-wgh7-7m3c-fx25, GHSA-xcx6-vp38-8hr5), il che indica che questa superficie è già nota a chi cerca falle di questo tipo.
Come capire se sei esposto: verifica versione, esposizione e log
Verifica della versione installata
- Nei progetti .NET: dalla cartella della soluzione esegui dotnet list package --include-transitive e cerca Scriban e Scriban.Signed. L'opzione --include-transitive è importante perché la libreria può arrivare come dipendenza di un altro pacchetto.
- Nei file .csproj cerca PackageReference Include="Scriban" o packages.config nei progetti più vecchi.
- Su un server di produzione senza i sorgenti: cerca Scriban.dll nella cartella dell'applicazione e leggi la versione dalle proprietà del file (Windows) oppure con dotnet-dump o uno strumento di ispezione degli assembly. Se la versione è 7.5.2 o inferiore, sei esposto.
Verifica dell'esposizione reale
Il rischio concreto dipende da chi può fornire i template. Chiediti: gli utenti del portale possono personalizzare modelli di email, firme, documenti o report? I template arrivano da file caricati, da campi di un form, da integrazioni API con terze parti? Se la risposta è sì anche in un solo punto raggiungibile da internet, la priorità è alta. Se i template sono solo quelli scritti dagli sviluppatori e versionati nel codice, il rischio scende, ma l'aggiornamento resta dovuto.
Log e indicatori
- Windows: nel Visualizzatore eventi, registro Applicazione, cerca eventi del tipo .NET Runtime e Application Error che citano StackOverflowException. Su IIS controlla i riavvii anomali del worker process nel registro di sistema.
- Linux: journalctl -u nome-servizio e i log del container (docker logs, kubectl logs --previous). Un processo che termina ripetutamente senza eccezioni gestite nei log applicativi è un segnale.
- Log del reverse proxy o del WAF: richieste ravvicinate verso gli endpoint che accettano template, soprattutto se seguite da errori 502 o 503.
Come risolvere la vulnerabilità: patch, aggiornamento e rimedio
La patch è disponibile: aggiorna a Scriban 7.5.3 o Scriban.Signed 7.5.3 da NuGet.
- Nel progetto: dotnet add package Scriban --version 7.5.3 (oppure Scriban.Signed), o modifica la versione nel PackageReference e lancia dotnet restore.
- Se Scriban arriva come dipendenza transitiva, aggiungi un riferimento diretto alla 7.5.3 nel progetto per forzare la versione, oppure aggiorna il pacchetto che la include dopo aver verificato che a sua volta usi la 7.5.3.
- Ricompila, esegui i test e pubblica una nuova build. Non basta sostituire la DLL a mano in produzione se il deploy è automatizzato: alla prossima release tornerebbe la versione vecchia.
- Dopo il deploy, ripeti dotnet list package --include-transitive sull'artefatto pubblicato per confermare.
Per software di terze parti che incorporano Scriban, chiedi al fornitore se e quando rilascia una versione con la 7.5.3 e verificalo sulle note di rilascio.
Cosa fare subito: mitigazioni e hardening
- Blocca l'ingresso di template non fidati. Finché non aggiorni, disabilita temporaneamente le funzioni che permettono a utenti esterni di caricare o modificare template, o limitale ad account interni verificati.
- Isola il rendering. Se devi mantenere il servizio attivo, sposta la valutazione dei template in un processo separato o in un container dedicato, così un crash non abbatte l'applicazione principale.
- Limita e filtra. Imposta un limite rigido alla dimensione dei template accettati e applica rate limiting sugli endpoint coinvolti. Questo riduce i tentativi ripetuti, ma non elimina il problema: un template piccolo è sufficiente.
- Riavvio automatico e monitoraggio. Configura il supervisore (IIS, systemd, orchestratore) per riavviare il processo e imposta alert sui crash ricorrenti.
- Inventario delle dipendenze. Approfitta per generare un elenco completo dei pacchetti NuGet in uso: senza inventario, falle come questa restano invisibili.
La rotazione delle credenziali non è necessaria per questa vulnerabilità, che non espone dati.
Se sospetti una compromissione: incident response e analisi forense
Se vedi crash ripetuti e sospetti un attacco, non limitarti a riavviare e dimenticare. Conserva i log del runtime, del reverse proxy e dell'applicazione prima che vengano ruotati; se possibile raccogli un dump del processo al crash. Un attacco di negazione del servizio può essere un diversivo o un test di superficie: verifica se negli stessi giorni ci sono stati accessi anomali, nuovi account o modifiche ai template salvati. Nei casi in cui il blocco ha causato un danno economico o contrattuale, una copia forense dei sistemi e dei log serve a documentare l'accaduto in modo opponibile. Nel listino dello studio l'incident response va da 1.500 a 6.000 € e un audit di sicurezza dell'applicazione da 2.000 a 8.000 €, sempre con preventivo a prezzo fisso. Per i primi passi dopo un incidente può essere utile anche la guida su cosa fare nelle prime 24 ore.
Fonti ufficiali
Per i dettagli tecnici e gli eventuali aggiornamenti, fa fede l'advisory sul repository ufficiale.
Hai un'applicazione .NET che usa Scriban?
Se non sai se Scriban è tra le dipendenze del tuo gestionale, del portale clienti o del sistema di invio email, posso fare una verifica delle dipendenze e dell'esposizione reale e consigliarti il piano di aggiornamento. Scrivimi dalla pagina contatti oppure richiedi un preventivo gratuito: rispondo entro 24 ore. Tutti i servizi dello studio sono descritti nella pagina servizi.


