Ejecución de código arbitrario en PHP a través de certificados X.509
Se ha corregido un fallo crítico en el lenguaje de programación PHP que
podría permitir a un atacante ejecutar código arbitrario a través de un
certificado X.509 especialmente manipulado.
El descubridor de la vulnerabilidad es el investigador Stefan Esser
(https://twitter.com/i0n1c). Esser es conocido por la gran cantidad de
fallos que ha encontrado a lo largo de su carrera, tanto en proyectos
open source como por ejemplo el DRM de la videoconsola Microsoft Xbox o
los exploits para la liberación del sistema iOS de Apple. En especial
cabe destacar su habilidad para encontrar fallos en el lenguaje PHP del
que fue contribuidor durante 5 años además de fundador del equipo de
seguridad.
El fallo descubierto se encuentra en la función de PHP
‘openssl_x509_parse’. Esta función se encarga de examinar un certificado
X.509 y devuelve un array con toda la información adicional que éste
contiene. A su vez, usa la función ‘asn1_time_to_time_t’ para la
conversión de marcas de tiempo (timestamps) desde el formato ASN1
(cadenas de caracteres) a un entero.
Esta última función es vulnerable cuando trata datos en formato binario
permitiendo escribir hasta 5 bytes nulos fuera del búfer reservado para
los datos. Tal como cuenta Esser en la notificación de la
vulnerabilidad, un certificado que contenga valores nulos en los campos
‘notBefore’ y ‘notAfter’ podría corromper la memoria y permitir la
ejecución de código arbitrario cuando se emplea la función
‘openssl_x509_parse’ para procesarlo.
Como curiosidad, Esser se encontró con una implementación bastante
antigua (de la versión de PHP 4.0.6) y descuidada en
‘asn1_time_to_time_t’, hasta el punto de que en el propio código de la
función aparecía el siguiente mensaje de debug de su autor:
“extension author too lazy to parse %s correctly”
(traducido: “El autor de la extensión es demasiado perezoso para
analizar %s correctamente”)
La vulnerabilidad, con CVE-2013-6420, ha sido corregida en las versiones
5.5.7, 5.4.23 y 5.3.28 de las respectivas ramas con mantenimiento. Son
vulnerables las ramas sin soporte: 5.2, 5.1, 5.0 y de la 4.0.6 a la
4.4.9.
Fuente
NOTA: Los interesados en información sobre contrato de soporte Asistencia Tecnica de SATINFO y/o licencia de uso/actualizaciones de sus utilidades, contacten con info@satinfo.es
__________
Este blog no se hace responsable de las opiniones y comentarios de los textos en los que se cita la Fuente, ofreciendo su contenido solo para facilitar el acceso a la información del mismo.
Puedes seguir cualquier respuesta a esta entrada mediante el canal RSS 2.0. Los comentarios y los pings están cerrados.
Los comentarios están cerrados.