
تحليل متعمق لـ CVE 2023 38408، وهي ثغرة أمنية خطيرة في OpenSSH، بما في ذلك الخلفية التقنية، والاستغلال في بيئات محكومة، واستراتيجيات التخفيف.
الغرض من هذا التقرير هو تحليل ثغرة CVE-2023-38408، وهي ثغرة حرجة تم اكتشافها في OpenSSH في العالم الحقيقي، من خلال الفهم النظري والمحاكاة العملية. يشرح التقرير الأسس التقنية للثغرة، ويوضح كيفية استغلالها في بيئات خاضعة للتحكم، ويدرس الإجراءات التخفيفية المطبقة.
فهم الثغرات الأمنية في العالم الحقيقي من خلال المحاكاة العملية لا يساعد فقط في حماية الأنظمة بل يعزز أيضًا وعي المطورين ومسؤولي الأنظمة بأساليب الهجوم المحتملة. يسد تحليل هذه الثغرات الفجوة بين النظرية والتنفيذ الأمني العملي.
CVE-2023-38408 هي ثغرة تؤثر على ssh-agent في OpenSSH عند تفعيل دعم PKCS#11. تسمح بتنفيذ تعليمات برمجية عن بُعد على جهاز العميل إذا اتصل المستخدم بخادم مخترق مع تفعيل إعادة توجيه الوكيل (ssh -A). لهذه الثغرة آثار خطيرة على أي نظام يعتمد على OpenSSH في المصادقة الآمنة.
| تفاصيل CVE | المعلومات |
|---|---|
| معرف CVE | CVE-2023-38408 |
| درجة CVSS | 9.8 (حرجة) |
| الإصدارات المتأثرة | OpenSSH < 9.3p2 |
| ناقل الهجوم | شبكة |
| الامتيازات المطلوبة | لا شيء |
| تفاعل المستخدم | مطلوب |
| التأثير | اختراق كامل للنظام |
SSH (Secure Shell) هو بروتوكول شبكة تشفيري يُستخدم للاتصال الآمن عبر الشبكات غير الآمنة. يوفر قنوات مشفرة لتسجيل الدخول عن بُعد، وتنفيذ الأوامر، ونقل الملفات، والمزيد.```mermaid graph LR A[SSH Client] -->|Encrypted Connection| B[SSH Server] A -->|Authentication| C[ssh-agent] C -->|Private Keys| D[Key Store] B -->|Agent Forwarding| E[Remote ssh-agent Proxy]
### 2.2 ما هو ssh-agent
`ssh-agent` هو عملية خلفية تخزّن مفاتيح SSH الخاصة غير المشفّرة في الذاكرة، مما يتيح لك استخدامها دون الحاجة إلى إعادة إدخال كلمات المرور في كل مرة تتصل فيها بنظام بعيد.
#### إعادة توجيه الوكيل (ssh -A)
تسمح إعادة توجيه الوكيل لنظام بعيد بالوصول إلى `ssh-agent` المحلي لديك عبر مقبس مجال يونكس. هذا الأمر مفيد لربط اتصالات SSH ولكنّه ينطوي على مخاطر أمنية كبيرة إذا تم اختراق الجهاز البعيد.```mermaid
sequenceDiagram
participant Client as SSH Client
participant Agent as ssh-agent
participant Server as Remote Server
participant Proxy as Agent Proxy
Client->>Agent: Start agent
Client->>Server: ssh -A user@server
Server->>Proxy: Create proxy socket
Note over Server,Proxy: SSH_AUTH_SOCK=/tmp/ssh-xxx/agent.xxx
Server->>Proxy: ssh-add request
Proxy->>Client: Forward request
Client->>Agent: Process request
Agent->>Client: Response
Client->>Proxy: Forward response
Proxy->>Server: Final response
من الناحية التقنية، عند استخدام ssh -A، يقوم عميل SSH بإعداد مأخذ توصيل نطاق يونكس (Unix domain socket) على الخادم البعيد يعمل كـ وكيل لـ ssh-agent المحلي لديك. يتم تعيين متغير البيئة SSH_AUTH_SOCK ليشير إلى هذا المأخذ الوكيل. يتم إعادة توجيه أي استدعاءات تُجرى على SSH_AUTH_SOCK على الخادم البعيد مرة أخرى عبر اتصال SSH ومعالجتها بواسطة ssh-agent المحلي لديك.
PKCS#11 هي واجهة برمجة تطبيقات قياسية للتفاعل مع الرموز التشفيرية، مثل البطاقات الذكية أو YubiKeys أو وحدات أمان العتاد الافتراضية (HSMs).
| دالة PKCS#11 | الغرض | مستوى المخاطرة |
|---|---|---|
C_Initialize() | تهيئة المكتبة | منخفض |
C_GetSlotList() | سرد الفتحات المتاحة | منخفض |
C_FindObjects() | إيجاد الكائنات التشفيرية | متوسط |
C_Sign() | توقيع البيانات | مرتفع |
dlopen() | تحميل المكتبة المشتركة | حرج |
يدعم ssh-agent الخاص بـ OpenSSH تحميل موفري PKCS#11 (مكتبات .so مشتركة) باستخدام الأمر ssh-add -s /path/to/provider.so. تسمح هذه المكتبات للوكيل بالتفاعل مع الوحدات الآمنة (عتادية أو برمجية) لاستخدام المفاتيح الخاصة دون تعريضها مباشرة.
في الخلفية، عند استدعاء ssh-add -s، يقوم بما يلي:
.so ديناميكيًا في الذاكرة باستخدام dlopen().C_Initialize() و C_GetSlotList() و C_FindObjects() و C_Sign() عبر واجهة برمجة تطبيقات PKCS#11.| السمة | التفاصيل |
|---|---|
| المعرف | CVE-2023-38408 |
| الشدة | عالية (CVSS 9.8) |
| الجدول الزمني | تم الكشف عنها يوليو 2023، أُصلحت في OpenSSH 9.3p2 |
| البرنامج المتأثر | إصدارات OpenSSH قبل 9.3p2 التي تدعم PKCS#11 |
| تعقيد الهجوم | منخفضة |
| ناقل الهجوم | شبكة عبر إعادة توجيه وكيل SSH |
تنبع الثغرة من قيام ssh-agent بتحميل أي ملف كائن مشترك (.so) يتم توفيره عبر ssh-add -s، دون التحقق مما إذا كان موفرًا شرعيًا لـ PKCS#11.```mermaid
graph TD
A[Attacker sends ssh-add -s malicious.so] --> B[Request forwarded to victim's ssh-agent]
B --> C[ssh-agent calls dlopen on malicious.so]
C --> D[Constructor function executes immediately]
D --> E[Arbitrary code runs on victim machine]
### 3.3 تحليل تدفق الهجوم```mermaid
sequenceDiagram
participant V as Victim
participant A as Attacker
participant Agent as ssh-agent
participant Lib as Malicious .so
V->>A: ssh -A attacker@host
Note over V,A: Agent forwarding enabled
A->>Agent: ssh-add -s /path/to/malicious.so
Agent->>Lib: dlopen("/path/to/malicious.so")
Note over Lib: Constructor executes
Lib->>V: Malicious code runs
Note over V: System compromised
على أدنى مستوى، يتضمن تسلسل الأحداث ما يلي:
ssh-add -s /path/to/lib.sodlopen("/path/to/lib.so", RTLD_NOW).so يحتوي على دالة بناء (__attribute__((constructor))), فإنها تُنَفَّذ فورًا عند التحميل| الخطوة | الإجراء | التأثير |
|---|---|---|
| 1 | يقوم المستخدم بتشغيل ssh -A user@attacker-host | تم تمكين إعادة توجيه الوكيل |
| 2 | يقوم المهاجم بإعداد malicious.so | الحمولة جاهزة |
| 3 | يقوم المهاجم بتنفيذ ssh-add -s /tmp/malicious.so | يتم إرسال الطلب إلى وكيل الضحية |
| 4 | يقوم الوكيل بتحميل المكتبة الضارة | يتم تنفيذ دالة البناء |
| 5 | يتم تشغيل التعليمات البرمجية الضارة | تم تحقيق تنفيذ التعليمات البرمجية عن بُعد |
لإظهار هذه الثغرة في بيئة محكومة، تم إجراء محاكاة شاملة باستخدام حسابات مستخدمين وأجهزة طرفية متعددة.