7月に発見されたDockerの脆弱性CVE-2019-14271の実証について
PaloAltoのセキュリティリサーチャにより、今年2019年の7月に公開された、Dockerのcpコマンドの脆弱性CVE-2019-14271の調査結果に関する記事が公開されました。
本件については、11月20日に米国のサンディエゴで開催されるKubeCon + CloudNativeCon 2019に当該記事の執筆者らが発表するそうです。
サンディエゴ行きたい。。
イメージでは、ビーチと公園とラテンミュージックって感じですね。
ちなみに、Despacitoっていう曲が、筆者は好きです。
本当に関係ないことを言ってごめんなさい。。。
本題は以下からです。
Dockerのcpコマンドの脆弱性CVE-2019-14271とは
Dockerのcpコマンドを用いることで、コンテナ間でのファイルコピーができます。
およそ、他のLinux系OSのcpコマンドと一緒ですね。
Dockerのcpコマンドでは、以下の実行結果のように、docker-tarと呼ばれるプロセスを呼び出します。
このdocker-tarはコンテナにchrootを行った上で、コンテナのファイルやディレクトリを一時的に記録し、最終的に、ホスト上の特定のディレクトリに対して抽出することで、コピーの動作を実現します。
ここではchrootを行ったのちにファイルをコピーする動作の際、シンボリックリンクを対象とすると、ホストの権限で実行されてしまう問題を引き起こしてしまいます。
つまり、本来、コンテナへのアクセスは、コンテナの実行権限で行われるべき動作ですが、chrootとその参照の結果、コンテナのルート権限を持って、ホストからコンテナの読み書きができるようになってしまいます。
結果、cpコマンドの脆弱性の悪用で、コンテナからホスト権限で自由なコード実行ができてしまうというものでした。
長々と書きましたが、本脆弱性自体は、7月にすでに修正バージョンが公開されています。
想定される攻撃シナリオ
今回の脆弱性においては、先ほど述べたdocker-tarプロセスが、libnss_*.soというライブラリを読み込む際に、この、libnss_*.soが侵害されたものに変更されていた場合に成立します。
ありきたりではありますが、以下2つが攻撃シナリオとして挙げられます。
- 不正に作られたlibnss_*.soを組み込んでいるDockerイメージを実行した場合
- 第三者により、libnss_*.soが置き換えられたものを実行した場合
記事中では、libnss_*.soを書き換えたものの例として、run_at_linkという形で、実証コードを公開しています。このファイルをDockerイメージに組み込むと、想定通り、docker-tarが読み込んでくれるようです。
最終的に、/breakoutというスクリプトが実行されて、Hello from within the container!と出てきます。
以下の動画で紹介されているので見てみてください。
まとめ
Dockerを使ったコンテナ技術も、だいぶ普及してきた感じがしますが、どうなんでしょうね。 普段使わないので、わからないというのが本音で。。。
ホームページも運用しているのですが、Wixを使っているので、インフラはもはや借りていないんですよね。。。
勉強のためにはよく紹介しているCMSというのもあるのですが、実用性を考えるとあまり、エンジニアでもなければ評価がよくなかったり。
結局、技術もビジネスのための一手段なのだと痛感しています。
ちなみに、本屋さんでこんなものがあり、サーバレスというのも一つのキーワードになっていましたね。
キングダム読み終わったら買おうかな(笑)
ではでは。