Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
seal-security-nuget-demo-net7 — .NET 7 fork di seal-security-nuget-demo: stessa storia di exploit CVE-2024-21907, reindirizzato per i clienti vincolati a .NET SDK 7. | Kitploit
Strumenti/GitHubGitHub/isecuritytw/seal-security-nuget-demo-net7
Analisi delle VulnerabilitàDevSecOpsSicurezza della Supply ChainApprendimento e FormazioneRisorse Curate
GitHubisecuritytw/seal-security-nuget-demo-net7

seal-security-nuget-demo-net7

.NET 7 fork di seal-security-nuget-demo: stessa storia di exploit CVE-2024-21907, reindirizzato per i clienti vincolati a .NET SDK 7.

Vedi Repository
114 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Demo Browser + CLI (NuGet/C#) — Edizione .NET 7

Perché un fork .NET 7?

Questo è un fork riadattato del demo canonico seal-security-nuget-demo (che punta a net9.0). La storia dell'exploit, i controller e l'elenco dei pacchetti sigillati sono identici — cambia solo la TargetFramework.

Esiste perché la maggior parte dei clienti enterprise non può passare al più recente .NET SDK su richiesta. .NET 7 ha raggiunto la fine del supporto il 14 maggio 2024, ma molti ambienti di produzione reali continuano a usarlo per motivi di compatibilità, certificazione o operatività. Questo è esattamente il caso per cui Seal Security è progettata: quando un cliente non può (o non vuole) fare un salto di versione maggiore, Seal corregge la dipendenza vulnerabile sul posto mantenendo la stessa versione, senza modifiche all'API pubblica e senza modifiche al codice dell'applicazione del cliente. Questo demo consente di avere questa conversazione sullo stack reale del cliente invece di chiedergli di installare prima net8/net9.

Il fork fissa l'SDK alla versione 7.0.x tramite global.json così da evitare che aggiornamenti accidentali si insinuino durante il demo.


Panoramica

Questa applicazione demo è una semplice pagina di benvenuto ASP.NET Core che usa Newtonsoft.Json 12.0.2 per analizzare l'input dell'utente come oggetto di configurazione. L'app ha un campo nome — digita il tuo nome, clicca su Go, e mostra "Welcome, alice!". Sotto il cofano passa l'input attraverso JsonConvert.DeserializeObject<NestedConfig>() di Newtonsoft.Json. Tutto qui — un utilizzo completamente standard di una popolare libreria JSON.

Il problema è che Newtonsoft.Json 12.0.2 (e le versioni precedenti alla 13.0.1) presenta CVE-2024-21907 — una vulnerabilità Denial of Service ad alta gravità con punteggio CVSS di 7.5 (ALTO). Questo demo mostra come Seal Security corregge la vulnerabilità sul posto senza richiedere un aggiornamento di versione maggiore.


La Vulnerabilità: CVE-2024-21907

Cos'è la vulnerabilità?

Il metodo JsonConvert.DeserializeObject<T>() di Newtonsoft.Json può essere sfruttato creando payload JSON annidati in profondità. Quando si deserializza in un oggetto tipizzato (POCO), il JsonSerializerInternalReader della libreria esegue chiamate realmente ricorsive (CreateValueInternal → CreateObject → PopulateObject → SetPropertyValue → CreateValueInternal) che causano stack overflow, portando al crash dell'applicazione (Denial of Service).

Come funziona l'exploit

L'app prende l'input dell'utente e lo analizza tramite Newtonsoft.Json. Se l'input è un URL, l'app recupera prima il contenuto — un pattern realistico usato da config loader, API tester e webhook receiver:

root@kitploit:~
public class NestedConfig
{
    [JsonProperty("n")]
    public NestedConfig? N { get; set; }
}

var config = JsonConvert.DeserializeObject<NestedConfig>(name);

Input normale: Digita alice → mostra "Welcome, alice!"

Exploit: Incolla questo URL nel campo nome e clicca su Go:

root@kitploit:~
https://raw.githubusercontent.com/seal-sec-demo-2/json-payload/main/payload.json

L'app rileva che è un URL, recupera il json-payload (JSON annidato in profondità {"n":{"n":{...}}}) e lo deserializza tramite Newtonsoft.Json nella classe ricorsiva NestedConfig — innescando lo stack overflow.

Il JsonSerializerInternalReader ricorre attraverso CreateValueInternal → CreateObject → PopulateObject → SetPropertyValue per ogni livello di annidamento. A circa ~5.000 livelli di profondità, questo esaurisce lo stack del thread e l'applicazione va in crash con una StackOverflowException — il processo muore all'istante (nessuna gestione degli errori elegante possibile).

Impatto nel mondo reale

Con questa vulnerabilità, gli attaccanti possono:

  • Mandare in crash l'applicazione inviando payload JSON dannosi
  • Causare Denial of Service che colpisce tutti gli utenti
  • Esaurire le risorse del server attraverso sfruttamenti ripetuti
  • Bypassare il rate limiting poiché ogni richiesta manda in crash il processo

Perché non basta aggiornare a Newtonsoft.Json 13.0.1?

La correzione pubblicamente disponibile richiede l'aggiornamento alla versione 13.0.1. Tuttavia, aggiornare le versioni maggiori spesso introduce:

  • Modifiche alle API che rompono la compatibilità nel comportamento di serializzazione
  • Problemi di compatibilità con altre librerie che si aspettano versioni specifiche
  • Requisiti di test estesi per tutti i percorsi di codice di serializzazione/deserializzazione
  • Rischio di cambiamenti nel comportamento a runtime in produzione

Questo rende la correzione "basta aggiornare" un progetto che può facilmente richiedere settimane di tempo agli sviluppatori — lasciando la vulnerabilità aperta nel frattempo.

Come lo corregge Seal Security

La versione corretta di Seal (12.0.2-sp1) aggiunge protezione sulla profondità di ricorsione senza cambiare alcuna API pubblica. La correzione:

  1. Aggiunge limiti MaxDepth predefiniti per prevenire ricorsioni illimitate
  2. Gestisce con eleganza l'annidamento profondo con eccezioni appropriate invece dello stack overflow
  3. Non cambia alcuna API pubblica — il codice esistente continua a funzionare senza modifiche

Questa è la stessa strategia di mitigazione applicata in Newtonsoft.Json 13.0.1, riportata alla 12.0.2 come sostituto drop-in.


Altre Dipendenze Vulnerabili

Questo demo include anche altri pacchetti NuGet vulnerabili che Seal Security può correggere:

log4net 2.0.5 - CVE-2018-1285 (CVSS 9.8 CRITICO)

Vulnerabilità XML External Entity (XXE) nell'analisi della configurazione XML di log4net. Un attaccante che può controllare il file di configurazione di log4net può:

  • Leggere file arbitrari dal server
  • Eseguire Server-Side Request Forgery (SSRF)
  • Causare Denial of Service

Nota su System.Net.Http: Il demo canonico net9 include anche un riferimento vulnerabile a System.Net.Http 4.3.0 per CVE-2017-0249. L'abbiamo omesso da questo fork net7 perché su .NET 7 System.Net.Http fa parte della BCL e il riferimento al pacchetto standalone è un meta-pacchetto vestigiale — ha casi limite noti con dotnet add package --source <local-nupkg>, che è esattamente il modo in cui la CLI Seal applica le versioni sigillate. Rimuoverlo rende il passaggio seal fix affidabile senza cambiare la storia del demo (HttpClient funziona comunque perfettamente; lo fornisce il runtime).


Prerequisiti

  • .NET 7.0 SDK (scarica da Microsoft)
  • Seal Security CLI v0.3.238 per Windows x64 (download diretto)

    I binari CLI per Windows sono stati interrotti dopo la v0.3.238. La v0.3.238 è completamente funzionale per la correzione NuGet su Windows.

  • Seal Security Token (dalla dashboard Seal)

Una guida dettagliata per installazione ed esecuzione su Windows Server è in README-WINDOWS-SERVER.md. La Guida Rapida qui sotto copre gli stessi passaggi in forma condensata.


Guida Rapida (Windows Server Locale)

1. Imposta le Variabili d'Ambiente

PowerShell:

root@kitploit:~
$env:SEAL_TOKEN = "your-seal-token-here"
$env:SEAL_PROJECT = "nuget-demo-net7"

2. Esegui l'App Vulnerabile (Prima di Seal)

root@kitploit:~
cd seal-security-nuget-demo-net7

# Ripristina (scarica da nuget.org e dal feed Seal — vedi nuget.config)
dotnet restore

# Compila ed esegui
dotnet build
dotnet run

Apri http://localhost:5000 — l'app è in esecuzione con dipendenze vulnerabili.

Test con input normale

Digita alice nel campo nome, clicca su Go. Dovresti vedere: "Welcome, alice!"

Test con payload exploit

Incolla il seguente URL nel campo nome e clicca su Go:

root@kitploit:~
https://raw.githubusercontent.com/seal-sec-demo-2/json-payload/main/payload.json

Risultato senza correzione: Il browser mostra un errore / connessione reimpostata — l'app è andata in crash con una StackOverflowException in JsonSerializerInternalReader.CreateValueInternal. Il processo è morto.

3. Applica la Correzione Seal Security

root@kitploit:~
# (Opzionale — già fatto sopra) Ripristina prima le dipendenze
dotnet restore

# Esegui la CLI Seal per correggere le vulnerabilità
seal fix . --mode remote -v

# Ripristina di nuovo per scaricare le versioni sigillate
dotnet restore

# Compila ed esegui l'app corretta
dotnet build
dotnet run

L'app ora usa versioni corrette (Newtonsoft.Json 12.0.2-sp1, log4net 2.0.5-sp1).

Risultato con correzione: Incolla lo stesso URL exploit → la pagina mostra "Blocked by Seal patch: MaxDepth of 64 has been exceeded." — il limite di ricorsione corretto di Newtonsoft.Json ha rifiutato il payload profondo. Il server continua a funzionare normalmente.

4. Verifica le Versioni Corrette

root@kitploit:~
dotnet list package

Dovresti vedere pacchetti con suffisso -sp1 che indicano le correzioni Seal Security.


Integrazione con la CLI Seal Security

La Regola d'Oro

Il passaggio della CLI deve essere aggiunto immediatamente dopo l'installazione delle dipendenze ma prima della compilazione finale.

root@kitploit:~
# 1. Ripristina le dipendenze
dotnet restore

# 2. <--- Esegui la CLI Seal Qui
$env:SEAL_TOKEN = "your-seal-token-here"
$env:SEAL_PROJECT = "nuget-demo-net7"
seal fix . --mode remote -v

# 3. Ripristina di nuovo (per ottenere le versioni sigillate)
dotnet restore

# 4. Compila
dotnet build

Modalità di Correzione

ModalitàDescrizione
allApplica automaticamente tutte le correzioni disponibili
remoteApplica solo le correzioni approvate nella UI Seal
localApplica solo le correzioni definite in .seal-actions.yml

.seal-actions.yml in questo repository elenca già le tre override sigillate per la modalità local, quindi seal fix . --mode local -v funziona offline (serve comunque il token per il server degli artefatti).


Configurazione del Server degli Artefatti

Configurazione nuget.config

nuget.config è pre-configurato per usare Seal Security con variabili d'ambiente:

root@kitploit:~
<configuration>
  <packageSources>
    <add key="Seal" value="https://nuget.sealsecurity.io/v3/index.json" />
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
  </packageSources>
  <packageSourceCredentials>
    <Seal>
      <add key="Username" value="%SEAL_PROJECT%" />
      <add key="ClearTextPassword" value="%SEAL_TOKEN%" />
    </Seal>
  </packageSourceCredentials>
</configuration>

Variabili d'Ambiente Richieste

VariabileDescrizione
SEAL_TOKENIl tuo token di accesso Seal Security
SEAL_PROJECTID del progetto (es., nuget-demo-net7)

Allowlist di Rete (per ambienti ristretti)

La CLI Seal necessita di HTTPS in uscita (TCP 443) verso:

  • cli.sealsecurity.io — configurazione scan / fix
  • authorization.sealsecurity.io — validazione token
  • nuget.sealsecurity.io — download dei .nupkg sigillati
  • d2zko6i8myndc4.cloudfront.net — CDN che serve gli artefatti sigillati effettivi (gli hostname .sealsecurity.io reindirizzano qui)
  • api.nuget.org / endpoint standard nuget.org — per le dipendenze non sigillate

Verifica da PowerShell dopo aver aperto il firewall:

root@kitploit:~
Test-NetConnection cli.sealsecurity.io -Port 443
Test-NetConnection authorization.sealsecurity.io -Port 443
Test-NetConnection nuget.sealsecurity.io -Port 443
Test-NetConnection d2zko6i8myndc4.cloudfront.net -Port 443

Tutti dovrebbero riportare TcpTestSucceeded: True.


Note Specifiche per .NET 7

ElementoPerché è importante
global.json fissa l'SDK a 7.0.x con rollForward: latestFeatureImpedisce alle macchine con net8/net9 affiancati di cambiare silenziosamente SDK a metà demo.
System.Configuration.ConfigurationManager fissato a 7.0.0Il demo canonico net9 usa la 8.0.0, che punta solo a net8 e non riesce a ripristinare su net7. La 7.0.0 ha la stessa superficie API di cui log4net ha bisogno.
NU1701 soppresso nel csprojlog4net 2.0.5 pubblicizza un TFM legacy net4x che .NET 7 accetta a runtime ma avvisa al ripristino. L'avviso è puramente estetico; la soppressione mantiene pulito l'output di compilazione durante il demo.
Seal CLI v0.3.238 per Windows x64Ultima release con binario Windows; completamente funzionale per la correzione NuGet. I binari Windows sono stati interrotti dopo questa versione, quindi non suggerire release più recenti.

Punti di Discussione del Demo

  • Nessuna modifica al codice — il codice dell'applicazione è identico alla versione non corretta. Solo la versione del pacchetto NuGet è stata sostituita.
  • Stessa API — 12.0.2-sp1 è un sostituto drop-in binario-compatibile per 12.0.2.
  • Punta allo stack reale del cliente — net7.0, non net9.0. Nessun aggiornamento SDK richiesto.
  • Difesa in profondità — protegge tutti i percorsi di codice, incluse le dipendenze transitive.
  • Correzioni pubbliche — tutte le correzioni sono open source e verificabili.
  • Anche .NET EOL viene corretto — questo è il valore fondamentale: Microsoft non rilascia più aggiornamenti di sicurezza per .NET 7, ma Seal mantiene sicura la superficie di dipendenze esistente del cliente.

Pacchetti NuGet Sigillati Disponibili

Pacchetti usati da questo demo:

PacchettoVersione VulnerabileVersione SigillataCVECVSS
Newtonsoft.Json12.0.212.0.2-sp1CVE-2024-219077.5 ALTO
log4net2.0.52.0.5-sp1CVE-2018-12859.8 CRITICO

Altri pacchetti NuGet sigillati disponibili dal feed Seal (non in questo demo, elencati per riferimento):

PacchettoVersione VulnerabileVersione SigillataCVECVSS
log4net2.0.02.0.0-sp1CVE-2018-12859.8 CRITICO
System.Net.Http4.3.04.3.0-sp1CVE-2017-02497.3 ALTO
Snappier1.1.01.1.0-sp1CVE-2023-286387.0 ALTO
jQuery.Validation1.17.01.17.0-sp1CVE-2021-212527.5 ALTO

Licenza

Licenza MIT - Vedi il file LICENSE per i dettagli.

Scarica lo strumento