
جولة عملية في تحليل الثغرة الأمنية CVE-2025-59359، وهي ثغرة حرجة في حقن الأوامر على مستوى نظام التشغيل في Chaos-Mesh. تعرّف على كيفية استغلال المهاجمين لمجموعات Kubernetes عبر طفرات GraphQL، وكيفية اكتشاف الاختراق وتحليله والإبلاغ عنه باستخدام ELK.
دليل جنائي عملي لـ CVE-2025-59359، وهو ثغرة حرجة في حقن أوامر نظام التشغيل في Chaos-Mesh. تعرّف على كيفية اختطاف المهاجمين لمجموعات Kubernetes عبر طفرات GraphQL، وكيفية اكتشاف الاختراق وتحليله والإبلاغ عنه باستخدام ELK.
بواسطة Mark Mallia
تكشف CVE-2025-59359 عن ثغرة حرجة في حقن أوامر نظام التشغيل في Controller Manager الخاص بـ Chaos-Mesh. تسمح هذه الثغرة للمهاجمين بتنفيذ أوامر شل عشوائية عبر حاويات Kubernetes، مما قد يؤدي إلى اختراق كامل للمجموعة. تحاكي هذه المقالة عملية الاستغلال، وتُعيّن بصمته الجنائية، وتوضح استراتيجيات الكشف والتخفيف ذات الصلة بكل من الفرق التقنية وأصحاب المصلحة التنفيذيين.
في عالم أمان Kubernetes المتطور باستمرار، تبرز CVE-2025-59359 كتذكير صارخ بكيف يمكن لمدخل واحد غير مُراقَب أن ينهار مجموعة بأكملها. تؤثر هذه الثغرة الحرجة (CVSS 9.8) على Controller Manager الخاص بـ Chaos-Mesh، حيث يتم ربط المعاملات التي يوفرها المستخدم بتهور في أوامر شل دون أي فحوصات أو تنظيف. النتيجة؟ يمكن للمهاجم غير المُوثَّق داخل المجموعة تنفيذ أوامر عشوائية عبر الحاويات، والحصول على سيطرة كاملة بسهولة مقلقة. إنها حالة دراسية كلاسيكية لتصعيد الامتيازات من خلال حقن الأوامر، ومثال قوي على أهمية الوصايا الآمنة في البرمجة في البيئات السحابية.
توجد الثغرة داخل طفرة cleanTcs. تقوم هذه الطفرة بمسح إعدادات التحكم في حركة المرور (TC) في Linux بعد تجارب الفوضى، وتقبل معاملات يوفرها المستخدم من مواصفات التجربة. عندما يقدم المهاجم قيمة مُصمَّمة لتلك المعاملات، يتم بناء أمر الشل الناتج عن طريق ربط السلاسل. لا يتم إجراء أي فحوصات دفاعية قبل تنفيذ هذا الأمر بصلاحيات Controller Manager – مما يعني أن مستخدمًا غير مُوثَّق يمكنه حقن أوامر عشوائية في أي حاوية أو مساحة اسم تتحكم فيها المجموعة.
أدناه مقتطف من شفرة مصدر الطفرة (معروض في سياق تنفيذها بلغة Go).
// cleanTcsMutation.go
func executeCleanTcs(ctx context.Context, payload Payload) error {
// Build command string using user input directly
cmd := fmt.Sprintf(
"tc qdisc add dev %s root handle 1: htb rate %s ceil %s",
payload.Device,
payload.Rate,
payload.Ceil,
)
log.Debugf("Running command: %s", cmd)
if err := ctx.RunCommand(cmd); err != nil {
return fmt.Errorf("tc clean mutation failed: %w", err)
}
return nil
}
Device وRate وCeil.تخيل مجموعة Kubernetes تعمل بـ Chaos-Mesh، حيث يقوم المهاجم بصياغة مواصفات تجربة تبدو بريئة. ولكن بدلاً من ضبط التحكم في حركة المرور، يقوم بإدراج حمولة مثل ; rm -rf /tmp في حقول مثل Device أو Rate أو Ceil. بمجرد إرسالها عبر واجهة المستخدم أو API، تقوم الطفرة ببناء الأمر وتنفيذه بشكل أعمى—بدون تنظيف أو حواجز حماية. ولأنها تعمل بصلاحيات controller-manager، تنتشر الشفرة المحقونة عبر الحاويات كالنار في الهشيم. والأسوأ من ذلك، إذا استغل المهاجم أيضًا CVE-2025-59358 للوصول إلى نقطة نهاية GraphQL دون توثيق، فإنهم لا يحتاجون حتى إلى بيانات اعتماد.
إذا تم استغلالها في الإنتاج، يمكن لـ CVE-2025-59359 أن تسمح للمهاجمين بتعطيل الخدمات، والوصول إلى أعباء العمل الحساسة، والتنقل عبر مساحات الأسماء—مما يشكل خطرًا ماديًا على استمرارية الأعمال والامتثال التنظيمي. يجب على المؤسسات التي تستخدم Chaos-Mesh إعطاء الأولوية للتصحيح، وتطبيق RBAC، وتدقيق نقطة نهاية GraphQL.
| التكتيك | التقنية |
|---|---|
| التنفيذ | T1059 – Command and Scripting Interpreter |
| تصعيد الامتيازات | T1068 – Exploitation for Privilege Escalation |
| الحركة الجانبية | T1021 – Remote Services |
| التأثير |
cleanTcs.أنشئ ملفًا logstash-tcs.conf في دليل تكوين Logstash.
input {
beats {
port => 5044
codec => "json"
}
}
filter {
# The Python script will be referenced here.
python {
code => "/opt/elk/python/process_tcs.py"
add_field => { "[tcs]" => "%{[message][device]}-%{[message][rate]}-%{[message][ceil]}" }
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "chaos-tcs"
document_type => "experiment"
codec => "json"
}
}
process_tcs.py#!/usr/bin/python3
def process(event):
"""
Transforms the raw event from Logstash into a JSON document suitable for Elasticsearch.
Expected input format (example):
{
"message": {
"device": "eth0",
"rate": "100mbit/s",
"ceil": "200mbit/s",
"timestamp": "2025‑09‑18T14:33:00Z"
}
}
The script extracts the three key values, normalises them and returns a dictionary.
"""
# 1. Grab nested fields
device = event.get("message", {}).get("device", "")
rate = event.get("message", {}).get("rate", "")
ceil = event.get("message", {}).get("ceil", "")
# 2. Normalise numeric values – remove unit suffixes and cast to float.
def strip_unit(val, unit):
return float(val.replace(unit, "").strip())
rate_val = strip_unit(rate, "mbit/s")
ceil_val = strip_unit(ceil, "mbit/s")
# 3. Build output dict
result = {
"device": device,
"rate_mbit_s": rate_val,
"ceil_mbit_s": ceil_val,
"ts": event.get("message", {}).get("timestamp", ""),
"tcs_id": f"{device}-{rate_val}-{ceil_val}"
}
# 4. Return the dict
return result
أنشئ ملف تعيين chaos-tcs-mapping.json:
{
"mappings": {
"_doc": {
"properties": {
"device": { "type": "keyword" },
"rate_mbit_s":{ "type":"float" },
"ceil_mbit_s":{ "type":"float" },
"ts": { "type":"date", "format":"yyyy-MM-dd'T'HH:mm:ssZ"},
"tcs_id": { "type":"keyword" }
}
}
}
}
لتصور تأثير CVE-2025-59359 في الوقت الفعلي، تقدم لوحة المعلومات ثلاثة ألواح رئيسية تحول بيانات تجارب الفوضى الخام إلى رؤى قابلة للتنفيذ. يتتبع الرسم البياني الزمني rate_mbit_s لكل حاوية، مجمعة حسب مساحة الاسم، مما يساعد الفرق على اكتشاف الحالات الشاذة في تشكيل حركة المرور عبر المجموعة. يُظهر الرسم البياني التكراري حجم التجارب في الساعة ويطلق إنذارات عندما يتجاوز المعدل 1.5 ضعف المتوسط، مما يكشف عن استغلال محتمل أو أنماط هجوم آلية. أخيرًا، يسرد جدول التصفية كل tcs_id مع حالة تنفيذه وعلامة النجاح، مما يسمح للمحققين بعزل التجارب الفاشلة أو المشبوهة بسرعة. معًا، تشكل هذه الألواح عدسة جنائية لكيفية تطور حقن الأوامر في بيئات Kubernetes.
أضف قاعدة تنبيه بسيطة:
PUT /chaos-tcs/_settings
{
"number_of_shards": 2,
"number_of_replicas": 1
}
أنشئ خط أنابيب إدخال يستخدم سكربت Python أعلاه، ثم قم بتكوين تنبيه Kibana ليتم إطلاقه عندما ينحرف rate_mbit_s بأكثر من 15% عن متوسطه المتحرك لمدة 24 ساعة.
ليست CVE-2025-59359 مجرد سطر آخر في قاعدة بيانات الثغرات الأمنية؛ إنها مثال واضح على كيف يمكن لإهمال تنظيف المدخلات أن ينهار أمان مجموعة Kubernetes بأكملها. من خلال استعراض هذا الاستغلال، رأينا كيف يمكن لطفرة واحدة في Chaos-Mesh أن تصبح بوابة لتنفيذ التعليمات البرمجية عن بُعد، وتصعيد الامتيازات، واختراق الحاويات بالكامل. ولكن الأهم من ذلك، أوضحنا كيف يمكن للرصد والأدوات الجنائية ومنطق الكشف المدروس أن يحول الفوضى إلى وضوح.
هذا المشروع مخصص للاستخدام التعليمي والأخلاقي فقط. تم تصميم جميع العروض التوضيحية والمحاكاة والأدلة الجنائية لزيادة الوعي بالثغرات الواقعية وتعزيز البرمجة الآمنة والإفصاح المسؤول واستراتيجيات الدفاع الاستباقية. لا يجوز تحت أي ظرف من الظروف استخدام التقنيات أو الرؤى المقدمة هنا لاختراق أو تعطيل أو استغلال الأنظمة الحية دون إذن صريح.
| T1499 – Endpoint Denial of Service |
| العنصر | الإجراء |
|---|
| خدمة Logstash | تأكد من أن إدخال beats يستمع على المنفذ 5044. |
| أذونات سكربت Python | يجب أن يكون /opt/elk/python/process_tcs.py قابلاً للتنفيذ (chmod +x). |
| فهرس Elasticsearch | PUT /chaos‑tcs/_mapping باستخدام ملف التعيين. |
| لوحة معلومات Kibana | استورد تعريف JSON واحفظه باسم Command‑Injection Overview. |
| مجموعة الأمان | اسمح بحركة المرور على المنفذ 5044 من عُقد Kubernetes الخاصة بك. |
| المراقبة | أضف مهمة cron لتشغيل curl -s http://localhost:9200/_cat/indices?v كل 5 دقائق لتأكيد صحة الفهرس. |