Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2019-5736-PoC — CVE-2019-5736 の PoC | Kitploit
ツール/GitHubGitHub/frichetten/cve-2019-5736-poc
特権昇格コンテナセキュリティ脆弱性分析エクスプロイトコンテナエスケープバイナリエクスプロイトArchived
GitHubfrichetten/cve-2019-5736-poc

CVE-2019-5736-PoC

CVE-2019-5736 の PoC

リポジトリを見る
65816464年前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2019-5736-PoC

CVE-2019-5736 の PoC

@singe、@_cablethief、@feexd の協力のもと作成しました。

Ubuntu 18.04、Debian 9、Arch Linux でテスト済みです。Docker のバージョンは 18.09.1-ce と 18.03.1-ce です。この PoC は現在、Ubuntu 16.04 と CentOS では動作しません。

脆弱性を発見した Dragon Sector のエクスプロイトコードは、こちらで確認してください。

これは何ですか?

これは CVE-2019-5736 の Go 実装であり、Docker のコンテナエスケープです。このエクスプロイトは、コンテナ内からホストシステムの runc バイナリを上書きして実行することで動作します。

このエクスプロイトはどのように動作しますか?

このエクスプロイトには 2 つのユースケースがあります。1 つ目(このリポジトリの内容)は、基本的にトラップです。攻撃者はコンテナ内でコマンド実行を取得し、待ち受ける悪意のあるバイナリを起動する必要があります。誰か(攻撃者または被害者)が docker exec を使ってコンテナに入ると、このエクスプロイトがトリガーされ、root としてコード実行が可能になります。

2 つ目(このリポジトリの内容ではありません)は、悪意のある Docker イメージを作成します。そのイメージを実行すると、エクスプロイトが発火します。コンテナに exec する必要はありません。GIF の例については、この README の下部を参照してください。

必要なものは何ですか?

この脆弱性を悪用するには、コンテナ内で root(uid 0)である必要があります。

副作用はありますか?

はい、runc の実装を上書きすることになります。その結果、システムで Docker コンテナを実行できなくなります。/usr/bin/docker-runc または /usr/bin/runc のいずれかをバックアップしてください(どちらを持っているかによります。/usr/sbin も確認してください)。

どうやって実行しますか?

コードを適宜変更し、go build main.go でコンパイルします。そのバイナリをエスケープしたいコンテナに移動します。バイナリを実行すると、次に誰かがコンテナにアタッチして /bin/sh を呼び出したときにペイロードが発火します。

ステップバイステップの説明

この PoC は、この lxc プロジェクトへのコミット(および他の人々からの役立つアドバイス)にある素晴らしい説明を使用して作成されました。

例として、ターゲットバイナリが /bin/bash の場合、インタープリタのパス #!/proc/self/exe を指定した実行可能スクリプトに置き換えることができます(/proc/self/exe は、カーネルがすべてのプロセスに対して作成するシンボリックリンクで、そのプロセスで実行されたバイナリを指します)。これにより、コンテナ内で /bin/bash が実行されると、代わりに /proc/self/exe のターゲットが実行されます。つまり、ホスト上の runc バイナリを指すことになります。

これを実装するために、コンテナ内の /bin/sh を #!/proc/self/exe で上書きします。これは、このプロセス(Docker exec)を開始したバイナリを指します。

攻撃者はその後、/proc/self/exe のターゲットに書き込んでホスト上の runc バイナリを上書きしようと試みることができます。しかし一般的には、runc が実行中に上書きされることをカーネルが許可しないため、これは成功しません。これを克服するために、攻撃者は代わりに O_PATH フラグを使用して /proc/self/exe へのファイルディスクリプタを開き、その後 /proc/self/fd/ を通じてバイナリを O_WRONLY として再度開き、別のプロセスからビジーループで書き込みを試みることができます。

注: 前のセクションの一部は完全には正確ではありません。runcinit のファイルディスクリプタを取得するときに O_PATH フラグを使用する必要はありません。また、書き込みループを別のプロセスで作成する必要もありません。/proc/PID/exe へのファイルハンドルを取得することで、runcinit のファイルディスクリプタを取得します。そこから、そのハンドルを使用して /proc/self/fd/FILEDESCRIPTOR へのファイルハンドルを取得します。これが書き込みに使用するファイルハンドルです。

最終的には、runc バイナリが終了したときに成功します。その後、runc バイナリは侵害され、他のコンテナやホスト自体への攻撃に使用される可能性があります。

そのファイルハンドルに書き込むことができれば、ホスト上の runc バイナリを上書きしたことになります。root として任意のコマンドを実行できます。

悪意のある Docker イメージの例

このリポジトリにはこの例は含まれていませんが、こちらで見つけることができます。私の考えでは、これははるかに危険なシナリオです。悪意のあるコンテナイメージを実行するだけで、root としてコード実行が得られます。詳細な説明については、こちらを参照してください。

ツールをダウンロード