Docker コンテナ・イメージに取り込まれる脆弱性:4つの混入シナリオとは?

Researchers find hidden vulnerabilities in hundreds of Docker containers

2023/02/23 HelpNetSecurity — Rezilion が明らかにした、数百の Docker コンテナ・イメージに存在する脆弱性は、ほとんどの標準的な脆弱性スキャナや SCA (Software Composition Analysis) ツールでは検出されないものだという。数十億回もダウンロードされた数百の一般的なコンテナ・イメージ内に、深刻度が Critical/High の脆弱性が数多く隠されていることが、この調査により判明した。それらの脆弱性の中には、悪用方法が公表されている有名なものも含まれている。


Docker コンテナ・イメージに隠された脆弱性のうち、CVE-2021-42013/CVE-2021-41773/CVE-2019-17558 などは、実際に悪用されているものであり、CISA の KEV カタログにも追加されている。

この研究で特定された、根本的な原因の1つは、パッケージ・マネージャで管理されていないソフトウェア・コンポーネントが検出されないことであり、その点について深堀りされている。

この研究では、標準的な脆弱性スキャナと SCA ツールに固有の動作方法が、パッケージ・マネージャからのデータ取得に依存することで、スキャンした環境に存在するパッケージを検知している点である。

したがって、パッケージ・マネージャを回避する方法でソフトウェアが展開される、複数の共通シナリオにおいて、脆弱なソフトウェア・パッケージを見逃してしまう可能性があると説明している。今回の調査では、このギャップの大きさと、サードパーティ製ソフトウェアを使用する組織への影響が、正確に示されている。

このレポートによると、Docker コンテナでは、パッケージ・マネージャを回避したデプロイメント方法が一般的であるとされる。Rezilion の調査チームは、パッケージ・マネージャを回避する方法でコードをデプロイする、10万以上のコンテナ・イメージを確認したが、その中には、DockerHub の公式コンテナ・イメージの大半が含まれるという。

それらのコンポーネントのいずれかに脆弱性が確認された場合には、コンテナ内に脆弱性が含まれていることになり、その脆弱性による影響が生じやすくなる。

研究者たちは、パッケージ・マネージャーとの対話を回避して、ソフトウェアが展開される4種類のシナリオとして、アプリケーション自体/アプリケーションに必要なランタイム/アプリケーションの動作に必要な依存関係/デプロイメントとビルドのプロセスに必要な依存関係などを特定した。そして、コンテナ・イメージのビルド・プロセスの最後になっても削除されないアプリケーションを示し、隠れた脆弱性が入り込む可能性を示した。

Rezilion の Director Vulnerability Research である Yotam Perkal は、「この調査結果が、開発者やセキュリティ専門家にギャップの存在を伝え、リスクを最小化するための適切な行動が取られることを期待する。さらに、ベンダーやオープンソース・プロジェクトが、この種のシナリオをサポートすることも期待している。脆弱性スキャナや SCA ツールが、こうした状況に対処することが必要だ。現状が放置されると、こうした方法でパッケージや実行ファイルを取り込んだコンテナ・イメージには、脆弱なコンポーネントが含まれることになり、その結果として、脆弱性が含まれる可能性があることに注意すべきだ」と述べている。

まず、SCA ツールについて qiita を調べてみたら、「それを使用すると、開発チームは、オープンソースのコンポーネント、そのサポートライブラリ、直接/間接の依存パッケージ、コンテナなど、プロジェクトに持ち込まれた、あらゆるコンポーネントを迅速に追跡および分析することが可能になる」と解説されていました。本文と照らし合わせてみると、Docker コンテナ・イメージに脆弱性が入り込む理由が分かってきます。なお、Rezilion Research Discovers の Hidden Vulnerabilities in Hundreds of Docker Container Images は、とても興味深い内容ですので、ぜひ ご参照ください。