sábado, 11 de agosto de 2018

Corregida en pocas horas, grave vulnerabilidad remota en CGit

Esta semana se ha resuelto una grave vulnerabilidad remota en CGit, relacionada con el salto de restricciones (Path traversal) y la capacidad de mostrar información sensible del servidor cgit vulnerado. En unas pocas horas el fallo fue corregido por los desarrolladores.
CGit es una interfaz web (CGI) del sistema de repositorios git, escrito en C, que facilita la gestión remota entre diferentes usuarios.

La vulnerabilidad (CVE-2018-14912), descubierta por el investigador de Google Project Zero, Jann Horn, estaba localizada en la función cgit_clone_objects() y específicamente en la combinación de send_file() y git_path().
Esta última función no aplicaba los filtros necesarios en las rutas recibidas, para impedir este tipo de vulnerabilidad. Al explotarse, cualquier usuario malintencionado podría construir peticiones de este tipo:


http://<servidor>/cgit/cgit.cgi/git/objects/?path=


que, al ejecutarse por parte del servidor, devolverían el contenido del path/fichero invocado. Ejemplo de una petición utilizando curl, que mostraría el fichero de usuarios del sistema:

$ curl http://127.0.0.1/cgit/cgit.cgi/git/objects/?path=../../../../../../../etc/passwd

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

Analizando el diff dispuesto para corregir la vulnerabilidad, se detalla además que el fallo fue introducido en 2008Debido a la longevidad de la misma (las versiones 0.8 a la 1.2 se verían afectadas) y que es trivial a la hora de explotarse, recomendamos encarecidamente actualizar urgentemente a la última versión disponible CGit 1.2.1:
git://git.zx2c4.com/cgit


José Mesa
@jsmesa

Más información:

cgit: directory traversal in cgit_clone_objects()
https://bugs.chromium.org/p/project-zero/issues/detail?id=1627

clone: fix directory traversal
https://git.zx2c4.com/cgit/commit/?id=53efaf30b50f095cad8c160488c74bba3e3b2680