Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
Fastgate — CVE-2019-12489 | Kitploit
أدوات/GitHubGitHub/garis/fastgate
أمان الأنظمة المدمجةأمان إنترنت الأشياءتحليل الثغرات الأمنيةالاستغلالالهندسة العكسيةاستغلال تطبيقات الويبالقيادة والسيطرةأمن الأجهزةتحليل البرامج الثابتة
GitHubgaris/fastgate

Fastgate

CVE-2019-12489

213منذ 6 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
عرض المستودع

ملخص

هذا تقرير موجز عن ثغرة أمنية (CVE-2019-12489) تم اكتشافها أثناء اللعب بمودم/راوتر Fastgate من Fastweb وباستخدام Ghidra. تسمح الثغرة بتنفيذ حقن أوامر عبر طلب HTTP ويمكن استخدامها لتمكين واجهة SSH.

جمع البرامج الثابتة واستخراجها

جميع ملفات البرامج الثابتة موجودة في http://59.0.121.191:8080/ACS-server/file/FILENAME

حيث FILENAME يساوي:

  • 0.00.89_FW_200_Askey
  • 0.00.81_FW_200_Askey
  • 0.00.67_FW_200_Askey
  • 0.00.47_FW_200_Askey
  • 0.00.267_FW_200_Askey
  • 0.00.167_FW_200_Askey

لذا، على سبيل المثال، للحصول على آخر برنامج ثابت، اذهب إلى http://59.0.121.191:8080/ACS-server/file/0.00.89_FW_200_Askey

لاستخراج الملفات، نحتاج إلى الأداة الموجودة في https://github.com/nlitsme/ubidump (هذه أول أداة عملت معي).

عند تشغيل binwalk على الملف، نحصل على:

root@kitploit:~
$ binwalk 0.00.89_FW_200_Askey

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
94            0x5E            JFFS2 filesystem, little endian
3276894       0x32005E        UBI erase count header, version: 1, EC: 0x0, VID header offset: 0x800, data offset: 0x1000

لسنا بحاجة إلى نظام الملفات JFFS2، فقط جزء UBI. للقيام بذلك، يمكننا قص الملف باستخدام dd. للقيام بذلك، نحتاج إلى الحجم الكلي ونقطة بداية UBI.

يمكن الحصول على حجم الملف باستخدام ls:

root@kitploit:~
$ ls -la

total 55836
drwxr-xr-x  3 riccardo users     4096 set 24 10:07 .
drwx------ 83 riccardo users    12288 set 24 10:08 ..
-rw-r--r--  1 riccardo users 57147506 set 24 10:05 0.00.89_FW_200_Askey

القيمة 57147506 هي ما نحتاجه. بالنظر إلى مخرجات binwalk، نرى أن جزء UBI يبدأ عند 3276894. باستخدام هاتين القيمتين، يمكننا استخدام dd كالتالي:

root@kitploit:~
$ dd if=0.00.89_FW_200_Askey of=0.00.89_FW_200_Askey.UBI bs=1 skip=3276894 count=57147506

الآن يمكننا استخدام ubidump (بعد بعض الإعدادات الأولية حسب إعدادات النظام):

root@kitploit:~
$ git clone https://github.com/nlitsme/ubidump.git
$ sudo pip install crcmod
$ yay -S python-lzo
$ python ubidump/ubidump.py -s bump 0.00.89_FW_200_Askey.UBI

لدينا الآن نظام الملفات في bump/rootfs_ubifs/

يمكننا الآن المتابعة قليلاً في التحليل.

تحليل

بالنظر في نظام الملفات، نرى أن واجهة الويب تُدار بواسطة mini_httpd:

root@kitploit:~
$ grep -i -r "mini_httpd"
etc/sniproxy/urlfilter3.sh:ln -sf /usr/sbin/mini_httpd $URLFILTER_WEBD_PATH 
etc/sniproxy/urlfilter3.sh:$URLFILTER_WEBD_PATH -d $URLFILTER_WEB_PATH -c "**.cgi" -u admin -S -E /web/mini_httpd.pem -p $webd_https_port 
bin/web.sh:#mv /tmp/mini_httpd /usr/sbin 
bin/web.sh:killall -9 mini_httpd 
bin/web.sh:mini_httpd -d /web -c "STATUSAPI/**.cgi|STATUSAPI/*" -u admin -T "UTF-8" -p 8080

ونرى أن mini_httpd يعتمد على ملف .cgi:

root@kitploit:~
$ grep -i -r "status.cgi"
web/factory/mtcmd/mt_info.htm:          "url":"/status.cgi", 
web/fw-router/app/app.js:.value('apiServiceUrl', '/status.cgi') 
**web/js/status.js:var CGI_NAME='status.cgi';**
web/js/status.js:       "url":"http://192.168.101.93/STATUSAPI/status.cgi",
web/js/status.js:       "url":"http://192.168.101.93/STATUSAPI/status.cgi",
web/js/status.js:       "url":http://192.168.101.93/STATUSAPI/status.cgi,

لذا، باستخدام Ghidra، يمكننا البدء في النظر في ملف status.cgi

بتجاوز الكثير من التفاصيل، الثغرة موصوفة أدناه.

الاستغلال

أول شيء نبحث عنه هو دالة رئيسية مثل الموجودة في هذه الصورة:

صورة الرئيسية

نرى أنه يتم استدعاء setup. بعد البحث قليلاً، run_service(...) يبدو جوهر جميع الوظائف.

صورة setup

عند البحث عن &service_tab نرى أن بعض السلاسل المحددة مرتبطة بكود فعلي يتم تنفيذه بواسطة run_service(...)

صورة الخدمات

بعد النظر في هذه الدوال واحدة تلو الأخرى، عثرت على usb_remove

صورة usbremove

بالتفصيل:

root@kitploit:~
mountVal = (char *)find_val(httpparams,"mount");

يأخذ السلسلة من طلب URL مباشرة في متغير

root@kitploit:~
sprintf((char *)&mountLocation,"/mnt/%s",mountVal);

ينشئ مسارًا كاملاً بناءً على المعامل في طلب URL

root@kitploit:~
mountLocation

يستخدم mountLocation مباشرة في أمر

الآن، هناك فحوصات لمنع حقن الأوامر. على وجه الخصوص:

root@kitploit:~
invalidChars = 0x60273b7c;

تُستخدم للتحقق من بعض الأحرف غير الصالحة مثل ` ' ; | ولكن & غير موجود في القائمة، لذا إذا كان المعامل mount يساوي &ping -c 10 192.168.1.172& فسيؤدي الفحص إلى السماح بتنفيذ /statusapi/bin/umount -lf &ping -c 10 192.168.1.172&.

سينفذ أمر mount وسيفشل، لكن ping التالي سيتم تنفيذه.

التصحيح الرسمي

التصحيح المنشور يبسط الكود بإلغاء الفحوصات للأحرف الخاصة، ببساطة عن طريق التحقق من وجود المجلد.

صورة usbremovepatched

الكود لاستغلال هذه الثغرة وتمكين SSH موجود في fastwebEnableSSH.py https://github.com/garis/Fastgate/blob/master/fastwebEnableSSH.py

توقيت الإفصاح المسؤول مع Fastweb

  • 25 مايو 2019: الاكتشاف الأولي والاختبار
  • 26 مايو 2019: الإفصاح المسؤول وفقًا لـ https://www.fastweb.it/corporate/responsible-disclosure/
  • 27 مايو 2019: تأكيد الاتصال، مزيد من المعلومات ستكون متاحة بعد بعض التحليل من Fastweb
  • 26 يونيو 2019: التصحيح قيد الاختبار.
  • 25 يوليو 2019: التصحيح قيد الاختبار..
  • 21 أغسطس 2019: التصحيح قيد الاختبار...
  • 23 سبتمبر 2019: هيا يا Fastweb، أعطني على الأقل البرنامج الثابت المُصحح
  • 24 سبتمبر 2019: البرنامج الثابت المُصحح هو 0.00.89_FW_200_Askey (تم تأكيد التصحيح بعد تنزيل البرنامج الثابت)
  • 11 نوفمبر 2019: انتهاء نشر التصحيح
تنزيل الأداة