Auditoría de dependencias de paquetes para vulnerabilidades de seguridad

Acerca de las auditorías de seguridad

Una auditoría de seguridad para administradores de paquetes como NuGet es un proceso que implica analizar la seguridad de los paquetes que se incluyen en un proyecto de software. Esto implica identificar vulnerabilidades, evaluar riesgos y realizar recomendaciones para mejorar la seguridad. La auditoría puede incluir una revisión de los propios paquetes, así como las dependencias y sus riesgos asociados. El objetivo de la auditoría es identificar y mitigar las vulnerabilidades de seguridad que podrían aprovechar los atacantes, como la inyección de código o los ataques de scripting entre sitios.

NuGet Audit está disponible a partir de NuGet 6.8, el SDK de .NET 8 (8.0.100) y Visual Studio 2022 17.8.

Ejecución de una auditoría de seguridad con restore

El restore comando se ejecuta automáticamente cuando se realiza una operación de paquete común, como cargar un proyecto por primera vez, agregar un nuevo paquete, actualizar una versión de paquete o quitar un paquete del proyecto en el IDE favorito. Se comprueba una descripción de las dependencias en un informe de vulnerabilidades conocidas en la base de datos de asesoramiento de GitHub.

Importante

Para auditar para comprobar los paquetes, se debe usar un origen de paquete que proporcione una base de datos de vulnerabilidades. La dirección URL V3 de NuGet.org es un ejemplo de este tipo (https://api.nuget.org/v3/index.json), pero tenga en cuenta que el punto de conexión V2 de NuGet.org no lo hace.

  1. En la línea de comandos, vaya al directorio del proyecto o de la solución.
  2. Asegúrese de que el proyecto o la solución contengan un .csproj archivo.
  3. Escriba dotnet restore o restore use sus herramientas preferidas (es decir, MSBuild, NuGet.exe, etc.).
  4. Revise el informe de auditoría y solucione las vulnerabilidades de seguridad conocidas.

Nota:

En este momento, NuGet no audita packages.config los proyectos.

Revisión y actuación en el informe de auditoría de seguridad

La ejecución dotnet restore generará un informe de vulnerabilidades de seguridad con el nombre del paquete afectado, la gravedad de la vulnerabilidad y un vínculo al aviso para obtener más detalles.

Vulnerabilidades de seguridad encontradas con actualizaciones

Si se encuentran vulnerabilidades de seguridad y hay actualizaciones disponibles para el paquete, puede:

  • Edite la .csproj u otra ubicación de versión del paquete (Directory.Packages.props) con una versión más reciente que contenga una corrección de seguridad.
  • Use la interfaz de usuario del administrador de paquetes NuGet en Visual Studio para actualizar el paquete individual.
  • Ejecute el dotnet add package comando con el identificador de paquete correspondiente para actualizar a la versión más reciente.

Vulnerabilidades de seguridad encontradas sin actualizaciones

En caso de que exista una vulnerabilidad conocida en un paquete sin una corrección de seguridad, puede hacer lo siguiente.

  • Compruebe los factores de mitigación descritos en el informe de asesoramiento.
  • Use un paquete sugerido si el paquete está marcado como en desuso o se abandona.
  • Si el paquete es código abierto, considere la posibilidad de contribuir a una corrección.
  • Abra un problema en el seguimiento de problemas del paquete.

Comprobación de factores de mitigación

Revise el asesor de seguridad para ver los factores de mitigación que pueden permitirle seguir usando el paquete con la vulnerabilidad. La vulnerabilidad solo puede existir cuando se usa el código en un marco específico, sistema operativo o una función especial.

Uso de un paquete sugerido

En caso de que se notifique un aviso de seguridad para el paquete que usa y el paquete está marcado como en desuso o parece abandonado, considere la posibilidad de usar cualquier paquete alternativo sugerido que el autor haya declarado o un paquete que consta de una funcionalidad similar que se mantiene.

Contribuir a una corrección

Si no existe una corrección para el aviso de seguridad, puede sugerir cambios que aborden la vulnerabilidad en una solicitud de incorporación de cambios en el repositorio de código abierto del paquete o póngase en contacto con el autor a través de la Contact owners sección de la página de detalles del paquete de NuGet.org.

Abrir un problema

Si no desea corregir la vulnerabilidad o no puede actualizar o reemplazar el paquete, abra un problema en el seguimiento de problemas del paquete o en el método de contacto preferido. En NuGet.org, puede ir a la página de detalles del paquete y hacer clic en Report package la que le guiará para ponerse en contacto con el autor.

No se encontraron vulnerabilidades de seguridad

Si no se encuentra ninguna vulnerabilidad de seguridad, esto significa que los paquetes con vulnerabilidades conocidas no se encontraron en el gráfico de paquetes en el momento actual que ha comprobado. Puesto que la base de datos de asesoramiento se puede actualizar en cualquier momento, se recomienda comprobar periódicamente la dotnet restore salida y garantizar lo mismo en el proceso de integración continua.

Establecimiento de un modo de auditoría de seguridad

De forma predeterminada, se realiza una auditoría de seguridad para las dependencias de nivel superior. En caso de que quiera auditar las dependencias de nivel superior y transitiva, puede establecer la <NuGetAuditMode> propiedad MSBuild en el modo deseado en el que se ejecutará la auditoría. Los valores posibles son direct y all. Por ejemplo, si desea auditar todas las dependencias de avisos de seguridad, puede establecer lo siguiente:

<NuGetAuditMode>all</NuGetAuditMode>

Nota:

Visual Studio 2022 17.8 no admite cambiar el modo de auditoría para los paquetes de estilo del SDK. Funciona desde la versión preliminar 2 de la versión 17.9.

Establecimiento de un nivel de auditoría de seguridad

En los casos en los que solo le interesa un umbral determinado de una gravedad de aviso de seguridad, puede establecer la <NuGetAuditLevel> propiedad MSBuild en el nivel deseado en el que se producirá un error en la auditoría. Los valores posibles son low, moderate, high y critical. Por ejemplo, si solo desea ver moderate, highy critical avisos, puede establecer lo siguiente:

<NuGetAuditLevel>moderate</NuGetAuditLevel>

Exclusión de avisos

No se admite la exclusión de avisos individuales en este momento. Puede usar <NoWarn> para suprimirNU1904NU1901-advertencias o usar la <NuGetAuditLevel> funcionalidad para asegurarse de que los informes de auditoría son útiles para el flujo de trabajo.

Códigos de advertencia

Código de advertencia Razón
NU1900 Error al comunicarse con el origen del paquete, al obtener información de vulnerabilidad.
NU1901 Paquete con gravedad baja detectada
NU1902 Paquete con gravedad moderada detectada
NU1903 Paquete con gravedad alta detectada
NU1904 Paquete con gravedad crítica detectada

Puede personalizar la compilación para tratar estas advertencias como errores para tratar las advertencias como errores o tratar las advertencias no como errores. Por ejemplo, si ya usa <TreatWarningsAsErrors> para tratar todas las advertencias (C#, NuGet, MSBuild, etc.), puede usar <WarningsNotAsErrors>NU1901;NU1902;NU1903;NU1904</WarningsNotAsErrors> para evitar que las vulnerabilidades detectadas en el futuro interrumpan la compilación. Como alternativa, si desea mantener vulnerabilidades bajas y moderadas como advertencias, pero tratar vulnerabilidades altas y críticas como errores y no usa TreatWarningsAsErrors, puede usar <WarningsAsErrors>NU1903;NU1904</WarningsAsErrors>.

Deshabilitación de la auditoría de seguridad

En cualquier momento que quiera no recibir informes de auditoría de seguridad, puede no participar en la experiencia completamente estableciendo la siguiente propiedad de MSBuild en un .csproj archivo o MSBuild que se está evaluando como parte del proyecto:

<NuGetAudit>false</NuGetAudit>

Resumen

Las características de auditoría de seguridad son fundamentales para mantener la seguridad y la integridad de los proyectos de software. Estas características proporcionan un nivel adicional de protección contra vulnerabilidades de seguridad y garantiza que puede usar paquetes de código abierto con confianza.