Vulnerabilidad crítica en Zend Framework permite la ejecución de código remoto

Acorde a un reciente reporte, los grupos de hacking malicioso pueden abusar de una vulnerabilidad de deserialización en Zend Framework para ejecutar código remoto en sitios PHP. Identificada como CVE-2021-3007, esta falla también podría presentarse en algunas implementaciones de Laminas Project.

Ling Yizhou, especialista en ciberseguridad, menciona en su reporte: “Zend Framework 3.0.0 es afectado por una vulnerabilidad que podría conducir a un escenario de ejecución remota de código si el contenido es controlable, relacionado con el método __destruct de clase Zend\Http\Response\Stream en Stream.php“.   

Estas fallas ocurren cuando los datos codificados que la aplicación recibe del usuario o sistema no se validan adecuadamente antes de que la aplicación realice la decodificación. En consecuencia, se puede conducir a una condición de denegación de servicio (DoS) en la aplicación vulnerable.

En el caso de Zend, la falla proviene del destructor de la clase Stream; en programación orientada a objetivos, los métodos de construcción y destrucción se llaman cuando se crea y destruye un nuevo objeto de clase. Cuando el objetivo cumple su propósito en el programa, el intérprete PGO llamará al destructor del objetivo y seguirá otra secuencia de comandos para liberar memoria. El experto menciona que el método unlink (), llamado por el destructor Stream, esperará un nombre de archivo como parámetro, que es del tipo de datos de la cadena.

Si el objeto streamName fuese de un tipo diferente, al final de la ejecución aún se pasaría al destructor; este a su vez intentaría llamar al método __toString para obtener su valor equivalente a la cadena. Este método podría ser modificado fácilmente por el creador del objetivo.

El experto menciona que __toString en la clase Gravator de Zend Framework había sido escrito por sus programadores de tal manera que es posible devolver valores sobre los que el atacante tiene el control directo, lo que deviene en la ejecución de código arbitrario. Si la clase Stream recibe un objeto Gravator donde se espera streamName, bajo ciertas circunstancias, un hacker malicioso podría ejecutar comandos arbitrarios dentro de aplicaciones PHP vulnerables creadas con Zend.

PHP opera en cerca del 80% de los sitios web activos, sin mencionar la popularidad de Zend Framework. Se recomienda a los administradores de sistemas verificar a detalle sus aplicaciones web para prevenir la explotación del ataque.