今週は、Linux カーネル、Apache 、openssl におけるいくつかの深刻度の高い脆弱性について説明します。
Linux KernelにおけるICMPv6 Denial of Serviceの発生について
CVE-2022-0742により、誰でもタイプ130 または 131の ICMPv6 メッセージを送信し、カーネル内のメモリリークを悪用してホストがメモリ不足になる可能性があります。この脆弱性は、攻撃者がわずかなパケットを送信するだけで、システム全体のサービス拒否を引き起こすことができるため、注目されます。
根本原因 - 根本原因を見つけるには、gitのコミット履歴そのものを見るのが一番です。この修正の作者は当初、なぜ関数synchronize_net()がipv6_mc_down() の内部に追加されたのかを調査しているときにこれを発見しました。このコミットの作成者は、igmp6_event_query()およびigmp6_event_report()が skbs を落としていることを発見しました。skbs は、Linux カーネルがパケットに関する情報を保持するために使用するデータ構造です。本脆弱性は、現在も解析中です。
この脆弱性には、いくつかの注意点があります。
- Red Hat Enterprise Linux の 5.13 より前のカーネルが利用可能なため、この問題はどのバージョンにも影響しません。
- 安定版ブランチが影響を受けました。
この脆弱性を修正するためには、カーネルをアップデートする必要があります。本脆弱性を修正するパッチは、すでにアップストリームで適用されています。
Apache セキュリティ勧告
今回主に取り上げる脆弱性はCVE-2022-23943ですが、まずはアドバイザリに含まれる他のCVEを簡単にまとめます。このアドバイザリで出てくる他の脆弱性は、httpリクエストの密輸を可能にする脆弱性であるCVE-2022-22720です。また、httpd.confのLimitXMLRequestBodyが350MBを超えると、32bitシステムで整数オーバーフローが発生するCVE-2022-22721もある。CVE-2022-22719は、mod_luaが初期化されていない変数を持つため、クラッシュを引き起こします。
mod_sedはオプションのApache モジュールで、ほとんどの Linux システムではインストールされておらず、デフォルトでも有効になっていません。これは、Apache が提供するウェブページのテキストを、sed コマンドの動作に似たパターンを使って置き換えるために使用されます。
CVE-2022-23943 は、メモリ破壊の脆弱性で、DoS を引き起こす可能性があります。メモリ破壊の脆弱性は、mod_sed に起因しています。この脆弱性は、mod_sed のフィルターを通して大量のデータを送信することで誘発されます。送信されたパケットが 2GB より大きい場合、符号付き整数のオーバーフローが発生し、クラッシュの原因となります。4GB 以上のパケットを送信した場合、整数のオーバーフローが発生します。
根本原因- 根本原因は関数にあります。 appendmem_to_linebufmemcpy が呼ばれたとき。この修正により、関数のパラメータで参照されるバッファがintではなくapr_size_tを使用するように変更されました。 Apr_size_tは、4バイトの符号付きintと8バイトの符号なしintを使用することができます。
この脆弱性には、いくつかの注意点があります。
- mod_sed はほとんど使われていない。
- mod_sed は手動でインストールし、設定する必要があります。通常、他のパッケージの依存関係として引き込まれることはありません。
この脆弱性に対して推奨される改善策は以下の通りです。
- Apache を 2.4.52 より大きいバージョンに更新する。
- mod_sed を無効にする
httpd.conf で LimitRequestBody を 1073741824 に設定することで、部分的に緩和することが可能です。しかし、これは悪意のあるクライアントが2GBを超えるリクエストを送信することをブロックするだけです。攻撃者は、mod_sed をトリガーして 2GB を超えるファイルを読み取ることができるため、悪用が発生する可能性があります。
OpenSSLにおけるサービス拒否
OpenSSLは、証明書の管理、作成、検証、署名を行うためのライブラリおよびコマンドラインプログラムです。オープンソースの暗号化ライブラリの中で最も古く、Linuxシステム上ではほぼすべての場所で使用されています。
OpenSSL は、モジュラー平方根を計算するBN_mod_sqrt()関数を使用しています。この関数には、素数でないモジュールが永久にループするバグがあります。この関数は、楕円曲線公開鍵を圧縮形式で含む証明書や、基点を圧縮形式でエンコードした明示的な楕円曲線パラメータを含む証明書を検証する際に使用されます。DoSを引き起こすために証明書を細工するには、攻撃者は楕円曲線を使用する証明書を16進エディターのようなもので変更し、数学的に無効なものにする必要があります。
このタイプの鍵を解析している間、OpenSSLは圧縮されたポイントを展開し、曲線が定義されている素数pの平方根を計算しようとします。このため、実装にバグがあると、pが予想通り素数でないために無限ループに陥ります。OpenSSLに関する勧告はこちらでご覧になれます。現在、パッチが適用されているバージョンは以下の通りです。
- OpenSSL 3.0.2
- OpenSSL 1.1.1n
- OpenSSL 1.0.2zd
さらに、本脆弱性の悪用を成功させるためにはいくつかの注意点があり、以下の条件を満たす必要があります。
- 攻撃者は、特定の不正なパラメータを持つ楕円曲線暗号を用いた証明書を生成したり、既存の証明書を改ざんしたりします。
- 攻撃者は、ローカルにアクセスするか、ユーザー提供の証明書を検証するmTLSを使用するウェブアプリケーションに提供することで、OpenSSLに証明書を検証させる必要があります。
コメント