
CVE-2023-34312
प्रभावित उत्पाद:
प्रभावित घटक:
Tencent QQ और TIM दो इंस्टेंट मैसेजिंग सॉफ्टवेयर हैं जो शेन्ज़ेन टेनसेंट कंप्यूटर सिस्टम कंपनी लिमिटेड द्वारा विकसित किए गए हैं। दोनों में एक घटक QQProtect.exe है जो %ProgramFiles(x86)%\Common Files\Tencent\QQProtect\bin में स्थित है। QQProtect.exe एक विंडोज सेवा के रूप में स्थापित होता है जिसका नाम QPCore है और सिस्टम शुरू होने पर स्वचालित रूप से NT Authority\SYSTEM के रूप में चलता है। QQProtect.exe और उसके निर्भर DLL QQProtectEngine.dll दोनों में एक मनमाना पता लिखने की कमजोरी है। कम विशेषाधिकार वाला हमलावर दो कमजोरियों को मिलाकर QQProtect.exe प्रक्रिया के अंदर एक दुर्भावनापूर्ण DLL लोड कर सकता है और NT Authority\SYSTEM शेल प्राप्त कर सकता है।
पहली कमजोरी QQProtect.exe+0x40c9f8 पर कोड है:

जहां a2 एक पॉइंटर है जिसे हमलावर नियंत्रित कर सकता है और dword_41a740 एक वैश्विक वेरिएबल है जिसका मान 0x00000001 है। इसलिए हमलावर किसी भी पते पर DWORD(1) मान लिख सकता है।
दूसरी कमजोरी QQProtectEngine.dll+0x3B4F6 पर कोड है:

जहां v3 एक पॉइंटर है जिसे हमलावर नियंत्रित कर सकता है। इसलिए हमलावर किसी भी दिए गए पते ptr पर std::bit_cast<DWORD>(ptr) + 4 मान लिख सकता है।
हमलावर QQProtect.exe में स्थित एक फंक्शन पॉइंटर के साथ छेड़छाड़ कर सकता है और ROP श्रृंखलाओं का उपयोग करके आसानी से मनमाना कोड निष्पादित कर सकता है, क्योंकि QQProtect.exe में ASLR सुरक्षा नहीं है।
पीओसी कोड रस्ट भाषा में लिखा गया है। आपको इसे संकलित करने के लिए 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>
