Skip to main content

Kubernetesで重大な任意コード実行の脆弱性が発見される

著者

2018年12月20日

0 分で読めます

2018年12月3日、重大な脆弱性がKubernetesコミュニティに公表されました。KubernetesプロジェクトでCVSS v3スコアに基づく重大なCVEが見つかったのは、これが初めてです。

修正バージョンがリリースされ、エンドユーザーやクラウドプロバイダー向けに提供されています。まだ更新していない場合は、修正済みバージョンにアップグレードしてください。以下の修正リリースを推奨します。v1.10.11、v1.11.5、v1.12.3、v1.13.0-rc.1。アップグレードが難しい場合は、KubernetesプロジェクトのJordan Liggittが前述のGitHub issueで提案しているその他の回避策や緩和策をご検討ください。

CVE-2018-1002105として特定されたこの重大な脆弱性は、RancherのDarren Shepherdによって発見されました。攻撃者はKubernetesクラスター内のバックエンドサービスにリモートアクセスし、任意のコマンドを実行できます。その結果、攻撃者の権限が昇格する可能性があります。

この攻撃は、Kubernetesプロジェクトを構成する多数のコンポーネントの1つであるkubelet APIサービスに存在する脆弱性を利用します。

kubelet APIサービスはKubernetesが提供する中継ゲートウェイで、バックエンドサービス(集約APIサーバーとも呼ばれます)がゲートウェイに登録できるようにします。そのため、/apis/<apiGroup>/<apiVersion>へのAPI呼び出しなど、これらのサーバーへのリクエストはkubelet APIサービスを経由し、Kubernetesクラスター内の集約APIの接続先に転送されます。

集約APIサーバーの用途の一例として、ロードバランサーが内部バックエンドサーバーに問い合わせて稼働状況を確認するヘルスチェックサービスがあります。また、Kubernetesに組み込まれているメトリクスサービスもその一例です。

ユーザーがKubelet apiserverにリクエストを送り、そこから内部のバックエンドサービスにプロキシされる様子を示したKubernetesクラスターの図。

脆弱性について

この脆弱性を悪用するには、kube-apiserverとして識別されるkubelet APIサービスへのアクセス権が必要です。これにより、権限を昇格し、さらにアクセス制御を掌握する道が開かれます。

この脆弱性は、kube-apiserverがクラスター内の内部バックエンドサーバーにリクエストをプロキシする仕組みに起因します。これにより、バックエンドサーバーとユーザーの間に直接的なトンネルが作られます。具体的には、WebSocket通信に関係する接続アップグレード要求の処理中に発生します。クライアントとバックエンドサーバーの間に開かれたTCP接続を利用すれば、そのサーバーに対して任意のリクエストを直接実行できます。

通常、このkubelet APIサービスはクラスター外からアクセスできないようになっています。しかし、サービス検出やヘルスチェックを可能にするため、デフォルトでは匿名ユーザーにもこのAPIへのアクセスが許可されています。

別の攻撃経路として、ユーザーがアクセス可能なサービスがkubelet APIサービスとやり取りする際、そのやり取りをリモート攻撃者が乗っ取れるケースがあります。これにより、kubeletへの接続を操作して、同様の方法で脆弱性を悪用できるようになります。

興味深いことに、kube-apiserverに関連するインシデントは今回が初めてではありません。3月に公開された分析では、インターネットに公開されたkube-apiserverが原因で、Kubernetesクラスターに暗号資産マイニングマルウェアが侵入した事例が明らかになりました。また、Teslaのクラウドインフラストラクチャも、安全でないKubernetes管理コンソールが原因で同様の暗号資産攻撃の被害に遭いました。とはいえ、今回の脆弱性は、これまでKubernetesの製品セキュリティチームに報告された中で最も深刻なものです。

Snykでは、セキュリティチームが2018年12月5日にこの脆弱性をデータベースに追加しました。

重要なポイント:

  • 安全でないデフォルト設定 - 認証済み、未認証を問わず、すべてのユーザーがKubernetes APIに問い合わせできます

  • ログ記録の不備 - 悪意のある、または不審な操作は、既存のAPI接続を通じて行われました。そのため、最初のAPI呼び出し以外の実際の操作はKubernetesのログに記録されませんでした。

身を守る方法

6月に、この記事で取り上げている脆弱性を含め、イメージに含まれるさまざまな脆弱性を検出できる、開発者に使いやすいDockerイメージスキャンソリューションを発表しました。さらにSnykは、脆弱性が少ないベースイメージへのアップグレードを提案するなど、修正方法に関するアドバイスを提供し、この特定の脆弱性への対策も支援します。

まだお試しでない方は、Dockerfileを含むプロジェクトをぜひテストしてください。スキャンとモニタリングを開始し、OSのベースイメージにインストールされている脆弱なパッケージを検出します。

Gitブランチ、Node.jsのバージョン、システムステータス情報を含むプロジェクトディレクトリのプロンプトが表示されたターミナルウィンドウ

キャプチャー・ザ・フラッグを始めよう

オンデマンドのバーチャル入門ワークショップを視聴して、キャプチャー・ザ・フラッグの課題の解き方を学びましょう。