Código que explota dos vulnerabilidades críticas de PHP (< 8.0.30) publicado

PHP es un lenguaje de programación ampliamente utilizado que se utiliza en la producción de páginas web dinámicas. Por otro lado, al igual que cualquier otro programa, no está completamente a salvo de fallas de seguridad. CVE-2023-3823 y CVE-2023-3824 son los nombres de dos nuevas fallas de seguridad que se identificaron en PHP durante los últimos meses.


CVE-2023-3823 (PUNTUACIÓN DE 8,6 EN LA ESCALA CVSS): DIVULGACIÓN DE INFORMACIÓN


Existe una vulnerabilidad de divulgación de información conocida como CVE-2023-3823 en las aplicaciones PHP y hace posible que un atacante remoto acceda a datos confidenciales almacenados dentro de dichas aplicaciones. La validación inadecuada de la entrada XML proporcionada por el usuario es la causa raíz de la vulnerabilidad. El atacante podría aprovechar esta vulnerabilidad haciendo que transmita una pieza de código XML especialmente diseñada al programa. Luego, el programa procedería a analizar el código, momento en el cual el atacante podría obtener acceso a información confidencial, como el contenido de archivos arbitrarios en el sistema o los resultados de consultas realizadas a fuentes externas.

Este problema puede afectar a cualquier programa, biblioteca o servicio que interactúe con documentos XML de cualquier forma, incluido el procesamiento o la comunicación con ellos. Debido al arduo trabajo realizado por nickvergessen, un investigador de seguridad, quien también lanzó la prueba de concepto.

CVE-2023-3824 ES UNA VULNERABILIDAD DE DESBORDAMIENTO DE BÚFER QUE TIENE UNA PUNTUACIÓN CVSS DE 9,4.

Un atacante remoto podría ejecutar código arbitrario en un sistema PHP si aprovechara la vulnerabilidad de desbordamiento de búfer conocida como CVE-2023-3824. Este problema es rastreado por el identificador CVE. La verificación de límites insuficiente realizada por el método phar_dir_read() es la causa principal de la vulnerabilidad. Al enviar una solicitud a la aplicación que ha sido cuidadosamente diseñada, un adversario podría aprovechar esta vulnerabilidad. La solicitud daría como resultado un desbordamiento del búfer, lo que le daría al adversario la capacidad de tomar el control del sistema y ejecutar el código que quisiera.

La dificultad de explotar esta vulnerabilidad se deriva del hecho de que implica una serie de comprobaciones y desbordamientos defectuosos. Por ejemplo, se descubrió que la condición “to_read == 0 || count ZSTR_LEN(str_key)” tenía fallas y no debería haberse usado. Esto tiene una serie de repercusiones en el código, una de las cuales es que hay un problema con la línea ((php_stream_dirent *) buf)->d_name[to_read + 1] = ‘0’;. Este fragmento de código tiene el potencial de desbordarse y no termina en NUL el nombre de archivo de la manera correcta. El problema se ha comparado con una fuga de información de la pila, así como con un desbordamiento de escritura del búfer, que solo sirve para exacerbar la situación. Además de eso, puede haber preocupaciones potenciales sobre un desbordamiento del búfer en el conjunto de memoria. Aunque no se han detectado tales ocurrencias dentro de PHP,

Aunque la explotación es ciertamente difícil y depende de la aplicación particular a la que se dirige, es teóricamente posible. Según la alerta emitida por el equipo de seguridad, “las personas que inspeccionan el contenido de los archivos phar que no son de confianza podrían verse afectadas”.

La prueba de concepto también se publicó gracias a los esfuerzos del investigador de seguridad nielsdos, a quien se le atribuye su trabajo.

En PHP 8.0.30, también se han solucionado las vulnerabilidades CVE-2023-3823 y CVE-2023-3824. Si todavía está utilizando una versión anterior de PHP, debería considerar actualizar tan pronto como pueda a la versión 8.0.30.