Start Debugging
2026-01-23 dotnet Edit on GitHub

Spam de pedidos “become owner” no NuGet: o que fazer (e o que travar) no .NET 9/.NET 10

Defenda seus pacotes .NET contra o spam de pedidos de propriedade no NuGet. Lock files, Package Source Mapping e práticas de Central Package Management para .NET 9 e .NET 10.

Uma thread das últimas 48 horas alerta sobre pedidos suspeitos de “become owner” no NuGet.org, supostamente enviados em larga escala para mantenedores de pacotes: https://www.reddit.com/r/dotnet/comments/1qf9lnp/nuget_gallery_supply_chain_attack/.

Mesmo que os detalhes mudem amanhã, o checklist defensivo é estável. O objetivo é simples: reduzir a chance de uma mudança inesperada de propriedade virar uma dependência comprometida nos seus apps .NET 9/.NET 10.

Trate pedidos de propriedade como um evento de segurança, não como uma notificação

Se você mantém pacotes:

Se você consome pacotes, assuma que erros acontecem e faça seu build resiliente a surpresas upstream.

Trave o grafo de dependências para que “atualizações surpresa” não caiam sozinhas

Se você não usa lock files, deveria. Lock files tornam restores determinísticos, que é o que você quer quando um ecossistema de dependências está barulhento.

Habilite lock files no seu repo (funciona com dotnet restore):

<!-- Directory.Build.props -->
<Project>
  <PropertyGroup>
    <RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
    <!-- Optional: make CI fail if the lock file would change -->
    <RestoreLockedMode Condition="'$(CI)' == 'true'">true</RestoreLockedMode>
  </PropertyGroup>
</Project>

Depois gere o packages.lock.json inicial uma vez por projeto (localmente), commite, e deixe o CI exigir o cumprimento.

Reduza a dispersão de fontes com Package Source Mapping

Um footgun comum é deixar “qualquer fonte NuGet que estiver configurada” em jogo. O Package Source Mapping força cada padrão de ID de pacote a vir de um feed específico.

Exemplo mínimo de nuget.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
    <add key="ContosoInternal" value="https://pkgs.dev.azure.com/contoso/_packaging/contoso/nuget/v3/index.json" />
  </packageSources>

  <packageSourceMapping>
    <packageSource key="nuget.org">
      <package pattern="Microsoft.*" />
      <package pattern="System.*" />
      <package pattern="Newtonsoft.Json" />
    </packageSource>
    <packageSource key="ContosoInternal">
      <package pattern="Contoso.*" />
    </packageSource>
  </packageSourceMapping>
</configuration>

Agora um atacante não pode “ganhar” colocando um pacote de mesmo nome em um feed diferente que você esqueceu que existia.

Torne upgrades intencionais

Para bases .NET 9 e .NET 10, a melhor postura “do dia a dia” é entediante:

A thread original da discussão está aqui: https://www.reddit.com/r/dotnet/comments/1qf9lnp/nuget_gallery_supply_chain_attack/. Se você mantém pacotes, vale dar uma olhada nas notificações da sua conta NuGet e auditar qualquer mudança recente de propriedade ainda hoje.

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Voltar