Delen via


Afhankelijkheden van het controlepakket voor beveiligingsproblemen

Over beveiligingscontroles

Een beveiligingscontrole voor pakketbeheerders zoals NuGet is een proces waarbij de beveiliging wordt geanalyseerd van de pakketten die zijn opgenomen in een softwareproject. Dit omvat het identificeren van beveiligingsproblemen, het evalueren van risico's en het doen van aanbevelingen voor het verbeteren van de beveiliging. De controle kan een beoordeling van de pakketten zelf bevatten, evenals eventuele afhankelijkheden en de bijbehorende risico's. Het doel van de controle is om beveiligingsproblemen te identificeren en te beperken die kunnen worden misbruikt door aanvallers, zoals code-injectie of scriptaanvallen op meerdere sites.

We hebben ook een blogbericht waarin de aanbevolen methode voor het ondernemen van actie wordt besproken wanneer een pakket met een bekend beveiligingsprobleem wordt gebruikt door uw project en hulpprogramma's voor meer informatie.

Beschikbaarheid van functies

NuGet .NET SDK Visual Studio Kenmerk
5,9 .NET 5 SDK (5.0.200) N.V.T. dotnet list package --vulnerable
6,8 .NET 8 SDK (8.0.100) Visual Studio 2022 17.8 NuGetAudit- voor PackageReference
6,10 n.v.t. Visual Studio 2022 17.10 NuGetAudit voor packages.config
6,11 .NET 8 SDK (8.0.400) Visual Studio 2022 17.11 NuGetAuditSuppress- voor PackageReference
6,12 .NET 9 SDK (9.0.100) Visual Studio 2022 17.12 bronnen auditeren. NuGetAuditSuppress voor packages.config.

Een beveiligingscontrole uitvoeren met restore

De opdracht restore wordt automatisch uitgevoerd wanneer u een algemene pakketbewerking uitvoert, zoals het voor het eerst laden van een project, het toevoegen van een nieuw pakket, het bijwerken van een pakketversie of het verwijderen van een pakket uit uw project in uw favoriete IDE. Uw afhankelijkheden worden gecontroleerd op basis van een lijst met bekende beveiligingsproblemen die worden geleverd door uw auditbronnen.

  1. Navigeer in de commando-interface naar uw project- of oplossingsmap.
  2. Voer restore uit met behulp van uw favoriete hulpprogramma's (bijvoorbeeld dotnet, MSBuild, NuGet.exe, VisualStudio, enzovoort).
  3. Bekijk de waarschuwingen en los de bekende beveiligingsproblemen op.

Configureren van NuGet Audit

Controle kan worden geconfigureerd via MSBuild-eigenschappen in een .csproj- of MSBuild-bestand dat wordt geëvalueerd als onderdeel van uw project. U wordt aangeraden de controle op opslagplaatsniveau te configureren.

MSBuild-eigenschap Verstek Mogelijke waarden Notities
NuGetAuditMode rechtstreeks direct en all Als u alleen afhankelijkheden op het hoogste niveau wilt controleren, kunt u de waarde instellen op direct. NuGetAuditMode is niet van toepassing op packages.config projecten.
NuGetAuditLevel laag low, moderate, highen critical Het minimale ernstniveau dat moet worden weergegeven. Als u de adviezen moderate, highen critical wilt zien, met uitzondering van low, stelt u de waarde in op moderate.
NuGetAudit waar true en false Als u geen beveiligingscontrolerapporten wilt ontvangen, kunt u zich volledig afmelden voor de ervaring door de waarde in te stellen op false

Bronnen Auditen

Met herstellen wordt de VulnerabilityInfo-bron van een server gedownload om deze te vergelijken met de lijst van pakketten die door elk project worden gebruikt. De lijst met bronnen wordt gedefinieerd door het element auditSources in NuGet.Configen waarschuwing NU1905 wordt gegenereerd als een van de controlebronnen geen kwetsbaarheidsinformatie bevat. Als auditSources niet is gedefinieerd of wordt gewist zonder bronnen toe te voegen, wordt packageSources gebruikt en wordt waarschuwing NU1905 onderdrukt.

