CVE-2021-3156:sudoの脆弱性による特権昇格 #aqua #コンテナ #セキュリティ #CVE20213156 #脆弱性 #sudo
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本ブログは「Aqua Security」社の技術ブログで2021年2月1日に公開された「 CVE-2021-3156 sudo Vulnerability Allows Root Privileges 」の日本語翻訳です。
CVE-2021-3156:sudoの脆弱性による特権昇格
UNIX および Linux OS に新たな深刻な脆弱性が発見されました。このブログでは、この CVE がどのように悪用されるのか、どの sudo のバージョンが影響を受けるのか、そして問題を緩和する方法について説明します。
技術的な解説
通常、sudo は他のユーザ(デフォルトでは root ユーザが設定されています)のセキュリティ権限でプログラムを実行できます。ユーザは、認証のために自分のパスワードを提供する必要があります。認証後、設定ファイルがそのユーザのアクセスを許可している場合、そのユーザは他のユーザの権限を使用できます。
シェルで sudo コマンドをフラグ -s または -i (sudo -s または sudo -i) で実行する場合、最初の文字をマークするために 2 つのバックスラッシュ '\' を期待します。
sudo -s '\\\' `perl -e 'print "A" x 65536'`
このコマンドを受信すると、sudoers policy プラグインはエスケープ文字を削除します。このコマンドをバックスラッシュ '\' だけで実行すると、エラーで終了するので影響はありません。
sudoedit は、ユーザが安全にファイルを編集するための組み込みコマンドです。この新しい脆弱性では、Qualys の研究者は、フラグ -s または -i を指定して sudoedit を実行した場合にコマンドはエラーとならず、sudoers ポリシープラグインはエスケープ文字も削除しないため、エスケープされていないバックスラッシュ文字がある場合、その部分を超えて読み込んでしまうことが発見されました。
sudoedit -s '\' `perl -e 'print "A" x 65536'`
攻撃者はこの脆弱性を悪用して、ランダムなコードを実行できます。結果として、 sudoers ファイルに設定された内容を無視し、認証なしにroot 権限でコマンドが実行される可能性があります。
この脆弱性は、非特権コンテナを実行している場合にも適用されます。
最も古い脆弱性のある sudo バージョンは2011年の最初にコミットされたものです。1.8.2から1.8.31p2までのすべてのレガシーバージョンと、1.9.0から1.9.5p1までのすべての安定バージョンが、デフォルト構成の場合に影響があります。
影響を受けているかの確認方法
sudo プロジェクトは、利用している sudo のバージョンが脆弱であるかどうかをテストできるコマンドを公開しました。
sudoedit -s '\' `perl -e 'print "A" x 65536'`
コマンドの実行後、使用法やエラーメッセージが表示された場合、sudo に脆弱性はありません。以下のように Segmentation fault が表示された場合、sudo に脆弱性があります。
脆弱性の影響を緩和し修復
Aqua コンソールでは、sudoedit の実行をブロックするために、コンテナランタイムポリシーを使用できます。
- 「Policies」に遷移し、「Runtime Policies」を選択します。
- 「Aqua default runtime policy」を選択します。
- 「Excutables Blocked」を選択し、ブロックしたい実行ファイル(今回は sudoedit)を入力し、保存します。
さらに、Aqua のホストランタイムポリシーを使用して、VM 上でもsudoedit の実行をブロックできます。
- 「Policies」に遷移し、「Runtime Policies」を選択します。
- 「Aqua default host runtime policy」を選択します。
- 「File Block」を選択します。
- ブロックしたいバイナリ名を入力して(ここでは sudoedit)、保存します。
また、sudo プロジェクトが修正バージョンをリリースしている他に、OS イメージをアップグレードできる場合は、主要な OS である Debian、Fedora、Ubuntu、RedHat がパッチを提供しています。