
CVE-2023-34312
影響を受ける製品:
影響を受けるコンポーネント:
Tencent QQ と TIM は、Shenzhen Tencent Computer System Co., Ltd. によって開発された2つのインスタントメッセージングソフトウェアです。どちらにも %ProgramFiles(x86)%\Common Files\Tencent\QQProtect\bin に配置されている QQProtect.exe というコンポーネントがあります。QQProtect.exe は QPCore という名前のWindowsサービスとしてインストールされ、システム起動時に自動的に NT Authority\SYSTEM として実行されます。QQProtect.exe コンポーネントと、その依存DLLである QQProtectEngine.dll の両方に、任意アドレス書き込みの脆弱性があります。低権限の攻撃者がこの2つの脆弱性を組み合わせることで、QQProtect.exe プロセス内に悪意のあるDLLを読み込ませ、NT Authority\SYSTEM シェルを取得できます。
1つ目の脆弱性は、QQProtect.exe+0x40c9f8 のコードです。

ここで、a2 は攻撃者が制御できるポインタであり、dword_41a740 は値が 0x00000001 のグローバル変数です。したがって、攻撃者は任意のアドレスに値 DWORD(1) を書き込むことができます。
2つ目の脆弱性は、QQProtectEngine.dll+0x3B4F6 のコードです。

ここで、v3 は攻撃者が制御できるポインタです。したがって、攻撃者は任意のアドレス ptr に対して値 std::bit_cast<DWORD>(ptr) + 4 を書き込むことができます。
攻撃者は QQProtect.exe 内に存在する関数ポインタを改ざんし、ROPチェーンを使用して任意のコードを簡単に実行できます。これは QQProtect.exe にASLR保護がないためです。
PoCコードはRust言語で書かれています。コンパイルには i686-pc-windows-msvc ツールチェーンを使用してください。
$ cd poc
$ cargo +stable-i686-pc-windows-msvc build --release --config "build.rustflags = [\"-C\", \"target-feature=+crt-static\"]"
以下の2つのDLLが得られます:
target\release\tinyxml.dll
target\release\evil.dll
次に、上記の2つのDLLと %ProgramFiles(x86)%\Common Files\Tencent\QQProtect\bin\QQProtect.exe を同じフォルダに置きます。
最後に、次の1つのコマンドで NT Authority\SYSTEM シェルを取得します:
$ QQProtect.exe <PATH TO evil.dll>