Aangezien een veelvoorkomende beperking voor pakketvervangingsaanvallen is om één pakketbron te gebruiken die upstreams van nuget.org, zodat NuGet niet is geconfigureerd voor gebruik van nuget.org als pakketbron, kunnen auditbronnen worden gebruikt om nuget.org (of een andere bron die informatie over beveiligingsproblemen levert) te gebruiken zonder deze ook als pakketbron te gebruiken.

De gegevensbron voor de beveiligingsdatabase van nuget.org is GitHub Advisory Database. Houd er rekening mee dat het V2-protocol is afgeschaft, dus als uw nuget.config nog steeds het V2-eindpunt gebruikt, moet u migreren naar het V3-eindpunt.

<configuration>
    <auditSources>
        <clear />
        <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
    </auditSources>
</configuration>

Controlebronnen zijn beschikbaar via NuGet 6.12, .NET 9.0.100 SDK en Visual Studio 2022 17.12. Vóór deze versie gebruikt NuGet Audit alleen pakketbronnen om informatie over beveiligingsproblemen te downloaden. Controlebronnen worden momenteel niet gebruikt door dotnet list package --vulnerable.

Adviezen uitsluiten

U kunt ervoor kiezen om specifieke adviezen uit te sluiten van het auditrapport door een nieuw NuGetAuditSuppress MSBuild-item toe te voegen voor elk advies. Definieer een NuGetAuditSuppress item met de Include= metagegevens die zijn ingesteld op de advies-URL die u wilt onderdrukken.

<ItemGroup>
    <NuGetAuditSuppress Include="https://github.com/advisories/XXXX" />
</ItemGroup>

Net als bij de andere Eigenschappen van de NuGet-controleconfiguratie kunnen NuGetAuditSuppress items worden gedefinieerd op project- of opslagplaatsniveau.

NuGetAuditSuppress is beschikbaar voor PackageReference-projecten vanaf NuGet 6.11, Visual Studio 17.11 en de .NET 8.0.400 SDK. Het is beschikbaar voor packages.config vanuit Visual Studio 17.12 en NuGet 6.12.

Waarschuwingscodes

Waarschuwingscode Reden
NU1900 - Er is een fout opgetreden bij het communiceren met de pakketbron, terwijl er informatie over beveiligingsproblemen wordt opgehaald.
NU1901 Pakket met lage ernst gedetecteerd
NU1902 Pakket met gemiddelde ernst gedetecteerd
NU1903 Pakket met hoge ernst gedetecteerd
NU1904 Pakket met kritieke ernst gedetecteerd
NU1905 Een controlebron biedt geen database met beveiligingsproblemen

