CVE-2019-5021:Alpine Dockerイメージ空パスワード脆弱性 #AquaSecurity #Container #Security #DevSecOps
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本ブログは「Aqua Security」社の技術ブログで2019年5月12日に公開された「cve-2019-5021-alpine-docker-image-vulnerability」の日本語翻訳です。
CVE-2019-5021:Alpine Dockerイメージ空パスワード脆弱性
先週、AlpineのDockerイメージに影響を与える新しい脆弱性が公開されました。この脆弱性は、バージョン3.3以降のAlpine Dockerイメージではデフォルトで空に設定されているrootユーザのパスワードが原因です。
このCVEはDockerイメージとして提供されていないAlpineディストリビューションには影響しません。
脆弱なAlpineイメージを使用したコンテナ環境で、Linux PAMまたはシステムのshadowファイルを認証データベースとして使用するその他のメカニズムを使用するアプリケーションを持つコンテナは、rootユーザに対して空パスワードを受け入れる可能性があります。これにより、rootユーザではないユーザが認証プロセスを迂回してコンテナ内にrootアクセスするというシナリオが生じる可能性があります。
使用しているAlpineイメージに脆弱はあるか
使用しているDockerイメージが脆弱かどうかを確認するには、実行中の「Alpine」コンテナにログインし、次のコマンドを実行します。
$ cat /etc/shadow | grep root
脆弱なコンテナの出力は以下のとおりです。
root:::0:::::
/etc/shadowファイルは各ユーザの暗号化されたパスワードが含まれています。一行につき、一ユーザの暗号化されたパスワード、変更時刻、有効期限など、パスワードに関する情報が記載されています。(各フィールドはコロンで区切られています。)
上記の出力のように脆弱なAlpineイメージのrootアカウントの2番目のフィールドは空です。これは、パスワードが空に設定されていることを意味します。
この脆弱性を修正するには、rootパスワードが「!」に設定されている新しいAlpineイメージを使用してください。これは、rootユーザをアプリケーションへのログインとして使用できず、かつシステムにログインできないことを示します。(root権限でアプリケーションを実行することはできます。)
修正されたAlpineイメージの出力は以下のとおりです。
root:!::0:::::
Alpineイメージを最新版にアップデート
まず、Alpineイメージを最新版にアップデートすることをお勧めします。
この問題は、以下のDockerイメージリリース(2019年3月7日)で修正されました。
- edge(20190228スナップショット)
- 9.2
- 8.4
- 7.3
- 6.5
バージョン3、4、および5はサポートが終了しており、脆弱性が含まれています。(修正版は出ていません。)
Aquaを使用してこの脆弱性を検出し軽減する
Dockerイメージが空のrootパスワードを持っているかどうかを確認するためにはAquaの「ImageAssurance」ポリシーをご利用ください。
- 「CVE-2019-5021」の脆弱性をチェックするスクリプトを作成。
#!/bin/sh if [ $(cat /etc/shadow | grep ^root::) ]; then echo "Image is vulnerable with CVE-2019-5021"; exit 1; else echo "Image is not vulnerable"; exit 0; fi
2.スクリプトをアップロード
3.空のrootアカウントのパスワードを含むDockerイメージを確認する「ImageAssurance」ポリシーを作成。
4.Dockerイメージをスキャンし、/etc/shadowのrootユーザが空であるDockerイメージは、先ほどAquaに登録したポリシーにより検知。(写真は、修正される前のAlpine:3.9のDockerイメージです。)
shadowまたはlinux-pamのパッケージがインストールされているかどうかも確認できます。これらのパッケージはこの脆弱性を悪用するために利用されます。パッケージを確認するには、「Package Blacklist」を「Image Assurance」ポリシーに追加します。