メインコンテンツにスキップ
ブログセキュリティLinode セキュリティダイジェスト 2022年1月30日~2月6日

Linodeセキュリティダイジェスト 2022年1月30日から2022年2月6日

Linode セキュリティダイジェスト

今週は、攻撃者がシステムへのローカルアクセス権を持っている場合、特権を拡大することができる可能性がある3つの深刻度の高い脆弱性について説明します。

Linux カーネル eBPF - 不適切な入力検証の脆弱性

CVE-2022-23222には、カーネルによる eBPF プログラムの処理に起因する脆弱性があります。BPF を実行できる攻撃者は、システムをクラッシュさせたり、 カーネルのコンテキスト内で任意のコードを実行したりする可能性があります。

原因BPF ベリファイアは、いくつかの*_OR_NULLポインタ型を適切に制限しておらず、これらの型がポインタ演算を行うことができます。これを悪用して、任意のコードを実行したり、システムをクラッシュさせたりすることができます。 

重要なお知らせ:ほとんどのディストロでは、特権のないBPF はデフォルトで無効になっています。このバグは、カーネルバージョン5.8.0で導入され、カーネルバージョン5.14.17で修正されました。CVE-2022-23222が重大なリスクをもたらすもう一つの理由は、公開されたエクスプロイトが利用できることです。

お使いのLinuxディストリビューションが提供する最新のカーネルを常に使用することが、この脆弱性から身を守る簡単な方法です。お使いのLinodeが当社の提供するカーネルを起動している場合は、LinodeのConfiguration Profileが最新のカーネルを起動するように設定されていることを確認し、Linodeを再起動してください。 

パッチを当てたカーネルにすぐにアップデートできない場合は、unprivileged_bpf_disabledが1に設定されていることを確認することで、この脆弱性を緩和することもできます。以下の例では、Linodeが再起動するまで一時的な緩和策を適用します。この設定をsysctl設定ファイルに記述し、緩和策を持続させるためにLinodeを安全にブートすることを確認してください。

# sysctl -w kernel.unprivileged_bpf_disabled=1

ソースSecCoderセキュリティラボのTr3e wang氏

コンテナのエスケープ方法 ヒープオーバーフローLinux カーネルにおける

CVE-2022-0185には、ヒープオーバーフローのバグがあり、非特権ユーザーにアクセスした攻撃者が、その特権を root に昇格させることができます。これを行うためには、攻撃者はCAP_SYS_ADMINという特定のLinuxの能力を持っている必要があります。なお、KubernetesクラスターでDocker(または他のCRI)を使用している場合、デフォルトでseccompフィルタが無効になるため、この脆弱性が悪用される可能性があることに注意してください。

原因 - このバグは、以下の部分に存在する整数アンダーフローが原因です。 fs/fs_context.c:legacy_parse_paramその結果、有効な最大長の計算ミスが発生します。これにより、"File System Context "コンポーネントで整数アンダーフローが発生します。 

アンダーフローは、減算演算によって符号なし整数がゼロ以下の値になったときに発生します。符号なし整数は負の数を表すことができないため、計算結果は整数の最大値に折り返されます。legacy_parse_param関数内でこのアンダーフローが発生すると、サイズチェックが失敗し、攻撃者はカーネル空間に割り当てられた4kbのメモリの境界を超えて書き込むことができます。この「束縛されない書き込み」を利用して、攻撃者はカーネルメモリ内の値を変更したり、例えば、同じノード上で実行されている他のプロセスに自分自身へのアクセスを追加したりすることができます。

capsh -print」コマンドを現在のユーザーのコンテキストで使用すると、有効なケイパビリティが一覧表示されます。悪用はCAP_SYS_ADMIN機能に依存していますが、この権限は現在のネームスペースでのみ付与されている必要があります。非特権ユーザーはunshare (CLONE_NEWNS | CLONE_NEWUSER)を使用して CAP_SYS_ADMIN 権限を持つネームスペースに入り、悪用してシステムを root 化することができます。しかし、seccompを使用すると、攻撃者がその能力を持って名前空間に入ることができなくなります。

この脆弱性は、カーネル5.1で導入され、5.16.2で修正されました。脆弱性を利用したコードは、すでにオンラインで公開されています。今回の発見に関する技術的な詳細については、こちらの記事をご覧ください。 

お使いのLinuxディストリビューションが提供する最新のカーネルを常に使用することは、この脆弱性から身を守る簡単な方法です。お使いのLinodeが弊社提供のカーネルを起動している場合は、Linodeの設定プロファイルが最新のカーネルを起動するように設定されていることを確認してから、Linodeを再起動することもできます。もし、すぐにパッチを当てたカーネルにアップデートできない場合は、これらの緩和策を適用することができます。

  • CAP_SYS_ADMINケイパビリティにアクセスできる特権付きコンテナの使用を最小限に抑えます。 
  • 非特権コンテナの場合は、unshareコールをブロックするseccompフィルタを確実に設置することで、リスクを軽減することができます。
  • ユーザーがホストレベルでユーザーネームスペースを使用する能力を無効にすることで、非特権コンテナからの悪用を緩和します。以下の例では、Linodeが再起動するまで一時的なミティゲーションを適用します。ミティゲーションを持続させるためには、必ずこの設定をsysctl設定ファイルに書き込み、Linodeを安全に起動してください。
# sysctl -w kernel.unprivileged_userns_clone=0

PwnKit - ローカル特権のエスカレーションの脆弱性 in Polkit

Polkitは、Unix系OSのシステム全体の特権を制御するためのコンポーネントです。非特権プロセスが特権プロセスと通信するための体系的な方法論を提供します。さらに、pkexec というコマンドを使って、誰かが polkit を使って昇格した特権でコマンドを実行することもできます(通常は root で実行します)。 

CVE-2021-4034は、ほとんどの主要な Linux ディストリビューションにデフォルトでインストールされているSUID-root プログラムである polkit のpkexec にメモリ破壊の脆弱性があります。悪用に成功すると、権限を持たないユーザがデフォルトの設定で簡単に root 権限を取得できます。

原因pkexec プログラムは、渡された引数の数を適切に検証しないため、特権ユーザーとして任意のコードを実行される可能性があります。 

2009年以降のすべてのPolkitバージョンには脆弱性があり、polkitデーモン自体が動作していなくても悪用される可能性があります。

お使いのLinuxディストリビューションが提供する最新のカーネルを常に使用することが、この脆弱性から身を守る簡単な方法です。お使いのLinodeが当社の提供するカーネルを起動する場合、LinodeのConfiguration Profileが最新のカーネルを起動するように設定されていることを確認してから、Linodeを再起動してください。パッチを当てたカーネルにすぐにアップデートできない場合は、pkexecからSUIDビットを削除することで一時的に問題を緩和することができます。

# chmod 0755 /usr/bin/pkexec

コメント 

コメントを残す

あなたのメールアドレスは公開されません。必須項目には*印がついています。