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 «\00\x2a\x00» por «\0\0\0» en el caso de
escritura (en la función write()) o viceversa reemplazando «\0\0\0» por
«\00\x2a\x00» en caso de lectura (en la función read()). Estos reemplazos se
realizan debido a que las variables $protected tienen el prefijo «\00\x2a\x00»
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 \0\0\0
en el campo username, a la hora de escribirlo, se guardará tal cual:
s:8:s:"username";s:16:"my\0\0\0username"
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
Fuente: Hispasec