
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