U kunt uw build aanpassen om deze waarschuwingen te behandelen als fouten om waarschuwingen te als fouten te behandelen of waarschuwingen niet als fouten te behandelen. Als u bijvoorbeeld al <TreatWarningsAsErrors> gebruikt om alle waarschuwingen (C#, NuGet, MSBuild, enzovoort) als fouten te behandelen, kunt u <WarningsNotAsErrors>$(WarningsNotAsErrors);NU1901;NU1902;NU1903;NU1904</WarningsNotAsErrors> gebruiken om te voorkomen dat beveiligingsproblemen die in de toekomst zijn gedetecteerd, uw build breken. U kunt ook, als u lage en gemiddelde beveiligingsproblemen wilt behouden als waarschuwingen, maar hoge en kritieke beveiligingsproblemen als fouten behandelen en u geen TreatWarningsAsErrorsgebruikt, kunt u <WarningsAsErrors>$(WarningsAsErrors);NU1903;NU1904</WarningsAsErrors>gebruiken.

Notitie

MSBuild-eigenschappen voor de ernst van berichten, zoals NoWarn en TreatWarningsAsErrors, worden niet ondersteund voor packages.config projecten.

dotnet list package --vulnerable

Zodra een project is hersteld, heeft dotnet list package een --vulnerable argument om de pakketten te filteren op basis waarvan pakketten bekende beveiligingsproblemen hebben. Houd er rekening mee dat --include-transitive niet standaard is, dus moet worden opgenomen.

Acties wanneer pakketten met bekende beveiligingsproblemen worden gerapporteerd

We hebben ook een blogbericht waarin de aanbevolen methode voor het ondernemen van actie wordt besproken wanneer een pakket met een bekend beveiligingsprobleem wordt gebruikt door uw project en hulpprogramma's voor meer informatie.

Beveiligingsproblemen gevonden met updates

Als er beveiligingsproblemen worden gevonden en er updates beschikbaar zijn voor het pakket, kunt u het volgende doen:

  • Pas de locatie van de .csproj of een andere pakketversie (Directory.Packages.props) aan met een nieuwere versie die een beveiligingsfix bevat.
  • Gebruik de gebruikersinterface van NuGet Package Manager in Visual Studio om het afzonderlijke pakket bij te werken.
  • Voer de opdracht dotnet add package uit met de betreffende pakket-id om bij te werken naar de nieuwste versie.

Transitieve pakketten

Als er een bekend beveiligingsprobleem bestaat in de transitieve afhankelijkheden van een pakket op het hoogste niveau, hebt u de volgende opties:

  • Voeg de versie van het vaste pakket toe als directe pakketreferentie. Opmerking: Zorg ervoor dat u deze verwijzing verwijdert wanneer er een nieuwe pakketversieupdate beschikbaar is en zorg ervoor dat u de gedefinieerde kenmerken voor het verwachte gedrag onderhoudt.
  • Gebruik Central Package Management met de transitieve pinning-functionaliteit.
  • Het advies onderdrukken totdat het kan worden aangepakt.
  • Dien een melding in de tracker van het hoofdpakket in om een update aan te vragen.

Beveiligingsproblemen gevonden zonder updates

In het geval dat er een bekend beveiligingsprobleem in een pakket bestaat zonder een beveiligingsoplossing, kunt u het volgende doen.

  • Controleer op eventuele beperkende factoren die in het adviesrapport worden beschreven.
  • Gebruik een voorgesteld pakket als het pakket is gemarkeerd als afgeschaft of wordt afgebroken.
  • Als het pakket open source is, kunt u een oplossing bijdragen.
  • Open een probleem in de probleemtracker van het pakket.

Controleren op beperkende factoren

Raadpleeg de beveiligingsadviseur voor eventuele beperkende factoren waarmee u het pakket kunt blijven gebruiken met het beveiligingsprobleem. Het beveiligingsprobleem bestaat mogelijk alleen wanneer de code wordt gebruikt voor een specifiek framework, besturingssysteem of een speciale functie.

Een voorgesteld pakket gebruiken

In het geval dat een beveiligingsadvies wordt gerapporteerd voor het pakket dat u gebruikt en het pakket is gemarkeerd als afgeschaft of lijkt afgebroken, kunt u overwegen een voorgesteld alternatief pakket te gebruiken dat de auteur van het pakket heeft gedeclareerd of een pakket dat bestaat uit vergelijkbare functionaliteit die wordt onderhouden.

Een oplossing bijdragen

Als er geen oplossing bestaat voor het beveiligingsadvies, kunt u wijzigingen voorstellen die betrekking hebben op het beveiligingsprobleem in een pull-aanvraag in de opensource-opslagplaats van het pakket of contact opnemen met de auteur via de sectie Contact owners op de pagina met pakketdetails van het NuGet.org pakket.

Een probleem openen

Als u het beveiligingsprobleem niet wilt oplossen of het pakket niet kunt bijwerken of vervangen, opent u een probleem in de probleemtracker of voorkeurscontactmethode van het pakket. Op NuGet.org kunt u naar de pagina met pakketgegevens navigeren en op Report package klikken om contact met de auteur op te halen.

Er zijn geen beveiligingsproblemen gevonden

Als er geen beveiligingsproblemen worden gevonden, betekent dit dat pakketten met bekende beveiligingsproblemen niet zijn gevonden in uw pakketgrafiek op het moment dat u hebt gecontroleerd. Omdat de adviesdatabase op elk gewenst moment kan worden bijgewerkt, raden we u aan uw dotnet restore uitvoer regelmatig te controleren en hetzelfde te garanderen in uw continue integratieproces.

Samenvatting

Functies voor beveiligingscontrole zijn van cruciaal belang voor het onderhouden van de beveiliging en integriteit van softwareprojecten. Deze functies bieden u een extra beveiligingslaag tegen beveiligingsproblemen en zorgt ervoor dat u met vertrouwen opensource-pakketten kunt gebruiken.