La actualización del soporte de ciclo de vida ampliado para binutils cubre 92 CVE
GNU Binutils es uno de los paquetes fundamentales en un entorno de desarrollo - incluye varias herramientas diferentes para manipular archivos ELF, archivos objeto y otros que son importantes en el proceso de creación de binarios. Así que encontrar y arreglar problemas en él fortalece todo el proceso y tiene beneficios de largo alcance.
En el último lote de actualizaciones publicadas por el equipo de soporte de ciclo de vida ampliado para las distribuciones de Linux compatibles, se han corregido más de 90 CVE en GNU Binutils.
CONTENIDO:
- El punto de vista del usuario de la Asistencia Ampliada al Ciclo de Vida
- A un nivel más profundo
- Reflexiones finales
- Anexo
EL PUNTO DE VISTA DEL USUARIO DEL APOYO AL CICLO DE VIDA AMPLIADO
Como usuario del servicio, puede tener la tranquilidad de contar con un equipo especializado de expertos en seguridad y Linux que prepara las actualizaciones adecuadas para sistemas que, de otro modo, no dispondrían de ninguna actualización.
En este caso concreto, binutils es un paquete fundamental, en el que confían muchas otras herramientas como pilas de desarrollo, depuradores, análisis de código y muchas otras, no necesariamente relacionadas con el desarrollo. Por lo tanto, mantenerlo seguro tendrá un impacto directo en la seguridad y estabilidad general del sistema.
A un nivel más profundo
El equipo de soporte del ciclo de vida ampliado de TuxCare suele estar ocupado probando el código de corrección de CVE, adaptándolo a versiones anteriores de paquetes incluidos en las distribuciones de Linux soportadas y asegurándose de que los paquetes publicados protegen realmente a los usuarios frente a las vulnerabilidades que se pretende solucionar. Este proceso se denomina "backporting", ya que consiste en tomar una corrección que se aplica a una versión más reciente de un paquete y adaptarla para que funcione en versiones más antiguas como las presentes en las distribuciones de Linux cubiertas por ELS. Como resultado, se dedica mucho tiempo a echar un vistazo al código y a realizar pruebas con él.
Cuando se trabaja en CVE, a veces el análisis identifica nuevos problemas que se pasaron por alto en el momento en que se abordaron originalmente. El equipo de ELS siempre se esfuerza por informar responsablemente a los proyectos de código abierto ascendentes y contribuir con el código a estos proyectos. Esto tiene el beneficio añadido de mejorar la seguridad del ecosistema informático en su conjunto. Por supuesto, las correcciones de estos nuevos problemas también se proporcionan a los usuarios de ELS, ya que los sistemas que utilizan ya no son compatibles con el proveedor original y, de otro modo, no recibirían el código corregido por otros medios.
Uno de los últimos resultados de esta actividad, y ya incluido en las actualizaciones disponibles, aborda un total de 92 vulnerabilidades sólo en binutils. Estas vulnerabilidades van desde "desbordamientos de búfer" hasta problemas de "uso después de liberar" y tienen una amplia gama de puntuaciones CVSS: no todas son críticas, pero muchas sí lo son.
Siendo un paquete fundamental, binutils contiene herramientas utilizadas ampliamente en el análisis de código, depuración y operaciones de enlace, y también son utilizadas por muchas otras herramientas de terceros. No es necesario que esté realizando un trabajo de desarrollo real para tener binutils en su sistema, probablemente lo tenga como dependencia de alguna otra aplicación o herramienta desplegada. Mantener binutils actualizado asegurará el funcionamiento correcto y seguro de algo más que el propio binutils.
En algunas de estas CVE, el equipo identificó situaciones en las que las correcciones originales de la CVE introducían nuevos problemas, como comportamientos indefinidos u otros problemas de seguridad. Para solucionarlos era necesario desarrollar el código internamente. A continuación, el código se envió a proyectos de código abierto ascendentes, que a su vez lo aceptaron y lo incorporaron a esos proyectos, o prepararon su propio código para solucionar los nuevos problemas notificados.
Un ejemplo de esto es CVE-2018-7568. El equipo de ELS identificó una situación en la que la corrección de código enviada originalmente causaría un comportamiento indefinido, y se informó al proyecto ascendente aquí.
El problema fue detectado por Nikita Popov, un miembro del equipo, mientras revisaba los cambios realizados en la corrección original de la CVE para garantizar que no se rompiera en distribuciones de Linux más antiguas y que "funcionara bien" con el resto del código.
Resulta que el parche para CVE-2018-7568 incluye un tipo sin signo utilizado como contador de longitud de bloque (block_len). Cuando se utiliza en expresiones como
xptr + block_len < xptr
bajo las situaciones correctas - siendo block_len sin signo - esto podría ser completamente omitido por el compilador que podría optimizar esta línea. Este tipo de expresiones están explícitamente prohibidas por el estándar ISO C precisamente por esta razón, y diferentes compiladores, o el mismo compilador bajo diferentes arquitecturas/plataformas, podrían abordar esta situación de diferentes maneras, causando así un comportamiento indefinido. El informe de error enviado por el equipo incluye una explicación más completa del problema y el envío de código que lo soluciona.
Se aceptó en la base de código upstream y ahora forma parte del paquete binutils en adelante, e incluso ya ha sido perfeccionado por otros desarrolladores. Este es un ejemplo de libro de texto de cómo el desarrollo de proyectos de código abierto puede hacerse bien, y el equipo de ELS está trabajando activamente en este espacio.
También se ha informado de un problema con la corrección de CVE-2018-12700, que no parece evitar la situación que dice resolver y que todavía puede desencadenarse en nuestras pruebas, y que está pendiente de aclaración.
Tras el trabajo que se ha realizado en esta actualización de binutils, Pavel Mayorov, otro desarrollador que trabaja en binutils, comentó que "hasta donde yo sé, hemos procesado todos los CVE existentes para binutils... pero todavía estamos esperando una respuesta con respecto al problema con CVE-2018-12700".
REFLEXIONES FINALES
Mantener actualizados los sistemas antiguos es un requisito necesario, y no sólo desde un punto de vista estrictamente relacionado con la seguridad, aunque eso sea importante en sí mismo. También es necesario para lograr y mantener el cumplimiento de varias normas empresariales que tienen estipulaciones en torno a los plazos de aplicación de parches.
Al confiar en ELS como fuente de sus parches y actualizaciones de seguridad, el minucioso trabajo realizado por el equipo se traduce directamente en la seguridad y el cumplimiento de los requisitos de sus sistemas y en su propia tranquilidad. Como resultado, sus sistemas están protegidos y son estables, lo que le permite centrarse en sus necesidades empresariales específicas.
ADDENDUM
Lista completa de CVE cubiertos por la última actualización de binutils disponible a través del servicio Extended Lifecycle Support, agrupados por año de CVE.
CVE-2016-2226: Corrige el desbordamiento de entero en la función string_appends en cplus-dem.c
CVE-2016-4487: Corregir vulnerabilidad de uso después de libre en libiberty
CVE-2016-4488: Corregir vulnerabilidad de uso después de libre en libiberty.
CVE-2016-4489: Corregir desbordamiento de entero en libiberty
CVE-2016-4490: Fix integer overflow in cp-demangle.c in libiberty
CVE-2016-4492: Fix buffer overflow in the do_type function in cplus-dem.c in libiberty
CVE-2016-4493: Fix out-of-bounds read in demangle_template_value_parm and do_hpacc_template_literal
CVE-2016-6131: Corrección de bucle infinito, desbordamiento de pila
CVE-2017-7223: Corregir desbordamiento de búfer global (de tamaño 1).
CVE-2017-7224: Corrige una escritura no válida (de tamaño 1) al desensamblar
CVE-2017-7225: Corrige la desviación de puntero NULL y una escritura no válida
CVE-2017-7226: Corrige la sobrelectura de búfer basada en heap de tamaño 4049
CVE-2017-7227: Corrección del desbordamiento de búfer basado en heap
CVE-2017-7299: Corrección de lectura no válida (de tamaño 8) en la sección de reubicación ELF.
CVE-2017-7300: Corrección de la sobrelectura de búfer basada en la pila (off-by-one)
CVE-2017-7301: Corregir la vulnerabilidad off-by-one
CVE-2017-7302: Corregir lectura no válida (de tamaño 4)
CVE-2017-7614: Solucionar un problema de comportamiento indefinido
CVE-2017-8393: Corregir error de sobrelectura de búfer global
CVE-2017-8394: Corrige la lectura no válida de tamaño 4 debido a la desreferenciación del puntero NULL
CVE-2017-8396: Corregir lectura no válida de tamaño 1
CVE-2017-8398: Fix invalid read of size 1 during dumping of debug information
CVE-2017-8421: Solucionar vulnerabilidad de fuga de memoria
CVE-2017-9742: Corrección del desbordamiento del búfer
CVE-2017-9744: Corrección del desbordamiento del búfer
CVE-2017-9747: Corrección del desbordamiento del búfer
CVE-2017-9748: Corrección del desbordamiento del búfer
CVE-2017-9749: Corrección del desbordamiento del búfer
CVE-2017-9753: Corrección del desbordamiento del búfer
CVE-2017-9754: Corrección del desbordamiento del búfer
CVE-2017-12448: Corregir el uso después de liberar
CVE-2017-12449: Corrección de lectura de montón fuera de límites
CVE-2017-12455: Corrección de lectura de montón fuera de límites
CVE-2017-12457: Corrección de la desviación NULL
CVE-2017-12458: Corrección de lectura de montón fuera de límites
CVE-2017-12459: Corrección de escritura en montón fuera de límites
CVE-2017-12450: Fix out of bounds heap write
CVE-2017-12452: Corrección de lectura de montón fuera de límites
CVE-2017-12453: Corrección de lectura de montón fuera de límites
CVE-2017-12454: Corrección de lectura arbitraria de memoria
CVE-2017-12456: Fix out of bounds heap read
CVE-2017-14333: Corregir desbordamiento de entero, y cuelgue debido a un bucle que consume tiempo.
CVE-2017-12451: Corregir lectura de pila fuera de límites
CVE-2017-12799: Corregir desbordamiento de búfer
CVE-2017-13710: Corregir la desviación del puntero NULL
CVE-2017-14130: Fix _bfd_elf_attr_strdup heap-based buffer over-read
CVE-2017-14932: Corregir bucle infinito
CVE-2017-14938: Corregir la asignación excesiva de memoria
CVE-2017-14940: Corregir la desviación del puntero NULL
CVE-2017-15020: Fix parse_die heap-based buffer over-read
CVE-2017-15022: Corrección de la desviación del puntero NULL de bfd_hash_hash
CVE-2017-15225: Corregir error de división por cero
CVE-2017-15938: Fix find_abstract_instance_name lectura de memoria no válida, fallo de segmentación.
CVE-2017-15939: Fix NULL pointer dereference
CVE-2017-15996: Fix buffer overflow on fuzzed archive header
CVE-2017-16826: Corrección de un acceso no válido a memoria
CVE-2017-16827: slurp_symtab inválido libre
CVE-2017-16828: Corrección del desbordamiento de entero y de la sobrelectura de búfer basada en heap.
CVE-2017-16831: Corregir desbordamiento de enteros o asignación excesiva de memoria
CVE-2017-17080: Fix bfd_getl32 heap-based buffer over-read
CVE-2017-17121: Corregir la violación de acceso a memoria
CVE-2017-17123: Fix NULL pointer dereference
CVE-2017-17124: Corregir el consumo excesivo de memoria o el desbordamiento de búfer basado en heap.
CVE-2017-17125: Corregir la sobrelectura del búfer
CVE-2018-6323: Corregir el desbordamiento de enteros sin signo.
CVE-2018-6543: Corrección de desbordamiento de entero
CVE-2018-6759: Corregir fallo de segmentación.
CVE-2018-7208: Corregir fallo de segmentación
CVE-2018-7568: Corregir desbordamiento de entero
CVE-2018-7569: Corregir desbordamiento o desbordamiento de enteros
CVE-2018-7642: Fijar aout_32_swap_std_reloc_out NULL puntero desviación
CVE-2018-7643: Corrección de desbordamiento de entero
CVE-2018-8945: Corregir fallo de segmentación
CVE-2018-13033: Corregir la asignación excesiva de memoria
CVE-2018-10373: Fix NULL pointer dereference
CVE-2018-10535: Corregir la desviación del puntero NULL
CVE-2018-18309: Corregir la desviación de dirección de memoria no válida
CVE-2018-18605: Corrige los errores en las fusiones de sección
CVE-2018-18606: Fix NULL pointer dereference
CVE-2018-18607: Fix NULL pointer dereference in elf_link_input_bfd
CVE-2018-19931: Corregir desbordamiento de búfer basado en heap en bfd_elf32_swap_phdr_in.
CVE-2018-19932: Corregir desbordamiento de entero y bucle infinito
CVE-2018-20002: Corregir el consumo de memoria
CVE-2018-20623: Corregir el uso después de libre en la función de error.
CVE-2018-20671: Corregir vulnerabilidad de desbordamiento de enteros
CVE-2018-1000876: Fix integer overflow trigger heap overflow
CVE-2019-9073: Corregir la asignación excesiva de memoria
CVE-2019-9075: Corregir desbordamiento de búfer basado en heap en _bfd_archive_64_bit_slurp_armap.
CVE-2019-9077: Corregir desbordamiento de búfer basado en heap en process_mips_specific.
CVE-2019-12972: Corrige la sobrelectura de búfer basada en heap en _bfd_doprnt
CVE-2019-14444: Corregir desbordamiento de entero
CVE-2019-17450: Corregir la recursividad infinita
