Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
seal-security-nuget-demo-net7 — .NET 7 fork do seal-security-nuget-demo: mesma história de exploração do CVE-2024-21907, redirecionado para clientes bloqueados no .NET SDK 7. | Kitploit
Ferramentas/GitHubGitHub/isecuritytw/seal-security-nuget-demo-net7
Análise de VulnerabilidadesDevSecOpsSegurança da Cadeia de SuprimentosAprendizado e EducaçãoRecursos Curados
GitHubisecuritytw/seal-security-nuget-demo-net7

seal-security-nuget-demo-net7

.NET 7 fork do seal-security-nuget-demo: mesma história de exploração do CVE-2024-21907, redirecionado para clientes bloqueados no .NET SDK 7.

Ver Repositório
há 3 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Demonstração CLI + Navegador (NuGet/C#) — Edição .NET 7

Por que um fork .NET 7?

Este é um fork redirecionado do seal-security-nuget-demo canônico (que tem como alvo net9.0). A história do exploit, os controladores e a lista de pacotes selados são idênticos — apenas o TargetFramework difere.

Ele existe porque a maioria dos clientes empresariais não pode migrar para o SDK .NET mais recente sob demanda. O .NET 7 atingiu o fim do suporte em 14 de maio de 2024, mas ambientes de produção reais ainda o utilizam por motivos de compatibilidade, certificação ou operacionais. Esse é exatamente o caso para o qual a Seal Security foi projetada: quando um cliente não pode (ou não quer) fazer um upgrade de versão principal, a Seal corrige a dependência vulnerável no lugar sob a mesma versão, sem mudança de API pública e sem edições de código no aplicativo do cliente. Esta demonstração permite que essa conversa aconteça na stack real do cliente, em vez de pedir que ele instale net8/net9 primeiro.

O fork fixa o SDK em 7.0.x via global.json para que upgrades acidentais não entrem sorrateiramente durante a demonstração.


Visão Geral

Este aplicativo de demonstração é uma página de boas-vindas ASP.NET Core simples que usa Newtonsoft.Json 12.0.2 para analisar a entrada do usuário como um objeto de configuração. O aplicativo tem um campo de nome — digite seu nome, clique em Go, e ele exibe "Welcome, alice!". Nos bastidores, ele passa a entrada pelo JsonConvert.DeserializeObject<NestedConfig>() do Newtonsoft.Json. É isso — uso completamente padrão de uma biblioteca JSON popular.

O problema é que o Newtonsoft.Json 12.0.2 (e versões anteriores à 13.0.1) tem CVE-2024-21907 — uma vulnerabilidade de Negação de Serviço de alta gravidade com pontuação CVSS de 7.5 (ALTA). Esta demonstração mostra como a Seal Security corrige a vulnerabilidade no lugar, sem exigir um upgrade de versão principal.


A Vulnerabilidade: CVE-2024-21907

O que é a vulnerabilidade?

O método JsonConvert.DeserializeObject<T>() do Newtonsoft.Json pode ser explorado criando payloads JSON profundamente aninhados. Ao desserializar em um objeto tipado (POCO), o JsonSerializerInternalReader da biblioteca realiza chamadas verdadeiramente recursivas (CreateValueInternal → CreateObject → PopulateObject → SetPropertyValue → CreateValueInternal) que causam estouro de pilha, levando à falha do aplicativo (Negação de Serviço).

Como o exploit funciona

O aplicativo recebe a entrada do usuário e a analisa através do Newtonsoft.Json. Se a entrada for uma URL, o aplicativo busca o conteúdo primeiro — um padrão realista usado por carregadores de configuração, testadores de API e receptores de webhook:

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

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

Entrada normal: Digite alice → exibe "Welcome, alice!"

Exploit: Cole esta URL no campo de nome e clique em Go:

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

O aplicativo detecta que é uma URL, busca o json-payload (JSON profundamente aninhado {"n":{"n":{...}}}) e o desserializa através do Newtonsoft.Json na classe recursiva NestedConfig — acionando o estouro de pilha.

O JsonSerializerInternalReader recorre através de CreateValueInternal → CreateObject → PopulateObject → SetPropertyValue para cada nível de aninhamento. A cerca de ~5.000 níveis de profundidade, isso esgota a pilha de threads e o aplicativo falha com uma StackOverflowException — o processo morre instantaneamente (nenhum tratamento de erro gracioso é possível).

Impacto no mundo real

Com esta vulnerabilidade, os atacantes podem:

  • Derrubar o aplicativo enviando payloads JSON maliciosos
  • Causar Negação de Serviço afetando todos os usuários
  • Esvaziar os recursos do servidor através de exploração repetida
  • Contornar a limitação de taxa já que cada requisição derruba o processo

Por que não apenas atualizar para o Newtonsoft.Json 13.0.1?

A correção publicamente disponível exige a atualização para a versão 13.0.1. No entanto, atualizar versões principais frequentemente introduz:

  • Mudanças de API que quebram o comportamento de serialização
  • Problemas de compatibilidade com outras bibliotecas que esperam versões específicas
  • Requisitos extensivos de teste para todos os caminhos de código de serialização/desserialização
  • Risco de mudanças de comportamento em tempo de execução em produção

Isso torna a correção "apenas atualize" um projeto que pode facilmente levar semanas de tempo de desenvolvedor — deixando a vulnerabilidade aberta nesse meio tempo.

Como a Seal Security corrige

A versão corrigida da Seal (12.0.2-sp1) adiciona proteção de profundidade de recursão sem mudar nenhuma API pública. A correção:

  1. Adiciona limites padrão de MaxDepth para prevenir recursão ilimitada
  2. Trata graciosamente o aninhamento profundo com exceções adequadas em vez de estouro de pilha
  3. Não muda nenhuma API pública — o código existente continua funcionando sem modificação

Esta é a mesma estratégia de mitigação aplicada no Newtonsoft.Json 13.0.1, portada de volta para 12.0.2 como uma substituição drop-in.


Outras Dependências Vulneráveis

Esta demonstração também inclui outros pacotes NuGet vulneráveis que a Seal Security pode corrigir:

log4net 2.0.5 - CVE-2018-1285 (CVSS 9.8 CRÍTICA)

Vulnerabilidade de Entidade Externa XML (XXE) na análise de configuração XML do log4net. Um atacante que possa controlar o arquivo de configuração do log4net pode:

  • Ler arquivos arbitrários do servidor
  • Realizar Server-Side Request Forgery (SSRF)
  • Causar Negação de Serviço

Nota sobre System.Net.Http: A demonstração net9 canônica também inclui uma referência vulnerável a System.Net.Http 4.3.0 para CVE-2017-0249. Nós a omitimos deste fork net7 porque no .NET 7 o System.Net.Http faz parte do BCL e a referência de pacote independente é um meta-pacote vestigial — ele tem casos de borda conhecidos com dotnet add package --source <local-nupkg>, que é exatamente como o CLI da Seal aplica versões seladas. Removê-lo torna a etapa seal fix confiável sem mudar a história da demonstração (HttpClient continua funcionando bem; o runtime o fornece).


Pré-requisitos

  • SDK .NET 7.0 (baixar da Microsoft)
  • CLI da Seal Security v0.3.238 para Windows x64 (download direto)

    Os binários do CLI para Windows foram descontinuados após a v0.3.238. A v0.3.238 é totalmente funcional para remediação NuGet no Windows.

  • Token da Seal Security (do painel da Seal)

Um guia detalhado de instalação e execução no Windows Server está em README-WINDOWS-SERVER.md. O Quick Start abaixo cobre os mesmos passos de forma condensada.


Quick Start (Windows Server Local)

1. Definir Variáveis de Ambiente

PowerShell:

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

2. Executar o Aplicativo Vulnerável (Antes da Seal)

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

# Restaurar (puxa do nuget.org e do feed da Seal — veja nuget.config)
dotnet restore

# Compilar e executar
dotnet build
dotnet run

Abra http://localhost:5000 — o aplicativo está rodando com dependências vulneráveis.

Testar com entrada normal

Digite alice no campo de nome, clique em Go. Você deve ver: "Welcome, alice!"

Testar com payload de exploit

Cole a seguinte URL no campo de nome e clique em Go:

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

Resultado sem correção: O navegador mostra um erro / conexão redefinida — o aplicativo falhou com uma StackOverflowException em JsonSerializerInternalReader.CreateValueInternal. O processo está morto.

3. Aplicar a Correção da Seal Security

root@kitploit:~
# (Opcional — já feito acima) Restaurar dependências primeiro
dotnet restore

# Executar o CLI da Seal para corrigir vulnerabilidades
seal fix . --mode remote -v

# Restaurar novamente para puxar as versões seladas
dotnet restore

# Compilar e executar o aplicativo corrigido
dotnet build
dotnet run

O aplicativo agora usa versões corrigidas (Newtonsoft.Json 12.0.2-sp1, log4net 2.0.5-sp1).

Resultado corrigido: Cole a mesma URL de exploit → a página mostra "Blocked by Seal patch: MaxDepth of 64 has been exceeded." — o limite de recursão corrigido do Newtonsoft.Json rejeitou o payload profundo. O servidor continua rodando normalmente.

4. Verificar as Versões Corrigidas

root@kitploit:~
dotnet list package

Você deve ver pacotes com o sufixo -sp1 indicando as correções da Seal Security.


Integração com o CLI da Seal Security

A Regra de Ouro

A etapa do CLI deve ser adicionada imediatamente após a instalação das dependências mas antes da compilação final.

root@kitploit:~
# 1. Restaurar dependências
dotnet restore

# 2. <--- Executar o CLI da Seal Aqui
$env:SEAL_TOKEN = "seu-token-seal-aqui"
$env:SEAL_PROJECT = "nuget-demo-net7"
seal fix . --mode remote -v

# 3. Restaurar novamente (para obter as versões seladas)
dotnet restore

# 4. Compilar
dotnet build

Modos de Correção

ModoDescrição
allAplicar todas as correções disponíveis automaticamente
remoteAplicar apenas correções aprovadas na interface da Seal
localAplicar apenas correções definidas em .seal-actions.yml

O .seal-actions.yml neste repositório já lista as três substituições seladas para o modo local, então seal fix . --mode local -v funciona offline (ainda precisa do token para o servidor de artefatos).


Configurando o Servidor de Artefatos

Configuração do nuget.config

O nuget.config está pré-configurado para usar a Seal Security com variáveis de 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>

Variáveis de Ambiente Necessárias

VariávelDescrição
SEAL_TOKENSeu token de acesso da Seal Security
SEAL_PROJECTID do projeto (ex.: nuget-demo-net7)

Allowlist de Rede (para ambientes restritos)

O CLI da Seal precisa de HTTPS de saída (TCP 443) para:

  • cli.sealsecurity.io — configuração de scan / correção
  • authorization.sealsecurity.io — validação de token
  • nuget.sealsecurity.io — downloads de .nupkg selados
  • d2zko6i8myndc4.cloudfront.net — CDN que serve os artefatos selados reais (os hostnames .sealsecurity.io redirecionam para cá)
  • api.nuget.org / endpoints padrão do nuget.org — para dependências não seladas

Verifique pelo PowerShell após o firewall ser aberto:

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

Todos devem reportar TcpTestSucceeded: True.


Notas Específicas do .NET 7

ItemPor que importa
global.json fixa o SDK em 7.0.x com rollForward: latestFeatureImpede que máquinas com net8/net9 lado a lado troquem silenciosamente de SDK no meio da demonstração.
System.Configuration.ConfigurationManager fixado em 7.0.0A demonstração net9 canônica usa 8.0.0, que tem como alvo apenas net8 e falha ao restaurar no net7. O 7.0.0 tem a mesma superfície de API que o log4net precisa.
NU1701 suprimido no csprojO log4net 2.0.5 anuncia um TFM legado net4x que o .NET 7 aceita em tempo de execução, mas avisa na restauração. O aviso é cosmético; a supressão mantém a saída de compilação limpa durante a demonstração.
CLI da Seal v0.3.238 para Windows x64Última versão com binário para Windows; totalmente funcional para remediação NuGet. Os binários para Windows foram descontinuados após esta versão, então não sugira uma versão mais recente.

Pontos de Discussão da Demonstração

  • Sem mudanças de código — o código do aplicativo é idêntico à versão sem correção. Apenas a versão do pacote NuGet foi trocada.
  • Mesma API — 12.0.2-sp1 é uma substituição drop-in binariamente compatível para 12.0.2.
  • Tem como alvo a stack real do cliente — net7.0, não net9.0. Nenhum upgrade de SDK necessário.
  • Defesa em profundidade — protege todos os caminhos de código, incluindo dependências transitivas.
  • Correções públicas — todas as correções são open source e auditáveis.
  • .NET EOL ainda recebe correções — este é o valor central: a Microsoft não envia mais atualizações de segurança para o .NET 7, mas a Seal mantém a superfície de dependências existente do cliente segura.

Pacotes NuGet Selados Disponíveis

Pacotes usados por esta demonstração:

PacoteVersão VulnerávelVersão SeladaCVECVSS
Newtonsoft.Json12.0.212.0.2-sp1CVE-2024-219077.5 ALTA
log4net2.0.52.0.5-sp1CVE-2018-12859.8 CRÍTICA

Outros pacotes NuGet selados disponíveis no feed da Seal (não nesta demonstração, listados para referência):

PacoteVersão VulnerávelVersão SeladaCVECVSS
log4net2.0.02.0.0-sp1CVE-2018-12859.8 CRÍTICA
System.Net.Http4.3.04.3.0-sp1CVE-2017-02497.3 ALTA
Snappier1.1.01.1.0-sp1CVE-2023-286387.0 ALTA
jQuery.Validation1.17.01.17.0-sp1CVE-2021-212527.5 ALTA

Licença

Licença MIT — Consulte o arquivo LICENSE para detalhes.

Baixar ferramenta