lunes, 18 de noviembre de 2013

Ejecución de código en LiveZilla

Se ha anunciado una vulnerabilidad en LiveZilla que podría permitir a un atacante lograr ejecutar código arbitrario en los sistemas afectados.

LiveZilla es una solución online, que puede formar parte de cualquier web para dotarla de un sistema de chat, principalmente orientada al soporte técnico 'Help Desk'. Según los investigadores que han reportado la vulnerabilidad 'Curesec Research Team', LiveZilla estaría presente en un millón y medio de webs.

Este fallo fue reportado a LiveZilla por los investigadores el pasado 10 de Octubre y afecta a la versión 5.0.1.

La vulnerabilidad tiene asignada el CVE 'CVE-2013-6225' y podría permitir la ejecución de código remoto a través del fichero 'mobile/php/translation/index.php'.

$langFileLocation = ‘.’;
$LZLANG = Array();
if (isset($_GET['g_language'])) {
$language = ($_GET['g_language'] != ”) ? $_GET['g_language'] : ‘ein’;
require ($langFileLocation . ‘/langmobileorig.php’);
$LZLANGEN = $LZLANG;
if (file_exists($langFileLocation . ‘/langmobile’ . $language . ‘.php’)) {
require ($langFileLocation . ‘/langmobile’ . $language . ‘.php’);     <— eeeek it is a bug
}

El problema reside en que la variable $_GET['g_language'] no está correctamente validada, y podría ser especialmente manipulada pudiendo permitir la ejecución de código arbitrario.

La versión 5.1.0.0 que soluciona esta vulnerabilidad puede ser descargada desde: https://www.livezilla.net/downloads/pubfiles/LiveZilla_5.1.0.0_Full.exe

Más información:

Remote Code Execution in LiveZilla
  


Laboratorio Hispasec

2 comentarios:

  1. require ($langFileLocation . ‘/langmobile’ . $language . ‘.php’);
    Con esto lo que se me ocurre es la posibilidad de incluir un fichero que en un principio no está pensado que se incluya, escalando directorios pero ¿ejecución de código?

    require ($langFileLocation . ‘/langmobile’ . ¿ifconfig? . ‘.php’);

    ResponderEliminar
    Respuestas
    1. Está condicionado. La instalación de PHP debe permitir ataques de byte nulo o Null Byte Poison attack. Esto solo se da en instalaciones antiguas de PHP (las hay y muchas). Con este ataque haces que PHP "se coma" la extensión. Con esto ya puedes inyectar cualquier archivo local con cualquier o ninguna extensión (con permisos adecuados). Luego, haces uso de archivos donde puedas dejar rastro. Tal y como dice en el enlace del artículo, puedes escribir lo que quieras en Linux /proc/pid/environ o en Windows accediendo al registro de Apache. En ambos el truco está en meter código PHP en el User-Agent del navegador.

      Eliminar