Поделиться через


"dotnet restore" выполняет аудит транзитивных пакетов

Команда dotnet restore , которая восстанавливает зависимости проекта, теперь создает предупреждения об уязвимостях безопасности для транзитивных пакетов по умолчанию, когда проект предназначен для .NET 10 или более поздней версии.

Предыдущее поведение

NuGetAudit появился в .NET 8, чтобы выдавать предупреждения для пакетов с известными уязвимостями безопасности. По умолчанию были проверены только прямые ссылки на пакеты, однако можно было изменить NuGetAuditMode свойство, чтобы включить все пакеты.

В предварительной версии .NET 9 6, значение по умолчанию NuGetAuditMode изменилось на all для всех проектов, и это изменение было возвращено обратно на direct в SDK .NET 9.0.101.

Новое поведение

Если проекты предназначены для .NET 10 или более поздней версии, по умолчанию NuGetAuditMode принимает значение all, если оно не было явно задано. Этот параметр означает, что транзитивные пакеты (зависимости пакетов, на которые ваш проект напрямую ссылается) с известными уязвимостями теперь вызывают предупреждения. Если проект обрабатывает предупреждения как ошибки, это поведение может привести к сбоям восстановления.

Если проект предназначен для .NET 9 или ниже, значение по умолчанию остается NuGetAuditModedirect.

Представленная версия

.NET 10 (предварительная версия 3)

Тип разрушающего изменения

Это изменение поведения.

Причина изменения

Пакеты с известными уязвимостями могут сделать ваше приложение уязвимым для атак, даже если ваш проект не ссылается или не использует напрямую уязвимый пакет.

  • Чтобы предотвратить обработку предупреждений аудита как ошибок, даже при использовании <TreatWarningsAsErrors>, можно использовать <WarningsNotAsErrors>NU1901;NU1902;NU1903;NU1904;$(WarningsNotAsErrors)</WarningsNotAsErrors>.

  • Используйте такие инструменты, как dotnet nuget why, чтобы найти пакет верхнего уровня, из-за которого был включен транзитивный пакет с известной уязвимостью, и попробуйте обновить его, чтобы выяснить, исчезнет ли транзитивная уязвимость. В противном случае продвигайте транзитивный пакет на верхний уровень пакетов, добавив для него PackageReference, и обновите его до более новой версии.

  • Если вы хотите отключить определенные рекомендации, вы можете добавить <NuGetAuditSuppress Include="url" /> элемент в файл проекта, где url указан URL-адрес, указанный в сообщении об предупреждении NuGet.

    <ItemGroup>
        <NuGetAuditSuppress Include="url" />
    </ItemGroup>
    
  • Если вы хотите получать предупреждения только о прямых ссылках на пакеты с известными уязвимостями, вы можете установить <NuGetAuditMode> в direct в вашем файле проекта.

    <PropertyGroup>
      <NuGetAuditMode>direct</NuGetAuditMode>
    </PropertyGroup>
    

См. также