Se han publicado actualizaciones correctivas para los intérpretes de Perl 5.40.2 y 5.38.4, que abordan una vulnerabilidad (CVE-2024-56406) que puede llevar a un desbordamiento de búfer al transliterar caracteres no ASCII específicamente formateados usando el operador «tr/..../..». No se descarta la posibilidad de explotación de la vulnerabilidad para ejecutar código arbitrario en el sistema. El problema afecta a las versiones estables de Perl desde 2021 y se manifiesta en las ramas de Perl 5.34, 5.36, 5.38 y 5.40. Se puede seguir la corrección de la vulnerabilidad en los siguientes distribuidores: Debian, Ubuntu, Fedora, Arch, FreeBSD. Los distribuidores basados en RHEL 9, SUSE 15 y openSUSE Leap 15.6 no son vulnerables, ya que incluyen versiones de Perl 5.32 y 5.26.
La vulnerabilidad afecta a los programas que utilizan datos externos no verificados en el lado izquierdo del operador «tr», donde se especifica una variable con los datos para reemplazar caracteres (por ejemplo, «$external_string =~ tr/a/b/»). En la función S_do_trans_invmap() que habilita el operador, al procesar ciertos bytes no ASCII se produce un acceso a la memoria fuera del búfer asignado. El desbordamiento ocurre porque algunas secuencias de bytes en el conjunto de datos original pueden transformarse en secuencias UTF-8, que requieren dos bytes en lugar de uno.
Es notable que la vulnerabilidad surgió después de un cambio realizado en 2020 que eliminó la verificación adicional de la suficiente asignación de memoria, bajo el pretexto de que al calcular el tamaño, es suficiente redondear hacia arriba. Para verificar la existencia de la vulnerabilidad, se puede ejecutar el siguiente código: perl -e ‘$_ = «\x{FF}» x 1000000; tr/\xFF/\x{100}/;’ Segmentation fault (core dumped)
Fuente: opennet.ru
