
Linux向けKeePassマスターパスワード抽出PoC
vdohney の脆弱性発見と責任ある報告、そして Dominik Reichl の素晴らしいオープンソースソフトウェアと迅速な問題認識・修正に感謝します。
おそらく必要ありません。このエクスプロイトは /proc 仮想ファイルシステムへのアクセスが必要です。具体的には proc/[pid]/mem です。
procのマニュアルによると、このファイルへのアクセスは ptrace アクセスモード PTRACE_MODE_ATTACH_FSCREDS によって制御され、ほとんどのシステムでは root ユーザーのみに制限されています。
悪意のあるアクターがすでにこれらのファイルにアクセスできる場合、それ以上の大きな懸念があるはずです。
KeePass 2.54 がリリースされ次第(2023年7月頃)、アップデートしてください。これにより問題がある程度緩和されます。(Forum)
まず、Keepassのプロセスメモリをダンプすることから始まります。
デフォルトの動作では、すべての /proc/<pid>/cmdline ファイルをスキャンし、コマンドライン引数に KeePass というキーワードを含むプロセスの pid を保存します。
次に、/proc/<pid>/maps 内のメモリマップのうち、ライブラリに直接関連していないもの(つまり、ファイルパスが空のもの)のアドレスを取得します。
そして、/proc/<pid>/mem を利用して、それらのマップのメモリをすべてバッファに保存します。これはLinux上の任意のプロセスのメモリをダンプする原始的な動作です。
メモリを解析して、ユーザーがマスターパスワードを入力した際に残った文字列(•a, ••s, •••s のような連続した文字列)を探します。最初の文字は欠落しています。その他の機能についてはコードを参照してください。
gcc dump_pwd.c -o dump で準備完了です。
