¿Deberían remediarse las vulnerabilidades detectadas en los commits antiguos?

8

Uno de mis proyectos en GitHub ha recibido una alerta de vulnerabilidad, en este caso de gravedad moderada.

La vulnerabilidad se ha detectado en una dependencia de una versión anterior del código. Las versiones actuales ya no usan esta dependencia. Sin embargo, los viejos compromete pueden potencialmente ser sacados y se ejecutan, y abren la aplicación de las hazañas de la vulnerabilidad.

Desde una perspectiva de ingeniería de software, ¿es aconsejable volver y cambiar las confirmaciones anteriores, es decir, actualizar la dependencia ahora no utilizada a una versión más nueva que contenga la solución a la vulnerabilidad? ¿O mejor para mantener intacto el historial de confirmaciones?

Dakota del Sur
fuente

Respuestas:

13

Veo dos opciones viables aquí.

Primero, lanza una versión de parche de la versión problemática. Por ejemplo, si la versión problemática es la versión 3.3 y está en la versión 5.1, puede lanzar una 3.3.1 que aborde la vulnerabilidad. Esto permitiría a los usuarios que no pueden actualizar a versiones principales (por cualquier número de razones) obtener la solución para la vulnerabilidad.

Segundo, no hagas nada. Es una versión antigua del software y tiene versiones más nuevas que se mantienen y que no tienen la vulnerabilidad. Los usuarios que se preocupan por la seguridad deberían ejecutar una versión más reciente.

¿Qué opción es la mejor? Depende. Sin embargo, retroceder y revisar las confirmaciones antiguas (reescribir el historial) no tiene mucho sentido. Y para algunos usuarios (especialmente en un entorno regulado) tendría muchos problemas con esto. Para el uso generalizado de su software, se debe evitar reescribir el historial.

Considerar:

  • ¿Qué tan grave es la vulnerabilidad?
  • ¿Qué tan extendida es la versión de la vulnerabilidad?
  • ¿Tiene la capacidad de continuar admitiendo versiones antiguas? ¿Lo manejará como un precedente?
Thomas Owens
fuente
6

Normalmente se usa un sistema de control de versiones para registrar el historial; Proporcionar una vista precisa del estado del código en un momento determinado. El resultado de retirar y construir una versión anterior debería ser esa versión, errores y todo. Algunos sistemas proporcionan compilaciones reproducibles : debería ser posible generar un binario exactamente idéntico a una compilación anterior.

La mayoría de los sistemas de control de versiones no permiten reescribir el historial, a excepción de circunstancias extremas como borrar información que podría causar responsabilidad si se registra. Es inusual y un poco "herético" que git le permita hacer esto.

La documentación admite que existen riesgos para reescribir el historial .

Además, es un sistema de control de versiones distribuido , ¡reescribirlo no afecta a ningún repositorio ya clonado!

Sugeriría nunca hacer esto a menos que sea para eliminar algo que se confirmó recientemente y que debería haberse mantenido confidencial: datos personales, claves de cifrado, ese tipo de cosas.

pjc50
fuente
2

Parece que incluso la respuesta actualmente aceptada no aborda realmente la parte de su pregunta sobre cómo evitar que alguien acceda accidentalmente a una confirmación anterior, use ese estado anterior de la base de código en una nueva rama y, por lo tanto, vuelva a introducir una vulnerabilidad anterior.

En mi humilde opinión, la única forma correcta de abordar esto es:

  • al documentar cualquier corrección de errores y correcciones de vulnerabilidad rígidamente en el documento de "notas de la versión" (o "registro de cambios") del sistema

  • asegurándose de que todos los desarrolladores que acceden a versiones anteriores del código se aseguren de leer las notas de la versión, verificar qué problemas se han resuelto en la versión del código que vino después del que van a usar

Cuando se reutiliza una versión anterior, o se ramifica desde una versión anterior de la base de código, es claramente responsabilidad de los desarrolladores no hacerlo a ciegas. Está claro que deben verificar los errores y vulnerabilidades ya corregidos, para no volver a introducirlos. Sin embargo, el registro de VCS no es realmente un buen lugar para encontrar este tipo de información, porque generalmente se mencionan todo tipo de cambios, en un nivel de abstracción demasiado bajo.

Sin embargo, las notas de la versión deben contener una sección de "nuevas características" y una sección de "problemas resueltos". Y este último debería ser el primer lugar para verificar antes de ramificarse de una versión anterior.

Doc Brown
fuente
0

Digamos que 3.5 es vulnerable, pero 3.6 no lo es. Podrías producir 3.5.1 sin la vulnerabilidad. Pero eso es trabajo y no es muy útil, porque las personas actualizan su versión o no, por lo que es poco probable que alguien use 3.5.1.

gnasher729
fuente