lanzamiento correctivo con corrección crítica (), que en la configuración predeterminada puede llevar a la ejecución remota de código por un atacante con privilegios de root. El problema se manifiesta solo cuando se habilita el soporte para TLS y se explota mediante el envío de un certificado de cliente especialmente preparado o un valor modificado en SNI. La vulnerabilidad fue descubierta por Qualys.
Problema en el manejador de escape de caracteres especiales en la cadena ( de string.c) y se debe a que el símbolo ‘\’ al final de la cadena se interpreta antes del carácter nulo (‘\0’) y lo escapa. Al escapar, la secuencia ‘\’ y el siguiente código nulo de fin de cadena se procesan como un solo carácter y el puntero se desplaza a datos fuera de la cadena, que se manejan como su continuación.
El código que llama a string_interpret_escape() asigna un búfer basado en el tamaño real, y el puntero resultante queda en el área fuera de los límites del búfer. Por lo tanto, al intentar procesar la cadena de entrada, se produce una situación de lectura de datos desde un área fuera de los límites del búfer asignado, y el intento de escritura de la cadena desescapada puede llevar a escribir fuera del búfer.
En la configuración predeterminada, la vulnerabilidad puede ser explotada mediante el envío de datos especialmente formateados en SNI al establecer una conexión segura con el servidor. El problema también puede ser explotado mediante la modificación de los valores peerdn en configuraciones configuradas para la autenticación mediante certificación de cliente, o al importar certificados. El ataque a través de SNI y peerdn es posible desde el lanzamiento de , donde se aplicó la función string_unprinting() para desescapar el contenido de peerdn y SNI.
Para el ataque a través de SNI, se ha preparado un prototipo de exploit que funciona en arquitecturas i386 y amd64 en sistemas Linux con Glibc. El exploit utiliza la superposición de datos en el área de pila, lo que provoca la sobrescritura de la memoria que almacena el nombre del archivo de registro. El nombre del archivo se reemplaza por “/..../..../..../..../..../..../..../..../etc/passwd”. Luego, se sobrescribe la variable con la dirección del remitente, que se guarda primero en el registro, lo que permite agregar un nuevo usuario al sistema.
Las actualizaciones de paquetes que corrigen la vulnerabilidad han sido lanzadas por las distribuciones , , , y . RHEL y CentOS sobre el problema , ya que Exim no está incluido en su repositorio de paquetes oficial (en actualización , pero por ahora en un repositorio público). En el código de Exim, el problema se resuelve con una línea de , que desactiva la acción de escape de la barra invertida si se encuentra al final de la línea.
Como solución alternativa para mitigar la vulnerabilidad, se puede desactivar el soporte para TLS o agregar en la
sección ACL «acl_smtp_mail»:
deny condition = ${if eq{\\}{${substr{-1}{1}{$tls_in_sni}}}}
deny condition = ${if eq{\\}{${substr{-1}{1}{$tls_in_peerdn}}}}
Fuente: opennet.ru
