the_open_door
café
ESEN
← Volver al índice

PortableKanban password decryption

PortableKanban es una aplicación de tableros Kanban portable que almacena su configuración y las credenciales de usuario en ficheros locales (PortableKanban.cfg, PortableKanban.pk3). El problema: las contraseñas no se hashean, se cifran de forma reversible con DES usando una clave y un IV fijos y embebidos en el propio programa. Cualquiera que conozca esos parámetros puede recuperar la contraseña en claro.

Existe un exploit público (Exploit-DB 49409) que implementa el descifrado. En esencia:

# searchsploit -m 49409   para traer el exploit
import base64
from des import *      # python3 -m pip install des
enc  = "Odh7N3L9aVSeHQmgK/nj7RQL8MEYCUMb"   # EncryptedPassword
key  = DesKey(b"7ly6UznJ")
print(key.decrypt(base64.b64decode(enc), initial=b"XuVUm5fR", padding=True).decode())

La clave (7ly6UznJ) y el IV (XuVUm5fR) son constantes del programa, así que el mismo script vale para cualquier contraseña cifrada de PortableKanban, venga del .cfg, del .pk3 o de otro sitio donde la app guarde ese formato.

Dónde aparecen estos hashes. El obvio es el propio fichero de configuración en el perfil del usuario. Pero el formato puede reaparecer en otros servicios que reutilicen el almacén de PortableKanban: en Atom, una entrada de Redis guardaba el objeto del Administrator con un EncryptedPassword en el mismo formato, descifrable con idéntico método.

Defensa. No confiar en cifrado simétrico con clave embebida (es, a efectos prácticos, ofuscación); usar el almacén de credenciales del sistema operativo o algoritmos de derivación con secreto por instalación. Y, como siempre, no reutilizar la misma contraseña entre cuentas/servicios: aquí la cadena cae porque la clave descifrada sirve para Redis y de ahí para el Administrator (reutilización de credenciales).

Máquinas donde se aplica