Seguridad

Nuevo 0day que afecta a versiones antiguas de Joomla!

Ha sido encontrada una nueva vulnerabilidad en versiones antiguas de Joomla! que permitiría ejecutar código remoto a partir de una inyección de objetos en PHP.

La vulnerabilidad ha sido descubierta por el investigador Alessandro Groppo de Hacktive Security, y afecta a las versiones comprendidas entre la 3.0.0 y la 3.4.6. A pesar de no ser versiones actuales, es importante tener en cuenta que aún hay muchos sitios web que utilizan estas versiones antiguas de este CMS por cuestión de compatibilidad con temas y plugins.

Este fallo de seguridad se podría aprovechar a través de una inyección de objetos en PHP. El mejor escenario para reproducir este error sería el login de Joomla!, ya que los valores introducidos en los campos de usuario y contraseña se almacenan en un objeto serializado de manera consecutiva en una cookie de sesión. Y a su vez, los objetos definidos en la cookie de Joomla! se almacenan en su base de datos, valiéndose de dos funciones que permiten operar sobre la base de datos con dicho objeto: read() y write().

Al realizar una acción de lectura o escritura de un objeto en la base de datos, la función correspondiente reemplaza el valor «0x2ax00» por «» en el caso de escritura (en la función write()) o viceversa reemplazando «» por «0x2ax00» en caso de lectura (en la función read()). Estos reemplazos se realizan debido a que las variables $protected tienen el prefijo «0x2ax00» en el objeto serializado pero en MySQL no es posible almacenar Null Bytes.

Este paso es muy importante para realizar con éxito la inyección, ya que si se introduce en el campo username, a la hora de escribirlo, se guardará tal cual:

s:8:s:"username";s:16:"myusername"

Sin embargo al realizar la lectura con la función read(), modificará el valor de los 6 caracteres reduciéndolo a 3:

s:8:s:"username";s:16:"myN*Nusername"
(indica string de 16 caracteres pero hay 13 caracteres)

Al tener control sobre usuario y contraseña, que son campos consecutivos en el objeto serializado como se observa en la siguiente imagen, es posible realizar un desbordamiento en el primer campo (usuario) dejando el segundo campo libre para inyectar el código del exploit en forma de objeto que daría paso a la ejecución remota de código.

Alessandro explica cada paso a realizar en el blog de hacktivesecurity. Además hace alusión al CVE-2015-8562, que afecta a las mismas versiones de Joomla!, aunque remarca como punto positivo que es independiente de las versiones de PHP en el servidor.

Se ha hecho público un exploit por lo que se recomienda actualizar a una versión de Joomla! que no sea vulnerable.

Más información

Rusty Joomla RCE
https://blog.hacktivesecurity.com/index.php?controller=post&action=view&id_post=41

Joomla 3.4.6 – ‘configuration.php’ Remote Code Execution
https://www.exploit-db.com/exploits/47465

Joomla! 3 Download
https://downloads.joomla.org/cms/joomla3

Powered by WPeMatico

Gustavo Genez

Informático de corazón y apasionado por la tecnología. La misión de este blog es llegar a los usuarios y profesionales con información y trucos acerca de la Seguridad Informática.