Beim Aufräumen oder beim Review von .NET-Projekten gehört ein schneller Check auf bekannte Sicherheitslücken in NuGet-Paketen unbedingt dazu. Glücklicherweise liefert das .NET-CLI-Tool bereits einen einfachen Befehl, der dir genau das zeigt — auch transitive Abhängigkeiten.
Der Befehl
dotnet list <solution.sln|project.csproj> package --include-transitive --vulnerable
PowerShellAlle Projekte in einer Solution prüfen:
dotnet list .\OpenWeatherMapSharp.sln package --include-transitive --vulnerable
PowerShellNur ein einzelnes Projekt prüfen:
dotnet list .\src\MyApp\MyApp.csproj package --include-transitive --vulnerable
PowerShell--include-transitive
sorgt dafür, dass auch Abhängigkeiten, die nicht direkt in deinem Projekt stehen (also transitive Pakete), mit geprüft werden. --vulnerable
filtert auf bekannte, gemeldete Schwachstellen.
Was die Ausgabe bedeutet

Projekt / Target Framework: Es wird pro Projekt und pro Ziel-Framework (z. B. net9.0
oder netstandard2.0
) angezeigt.
Paket oberster Ebene vs. Transitives Paket: Steht ein >
vor dem Paketnamen, ist es ein direkt referenziertes Paket (top-level). Wenn „Transitives Paket“ steht, kommt das Paket indirekt.
Angefordert vs. Aufgelöst: Angefordert
= das in deiner Projektdatei angegebene (oder von einem anderen Paket gewünschte) Versionsthema; Aufgelöst
= die tatsächlich vom Resolver verwendete Version.
Schweregrad: z. B. Low
, Moderate
, High
, Critical
. Konzentriere dich zuerst auf High
/Critical
.
URL zur Empfehlung: Link zu der Sicherheits-Advisory (z. B. GHSA), dort stehen Details und oft Fix-Hinweise.
Tipps & Best Practices
Regelmäßig prüfen — mindestens vor Releases und als Teil des CI-Pipelines. Sicherheits-Advisories können jederzeit erscheinen.
Include transitive immer verwenden — viele Probleme kommen von indirekten Abhängigkeiten.
Central Package Management (Directory.Packages.props) nutzen, wenn du mehrere Projekte hast — Updates so zentral steuern.
Monitoring: Nutze zusätzlich Sicherheits-Scanner, Dependabot (GitHub) oder andere Tools, um automatische PRs für Updates zu erhalten.
Dokumentation: Wenn kein Fix möglich ist, dokumentiere die eingeschätzte Risikoauswirkung und ggf. Workarounds im Issue Tracker.
Fazit
Mit dotnet list <sln|proj> package --include-transitive --vulnerable
bekommst du schnell einen klaren Überblick über bekannte Sicherheitslücken in deinen NuGet-Abhängigkeiten — genau so wie im Screenshot. Kombiniert mit einem festen CI-Check und einem standardisierten Update-Workflow reduziert das deine Angriffsfläche erheblich und macht Dependency-Management planbar.