Lanzamiento de la biblioteca del sistema Glibc 2.39 y el conjunto de utilidades GNU Binutils 2.42

Después de seis meses de desarrollo, se lanzó la biblioteca del sistema GNU C Library (glibc) 2.39, que cumple totalmente con los requisitos de los estándares ISO C11 y POSIX.1-2017. La nueva versión incluye correcciones de 67 desarrolladores.

Algunas de las mejoras implementadas en Glibc 2.39 incluyen:

  • Se ha proporcionado soporte para la pila de sombras introducida en el kernel. Linux 6.6, que bloquea muchos exploits aprovechando las capacidades de hardware de los procesadores Intel para proteger contra la sobrescritura de la dirección de retorno de una función en caso de desbordamiento del búfer de la pila. Esta protección funciona almacenando las direcciones de retorno no solo en la pila principal, sino también en una pila "en la sombra" separada, que no se puede modificar directamente, después de que el control se transfiere a una función. Antes de salir de la función, la dirección de retorno se extrae de la pila en la sombra y se compara con la dirección de retorno de la pila principal. Una discrepancia en las direcciones genera una excepción, bloqueando situaciones en las que un exploit haya logrado sobrescribir una dirección en la pila principal. Se ha añadido la opción de compilación "--enable-cet" para habilitar esta protección.
  • Se agregó un nuevo archivo de encabezado , definido en el borrador del estándar ISO C2X e incluyendo las funciones stdc_leading_zeros, stdc_leading_ones, stdc_trailing_zeros, stdc_trailing_ones, stdc_first_leading_zero, stdc_first_leading_one, stdc_first_trailing_zero, stdc_first_trailing_one, stdc_count_zeros, stdc_count_ones, bit, stdc_bit_width, stdc_bit_floor y stdc_bit_ceil en variantes con tipos “unsigned char”, “unsigned short”, "unsigned int", "unsigned long int" y "unsigned long long int".
  • Para plataforma Linux Se han implementado las funciones posix_spawnattr_getcgroup_np y posix_spawnattr_setcgroup_np, así como el indicador POSIX_SPAWN_SETCGROUP. Estas permiten configurar cgroupv2 en un nuevo proceso mediante las funciones posix_spawn y posix_spawnp, eliminando así las condiciones de carrera. Estas funciones son extensiones de GNU y requieren el kernel para funcionar. Linux con soporte para la llamada al sistema clone3.
  • Para plataforma Linux Se han implementado las funciones pidfd_spawn y pidfd_spawp, que son similares en semántica a la función posix_spawn, pero no devuelven un identificador de proceso (PID), sino un descriptor de archivo para su uso en funciones que admiten el mecanismo PIDFD, como pidfd_send_signal, poll y waitid (un PIDFD está asociado a un proceso específico y no cambia, mientras que un PID puede asociarse a otro proceso después de que el proceso actual asociado a este PID haya finalizado).
  • Para plataforma Linux Se agregó la función pidfd_getpid para determinar el identificador de proceso (PID) en función del descriptor de archivo de proceso (PIDFD) devuelto por las funciones pid_spawn, fork_np y pidfd_open.
  • El modificador de tamaño "wN" se ha agregado a las funciones de la familia scanf, utilizado para argumentos de tipos intN_t, int_leastN_t, uintN_t y uint_leastN_t. Por ejemplo, para leer valores decimales con tipos int32_t e int_least32_t, puede especificar "%w32d" y los valores hexadecimales se pueden especificar como "%w32x". De manera similar, se agregó el modificador "wfN" a los tipos int_fastN_t y uint_fastN_t introducidos en el borrador del estándar ISO C2X.
  • Se agregó la configuración “glibc.cpu.plt_rewrite”, que permite reescribir la PLT (tabla de vinculación de procedimientos) en sistemas x86-64, en los que el vinculador reemplazará las ramas indirectas en la PLT por directas.
  • Se agregó la configuración "glibc.mem.decorate_maps" para agregar información adicional de asignación de memoria (como la pila de subprocesos creada por pthread_create o la memoria asignada mediante malloc).
  • La estructura "statvfs" ahora rellena el campo "f_type" con información sobre el tipo de sistema de archivos, equivalente al contenido del campo en la estructura "statfs". Anteriormente, Linux El campo "f_type" siempre contenía 0.
  • Para la plataforma AArch64, se han agregado anotaciones a libmvec y math.h que permiten, al especificar la opción "-ffast-math" al compilar, utilizar la vectorización de llamadas al compilar en GCC 9 y versiones más recientes del compilador. La vectorización está habilitada para funciones matemáticas acos, acosf, asin, asinf, atan, atanf, atan2, atan2f, cos, cosf, exp, expf, exp10, exp10f, exp2, exp2f, expm1, expm1f, log, logf, log10, log10f, log1p, log1pf, log2, log2f, sin, sinf, tan y tanf.
  • La biblioteca libcrypt y el archivo de encabezado asociado se han eliminado del paquete " " Se anima a los desarrolladores de aplicaciones a cambiar a bibliotecas alternativas como libxcrypt.
  • La utilidad ldconfig ahora omite archivos con el carácter ';'. en el nombre del archivo o que termina en “.dpkg.tmp” y “.dpkg.new”, lo que le permite evitar procesar archivos temporales de los administradores de paquetes rpm y dpkg.
  • Se ha descontinuado el soporte para la arquitectura ia64 (ia64*-*-linux-gnu), utilizada en los procesadores Intel Itanium.
  • Vulnerabilidades solucionadas:
    • CVE-2023-6246, CVE-2023-6779, CVE-2023-6780 son vulnerabilidades críticas en la función __vsyslog_internal(), que permiten ejecutar código con privilegios elevados mediante manipulaciones con el inicio de aplicaciones SUID.
    • CVE-2023-4911 es una vulnerabilidad en Glibc ld.so que le permite obtener privilegios de root en el sistema. La vulnerabilidad se debe a un error en el código de análisis de cadenas especificado en la variable de entorno GLIBC_TUNABLES, lo que puede provocar que el valor analizado se escriba fuera de los límites en el búfer asignado. Hay hazañas que funcionan.
    • CVE-2023-4806 es una vulnerabilidad de uso después de la liberación en la función getaddrinfo. El problema ocurre cuando el complemento NSS solo implementa las devoluciones de llamada “_gethostbyname2_r” y “_getcanonname_r”, pero no admite la llamada “_gethostbyname3_r”. Para explotar la vulnerabilidad, el servidor DNS debe devolver una gran cantidad de direcciones IPv6 e IPv4 para el host solicitado, lo que provocará el bloqueo del proceso que llamó a la función getaddrinfo para la familia AF_INET6 cuando los indicadores AI_CANONNAME, AI_ALL y AI_V4MAPPED están activados. colocar.
    • CVE-2023-4527 es una vulnerabilidad en la función getaddrinfo que permite leer datos desde un área fuera del límite del búfer al procesar una respuesta DNS recibida a través de TCP que tiene más de 2048 bytes. La vulnerabilidad ocurre al usar la opción "no-aaaa" en /etc/resolv.conf.

    Además, podemos destacar el lanzamiento de un conjunto de utilidades del sistema GNU Binutils 2.42, que incluye programas como GNU linker, GNU ensamblador, nm, objdump, strings, strip.

    En la nueva versión de Binutils:

    • Se ha agregado una opción experimental "--scfi=experimental" al ensamblador (gas) para sistemas x86-64 para sintetizar construcciones CFI (Control Flow Integrity) para código ensamblador escrito a mano correspondiente al ABI System V AMD64.
    • Se agregó la opción "--extra-sym-info" a readelf para mostrar información extendida sobre los símbolos ("-symbols"), como el nombre de la sección a la que hace referencia el índice st_shndx.
    • La utilidad objcopy brinda la posibilidad de usar la opción “--set-section-flags” con el valor “grande” para configurar la sección de bandera SHF_X86_64_LARGE para objetos ELF en sistemas x86-64. La opción “--visualize-jumps” implementa soporte para la arquitectura s390.
    • Al desmontar las instrucciones s390, se implementó la capacidad de mostrar comentarios en la descripción de las instrucciones. Para habilitar descripciones, puede especificar la opción "-M insndesc" en objdump y la opción "establecer opciones de desensamblador insndesc" en gdb.
    • Se agregaron las opciones "-z mark-plt" y "-z nomark-plt" al vinculador para marcar entradas en la tabla PLT usando las etiquetas DT_X86_64_PLT, DT_X86_64_PLTSZ y DT_X86_64_PLTENT.
    • Se agregó soporte para clasificación inversa al vinculador.
    • Se agregaron las opciones "--warn-execstack-objects", "--error-execstack" y "--error-rxw-segments" para generar advertencias o errores cuando se usan en objetos de pila ejecutables.
    • Se ha implementado soporte para ABI 2.30 de la arquitectura LoongArch, así como soporte para nuevas instrucciones definidas en la especificación LoongArch 1.10.
    • Se agregó soporte para el conjunto de instrucciones KVX utilizado en los procesadores Kalray (por ejemplo, utilizado en SoC Coolidge).
    • Para sistemas basados ​​en arquitectura Intel, se ha agregado soporte para extensiones:
      • Intel APX: 32 GPR, NDD, PUSH2/POP2, PUSHP/POPP.
      • USUARIO_MSR.
      • AVX10.1.
      • PBNDKB.
      • SM4.
      • SM3.
      • SHA512.
      • AVX-VNNI-INT16.
    • Se ha agregado soporte para extensiones al puerto de arquitectura RISC-V:
      • Cabezal en T (XTheadVector, XTheadZvlsseg y XTheadZvamo).
      • CORE-V (XCVmac, XCValu).
      • SiFive VCIX (XSfVcp).
    • Se agregó soporte para extensiones al puerto para la arquitectura AArch64:
      • SVE2.1 (Extensión vectorial escalable 2.1).
      • SME2.1 (Extensión de matriz escalable 2.1).
      • B16B16 (BFloat16 y BFloat16 para SVE2 y SME2).
      • RASv2 (Confiabilidad, Disponibilidad y Servicio v2).
      • LSE128 (atómico de 128 bits).
      • GCS (Equipo de control vigilado).
      • CHK (Verificar estado de la función).
      • SPECRES2 (Restricción de especulación mejorada).
      • LRCPC3 (RCpc de adquisición de carga).
      • THE (Endurecimiento de la traducción).
      • ITE (Seguimiento de instrucciones).
      • D128 (descriptores de tabla de páginas de memoria de 128 bits).
      • XS (atributo de memoria XS).
    • Se agregó soporte para los procesadores AArch64 Cortex-A520, Cortex-A720, Cortex-X3 y Cortex-X4.
    • Para compatibilidad con el ensamblador clang/LLVM, el ensamblador BPF ha agregado soporte para separar comentarios con los símbolos “#” y “//”, además de usar el símbolo “;” para separar expresiones dentro de una línea (";" ya no se puede utilizar para comentarios).

    Fuente: opennet.ru

Compre alojamiento confiable para sitios con protección DDoS, servidores VPS VDS 🔥 Compra alojamiento web fiable con protección DDoS, servidores VPS VDS | ProHoster