
設定が不適切なKubernetesサーバーに送信するraw TCP/IPパケットを作成 - CVE-2020-8558 PoC
生のTCP/IPパケットを生成するために使えるPythonスクリプトを含むリポジトリです。
kubernetesで発表された脆弱性(kube-proxy: CVE-2020-8558)に続くmartianパケットのテストに使用されます。このPoCは、pod -> node(ホスト)のlocalhost境界バイパスを対象としています。
この脆弱性のnode -> node部分に対するシンプルで堅牢なPoCについては、こちらを参照してください。
パケット生成のクレジット:
https://inc0x0.com/tcp-ip-packets-introduction/tcp-ip-packets-3-manually-create-and-send-raw-tcp-ip-packets/
https://gist.github.com/NickKaramoff/b06520e3cb458ac7264cab1c51fa33d6
クラスタが脆弱かどうかを簡単に検証するために、エクスプロイトをkubernetesへデプロイするためのDockerfileとpodマニフェストが用意されています。スクリプトは、マスターノード上で稼働するポート8080の認証なしkube APIサーバーをターゲットとするように更新されています(マニフェストはpodをマスターノードにデプロイします)。
このエクスプロイトは、kube apiserverのREST APIを使用して、クラスタのdefault名前空間にyouve-been-pwnedという名前のpodを作成します。このpodは無限ループでテキストをエコーするだけで、手動で削除する必要があります。
特定のクラスタ(ciliumを実行中)では、コンテナ作成直後にプロセスを開始すると、最初のsynを送信してもホストからsyn/ackが受信されないという問題が発生しました。この問題は、start.shスクリプトで回避しました。このスクリプトは、エクスプロイトを開始する前にネットワークが起動していることを確認するだけで、効果があるように思われました。