
Se ha descubierto una vulnerabilidad crítica en la función extract() de PHP, que permite a los atacantes ejecutar código arbitrario aprovechando fallos de corrupción de memoria.
El problema afecta a las versiones de PHP 5.x, 7.x y 8.x, lo que permite a los atacantes activar condiciones de doble liberación (PHP 5.x) o de uso después de la liberación (PHP 7.x/8.x), lo que finalmente provoca la ejecución remota de código (RCE).
Según el informe de SSD, la falla se debe a un manejo incorrecto del indicador EXTR_REFS en extract(), que importa variables a la tabla de símbolos como referencias. Al sobrescribir variables existentes, la función llama a zval_ptr_dtor para destruir el valor original. Si la variable original es un objeto, su método __destruct se invoca durante la destrucción, lo que permite a los atacantes manipular la entrada.
Los exploits de prueba de concepto demuestran cómo encadenar estas primitivas para lograr RCE. Por ejemplo, sobrescribir el controlador de una función deshabilitada como system() con una dirección legítima restaura su capacidad de ejecución.
El equipo de PHP ha corregido el problema en el aviso de GitHub GHSA-4pwq-3fv3-gm94 (aún no publicado). Los administradores deben:
- Actualizar PHP a la última versión inmediatamente.
- Auditar el código para detectar el uso inseguro de extract(), especialmente con datos controlados por el usuario (p. ej., extract($_POST)).
- Reemplazar extract() con asignaciones explícitas de variables o usar indicadores como EXTR_PREFIX_ALL para aislar variables.
Esta vulnerabilidad pone de relieve los riesgos de larga data en extract() de PHP, que se ha señalado durante décadas como susceptible a un uso indebido. Se insta a los desarrolladores a evitar extract() por completo para la entrada del usuario y a adoptar prácticas de codificación seguras.
La vulnerabilidad extract() resalta los peligros de las funciones heredadas en los ecosistemas modernos. Si bien existen parches disponibles, las revisiones proactivas de código y las actualizaciones de dependencias siguen siendo cruciales para mitigar estos riesgos.
Las organizaciones que usan PHP deben priorizar la actualización y la eliminación de patrones inseguros para evitar su explotación.
Fuente: GBHackers