the_open_door
café
ESEN
← Volver al índice

Duplicati login bypass

Duplicati es una herramienta de copias de seguridad con una interfaz web. Su autenticación no envía la contraseña en claro: usa un reto de tipo desafío-respuesta basado en una server-passphrase. El detalle clave es que esa passphrase se almacena en la base de datos de configuración (Duplicati-server.sqlite, tabla Option), codificada en Base64, y que el login se puede reproducir conociendo solo ese valor, sin la contraseña original.

El flujo legítimo de login es, a grandes rasgos:

  1. El cliente pide un nonce al servidor (/login.cgi).
  2. Calcula la respuesta combinando ese nonce con la passphrase mediante SHA-256.
  3. Envía esa respuesta; el servidor hace el mismo cálculo y compara.

Como la server-passphrase guardada es justamente el material que entra en ese cálculo, un atacante que la lea de la base de datos puede rehacer la respuesta y autenticarse. El procedimiento publicado consiste en pasar la passphrase de Base64 a hexadecimal y ejecutar, en la consola del navegador, el mismo cálculo que hace el cliente con el nonce que devuelve el servidor:

echo "<server-passphrase-base64>" | base64 -d | xxd -p -c 256

El resultado (los bytes en hexadecimal) se inyecta en el script de bypass del navegador, que completa el desafío-respuesta y deja una sesión válida.

Por qué importa tanto. Duplicati suele ejecutarse con privilegios altos (a menudo root) para poder leer y escribir cualquier fichero durante las copias. Una vez dentro del panel, se crea un trabajo de backup cuyo origen sea un directorio sensible (por ejemplo /root) y se usa la restauración para extraer esos ficheros a una ruta legible por nuestro usuario. La copia y la restauración heredan los privilegios del servicio: es lectura (y escritura) arbitraria como root, es decir, compromiso total.

Matiz. Depende de poder leer Duplicati-server.sqlite (hace falta un acceso previo al sistema) y de que el servicio sea accesible (a veces solo escucha en localhost, lo que obliga a un port forwarding previo).

Cómo detectarlo. La firma en disco es la lectura de Duplicati-server.sqlite por un proceso que no es Duplicati (auditd/FIM sobre ese fichero), el material del que sale la passphrase. En la aplicación, la firma es un trabajo de backup nuevo cuyo origen es un directorio sensible (/root, /etc) seguido de una restauración a una ruta legible por el atacante, algo que un uso legítimo no encadena; los logs de Duplicati los registran. Una sesión establecida desde una IP externa (tras un port-forward) sobre un servicio que debía escuchar en localhost es el indicio de red.

Defensa. No exponer la interfaz de Duplicati; proteger la base de datos de configuración; no ejecutar el servicio como root si no es imprescindible; y mantenerlo actualizado (versiones recientes endurecen este flujo). Relacionado con el port forwarding que suele precederlo.

RelacionadoCredential reuse

Máquinas donde se aplica