## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-AMPERCLOCK-CVE-2023-32784-KDBXPASSDMP
# keepass_dumper.py
Python-порт vdohney/keepass-password-dumper (CVE-2023-32784) — вся заслуга за оригинальную C#-реализацию и лежащую в основе технику принадлежит **vdohney**.
Скрипт сканирует дамп памяти процесса на предмет остаточных строк рендеринга, которые `SecureTextBoxEx` из KeePass 2.x оставляет после себя, пока пользователь вводит мастер-пароль, и восстанавливает каждый символ этого пароля, кроме первого. При необходимости он затем перебирает неизвестный первый символ по файлу KDBX с помощью `keepassxc-cli`.
## Затронутые версии
* **Уязвимые:** KeePass 2.53.1 и более ранние (Windows и Linux).
* **Исправленные:** KeePass **2.54** и более поздние.
* KeePassXC, KeePass 1.x и Strongbox **не** затронуты.
Недостаток кроется в пользовательском элементе управления `SecureTextBoxEx`: для каждого введённого символа .NET сохраняет в управляемой памяти остаточную строку вида `●a`, `●●s`, `●●●s`, … из которой можно восстановить каждый символ пароля, начиная со второго.
## Предварительные условия атаки и ограничения
* Требуется артефакт памяти процесса KeePass: дамп процесса, файл подкачки/свопинга, файл гибернации, аварийный дамп ядра или полный снимок ОЗУ. Выполнение кода на целевом хосте не требуется.
* Работает как при заблокированном, так и при разблокированном рабочем пространстве, а также даже после завершения процесса KeePass (если страницы памяти где-то сохранились).
* Самый первый символ пароля **не** восстанавливается из утечки.
* Утечка надёжно захватывает печатные ASCII-символы; не-ASCII символы менее надёжны.
* Несколько мастер-паролей, введённых в одном сеансе, могут давать перекрывающиеся остаточные строки и снижать точность.
## Меры по устранению
Если вы использовали KeePass ≤ 2.53.1, считайте мастер-пароль скомпрометированным:
1. Обновите KeePass до **2.54 или новее**.
2. Смените мастер-пароль (и ротируйте любые ценные секреты, хранящиеся в базе данных, которые вводились при использовании старого мастер-пароля).
3. Очистите артефакты памяти, которые всё ещё могут содержать остаточные строки:
* удалите аварийные дампы (например, `C:\Windows\memory.dmp`),
* отключите/очистите гибернацию (`powercfg /h off` в Windows),
* удалите или затирайте файл подкачки / своп-файл,
* перезапишите свободное место на диске (например, `cipher /w:` в Windows), чтобы остатки нельзя было извлечь из ранее выделенных секторов,
* перезагрузите систему — или, для сценариев с высокими требованиями к безопасности, переустановите ОС.
## Требования
* Python 3.10+ (только стандартная библиотека — сторонние пакеты не требуются)
* `keepassxc-cli` в `$PATH` (нужен только для `--kdbx`)
## Установка
В Debian / Ubuntu установите CLI KeePassXC, если планируете перебор:
root@kitploit:~
sudo apt install keepassxc
## Использование
root@kitploit:~
# Восстановить символы-кандидаты и вывести их
python3 keepass_dumper.py memory.dmp
# Сохранить сгенерированный список кандидатов в файл
python3 keepass_dumper.py memory.dmp -p candidates.txt
# Восстановить и перебрать недостающий первый символ по KDBX
python3 keepass_dumper.py memory.dmp --kdbx db.kdbx
Выполните `python3 keepass_dumper.py --help` для получения полного списка опций.
## Чем отличается от оригинала
* Более строгий фильтр сканирования (по умолчанию печатные ASCII) для сокращения ложных срабатываний.
* Набор символов с приоритетным порядком (буквы → цифры → распространённые знаки препинания → остальное), чтобы наиболее вероятные кандидаты проверялись первыми.
* Чтение дампа на основе mmap, однострочный индикатор прогресса, более тихий вывод.