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.
- Navigeer in de commando-interface naar uw project- of oplossingsmap.
- Voer
restore
uit met behulp van uw favoriete hulpprogramma's (bijvoorbeeld dotnet, MSBuild, NuGet.exe, VisualStudio, enzovoort). - 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 , high en critical |
Het minimale ernstniveau dat moet worden weergegeven. Als u de adviezen moderate , high en 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 TreatWarningsAsErrors
gebruikt, 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.