"dotnet restore" выполняет аудит транзитивных пакетов
dotnet restore
, которая восстанавливает зависимости и средства проекта, теперь выдает предупреждения об уязвимостях безопасности для транзитивных пакетов по умолчанию.
Прежнее поведение
В .NET 8 в NuGetAudit было введено предупреждение для пакетов с известными уязвимостями безопасности. По умолчанию были проверены только прямые ссылки на пакеты, однако можно было изменить NuGetAuditMode
свойство, чтобы включить все пакеты.
Новое поведение
Начиная с .NET 9, NuGetAuditMode
по умолчанию используется all
значение, если оно не было явно задано. Этот параметр означает, что транзитивные пакеты (зависимости пакетов проекта напрямую ссылаться) с известными уязвимостями теперь вызывают предупреждения.
Если проект обрабатывает предупреждения как ошибки, это поведение может привести к сбоям восстановления.
Представленные версии
.NET 9( предварительная версия 6)
Тип критического изменения
Причина изменения
Пакеты с известными уязвимостями могут привести к эксплойтируемому приложению, даже если проект не ссылается напрямую или не использует уязвимый пакет. Новые функции в .NET 9 также упрощают изучение графа пакетов и подавление помощников, которые не относятся к тому, как приложение использует уязвимый пакет.
Рекомендуемое действие
Чтобы явно уменьшить вероятность этого изменения, нарушающего сборку из-за предупреждений, вы можете рассмотреть возможность использования
<TreatWarningsAsErrors>
и использования<WarningsNotAsErrors>NU1901;NU1902;NU1903;NU1904</WarningsNotAsErrors>
, чтобы гарантировать, что известные уязвимости безопасности по-прежнему разрешены в вашей среде.Используйте такие средства, как
dotnet nuget why
поиск пакета верхнего уровня, вызвавшего транзитивный пакет с известной уязвимостью, которая будет включена, и попробуйте обновить его, чтобы узнать, исчезнет ли транзитивная уязвимость. В противном случае добавьте для него транзитивный пакет, добавивPackageReference
его и обновив его до более новой версии.Если вы хотите отключить определенные рекомендации, вы можете добавить
<NuGetAuditSuppress Include="url" />
элемент в файл проекта, гдеurl
указан URL-адрес, указанный в сообщении об предупреждении NuGet.<ItemGroup> <NuGetAuditSuppress Include="url" /> </ItemGroup>
Если вы хотите предупреждать только о прямых ссылках на пакеты с известными уязвимостями, вы можете задать
<NuGetAuditMode>
значениеdirect
в файле проекта.<PropertyGroup> <NuGetAuditMode>direct</NuGetAuditMode> </PropertyGroup>