CVE-2026-124439: vulnerabilità DoS in Scriban, come verificare e aggiornare alla 7.5.3

Vincenzo Katriel Giuva8 novembre 20267 min di lettura
CVE-2026-124439: vulnerabilità DoS in Scriban, come verificare e aggiornare alla 7.5.3

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.

  1. Nel progetto: dotnet add package Scriban --version 7.5.3 (oppure Scriban.Signed), o modifica la versione nel PackageReference e lancia dotnet restore.
  2. 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.
  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.
  4. 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

  1. 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.
  2. 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.
  3. 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.
  4. Riavvio automatico e monitoraggio. Configura il supervisore (IIS, systemd, orchestratore) per riavviare il processo e imposta alert sui crash ricorrenti.
  5. 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.

#CVE#CVE-2026-124439#Scriban#NuGet#.NET#DoS

Condividi l'articolo

LinkedInTwitter