Skip to main content

未知の領域:公開Helm Chartsの脆弱性を調査する

2019年11月18日

0 分で読めます

Dockerイメージのセキュリティに関するレポートと同様に、公開Helm Chartsリポジトリにおける脆弱性の状況を調査しました。

Helmは、Kubernetesで広く使われているパッケージマネージャーです。開発者が独自のアプリケーションをパッケージ化するために使えるだけでなく、公式Chartsリポジトリには、JenkinsやPostgreSQLなどのサードパーティ製ソフトウェアをインストールできるChartが何百種類もあります。これにより時間を節約できるうえ、ソフトウェアをパッケージ化し、簡単に設定できるようにする人々の専門知識も活用できます。

Helm Chartの例を見てみましょう。今回はLinkerdを取り上げます。

$ tree
.
├── Chart.yaml
├── README.md
├── templates
│   ├── NOTES.txt
│   ├── _helpers.tpl
│   ├── config.yaml
│   ├── daemonset.yaml
│   ├── ingress.yaml
│   └── service.yaml
└── values.yaml

ディレクトリ1つ、ファイル9個。

values.yamlファイルには、脆弱性を含む可能性があるコンテナイメージがいくつか記載されています。

image: buoyantio/linkerd:1.1.2
image: buoyantio/kubectl:v1.6.2

Helm Chartに含まれるイメージの脆弱性

サードパーティコンテンツを扱う他のリポジトリと同様、広く使われているHelm Chartsの脆弱性は、多くのユーザーにリスクをもたらす可能性があります。開発者がサードパーティコンテンツを安全に利用できるよう支援することは、Snykの取り組みの一つです。Java、.NET、Python、Node.js、Rubyなどの一般的なパッケージマネージャー向けに、オープンソースの依存関係を保護する開発者向けツールを提供しているほか、コンテナイメージの脆弱性を検出するツールも提供しています。Kubernetesでサードパーティコンテンツを保護する際の課題を検討する中で、私たちは「このHelm Chartのイメージにどのような脆弱性があるのか、どうすればわかるのか?」という疑問を抱きました。現時点では、かなり手作業が必要です。

  1. Chartが使用するイメージを特定します。通常は、レンダリングされたテンプレートを確認し、具体的なイメージのバージョンを特定する必要があります。

  2. 各イメージを個別にスキャンします。複数のコマンドを実行し、結果を手作業でまとめることになるでしょう。

さらに、Helm Chartsでは使用するイメージに影響する設定を指定できるため、作業はより複雑になります。

Helm Chartセキュリティレポートを公開

新しいレポートでは、公開Helm Chartsリポジトリにおける脆弱性の状況を調査しています。Helmを、他の一般的なサードパーティコンテンツリポジトリ以上に安全でないと批判することが目的ではありません。むしろ、Helmの使いやすさをより多くの人が活用できるよう、Helm Chartsをより適切に保護する方法について議論を始めることを目指しています。調査では、次のことがわかりました。

  • 安定版Helm Chartsの68%に、深刻度の高い脆弱性を含むイメージがある

  • 安定版Helm Chartsの64%は、公開済みの最新イメージに更新することで脆弱性の数を減らせる

  • 脆弱性の発生件数の半分は、全416イメージのうちわずか6つのイメージに起因する

この取り組みについては、Helmコミュニティとも共有しています。Helm Orgのメンテナーの一人であるMatt Butcher氏は、次のように述べています。

「クラウドネイティブエコシステムがその可能性を最大限に発揮するには、セキュリティを皆で向上させる必要があります。そのためには、クラウドネイティブ技術に特化した一連のパターン、手法、ツールを適用しなければなりません。Helm Projectは、コアソフトウェア、Chart、そしてコミュニティの取り組みのセキュリティに深い関心を寄せています。脆弱性を事前に特定して修正するための、新しい世代のツールを心から歓迎します。」

Snyk Helmプラグインのご紹介

上記の調査をまとめる過程で、Helmの他の操作と同じくらい簡単に、独自のHelm Chartsの脆弱性を確認できるプラグインを作成しました。

Helmに組み込まれているコマンドを使って、Snyk Helmプラグインをインストールできます。

helm plugin install https://github.com/snyk-labs/helm-snyk

プラグインを使うには、https://snyk.io/signup/から無料で作成できるSnykアカウントが必要です。アカウントを作成したら、次のようにChartをテストできます。

helm snyk test <path-to-chart>

たとえば、公開ChartsリポジトリのRedis Chartをテストする例を紹介します。

$ helm snyk test stable/redis

Image: docker.io/bitnami/redis:5.0.5-debian-9-r181

Testing docker.io/bitnami/redis:5.0.5-debian-9-r181...

✗ Low severity vulnerability found in tar
Description: CVE-2005-2541
Info: https://snyk.io/vuln/SNYK-LINUX-TAR-105079
Introduced through: meta-common-packages@meta
From: meta-common-packages@meta > tar@1.29b-1.1

✗ Low severity vulnerability found in systemd/libsystemd0
Description: CVE-2019-9619
Info: https://snyk.io/vuln/SNYK-LINUX-SYSTEMD-442642
Introduced through: systemd/libsystemd0@232-25+deb9u12, util-linux/bsdutils@1:2.29.2-1+deb9u1, procps@2:3.3.12-3+deb9u1, sysvinit/sysvinit-utils@2.88dsf-59.9, systemd/libudev1@232-25+deb9u12, util-linux/mount@2.29.2-1+deb9u1
From: systemd/libsystemd0@232-25+deb9u12
From: util-linux/bsdutils@1:2.29.2-1+deb9u1 > systemd/libsystemd0@232-25+deb9u12
From: procps@2:3.3.12-3+deb9u1 > procps/libprocps6@2:3.3.12-3+deb9u1 > systemd/libsystemd0@232-25+deb9u12

and 4 more...

Helm Chartsでは、インストール時に設定できるプロパティが用意されていることが多く、その一部はChartで使用するイメージに影響します。Snyk Helmプラグインでは、他のHelmコマンドと同じインターフェースを使用して個々のプロパティを指定し、さまざまな設定をテストできます。たとえば、次のように実行します。

helm snyk test stable/mysql --set imageTag=latest

まとめ

Helm Chartセキュリティレポートを通じて、Helmコミュニティが脆弱性を見つけ、より簡単に修正できるよう支援しています。Snyk Helmプラグインを使えば、サードパーティのChartを調査する場合でも、CI/CDパイプラインの一環として定期的にチェックする場合でも、Helm Chartsをすばやく簡単にテストできます。開発者がサードパーティコンテンツをより安全に利用できるよう、今後Snykが提供するツールにもご期待ください。

カテゴリー: