
CVE-2023-34312
المنتجات المتأثرة:
المكونات المتأثرة:
Tencent QQ وTIM هما برنامجان للمراسلة الفورية طورتهما شركة Shenzhen Tencent Computer System Co., Ltd. كلاهما يحتوي على مكون QQProtect.exe موجود في %ProgramFiles(x86)%\Common Files\Tencent\QQProtect\bin. يتم تثبيت QQProtect.exe كخدمة Windows تسمى QPCore ويعمل كـ NT Authority\SYSTEM تلقائياً عند بدء تشغيل النظام. كلا المكونين QQProtect.exe وملف DLL التابع له QQProtectEngine.dll يحتويان على ثغرة كتابة عنوان عشوائي. يمكن للمهاجم ذو الامتياز المنخفض تحميل DLL خبيث داخل عملية QQProtect.exe من خلال الجمع بين الثغريتين والحصول على شيل NT Authority\SYSTEM.
الثغرة الأولى هي الكود في QQProtect.exe+0x40c9f8:

حيث أن a2 هو مؤشر يمكن للمهاجم التحكم فيه وdword_41a740 هو متغير عام قيمته 0x00000001. لذلك يمكن للمهاجم كتابة القيمة DWORD(1) في أي عنوان.
الثغرة الثانية هي الكود في QQProtectEngine.dll+0x3B4F6:

حيث أن v3 هو مؤشر يمكن للمهاجم التحكم فيه. لذلك يمكن للمهاجم كتابة القيمة std::bit_cast<DWORD>(ptr) + 4 في أي عنوان معطى ptr.
يمكن للمهاجم العبث بمؤشر دالة موجود في QQProtect.exe واستخدام سلاسل ROP لتنفيذ كود عشوائي بسهولة نظراً لأن QQProtect.exe لا يحتوي على حماية ASLR.
كود الإثبات مكتوب بلغة Rust. يجب عليك استخدام سلسلة أدوات i686-pc-windows-msvc لتجميعه.
$ cd poc
$ cargo +stable-i686-pc-windows-msvc build --release --config "build.rustflags = [\"-C\", \"target-feature=+crt-static\"]"
ستحصل على ملفي DLL:
target\release\tinyxml.dll
target\release\evil.dll
ثم ضع ملفي DLL أعلاه و %ProgramFiles(x86)%\Common Files\Tencent\QQProtect\bin\QQProtect.exe معاً في مجلد.
أخيراً احصل على شيل NT Authority\SYSTEM بأمر واحد:
$ QQProtect.exe <PATH TO evil.dll>
