AIQUM 9.18に脆弱なUndertowバージョンが検出され、CPU使用率の上昇とGUIの応答停止を引き起こしています
環境
- Active IQ Unified Manager(AIQUM)9.18
- RHEL/OVA/Windows
- CVE-2023-1108
問題
AIQUM 9.18P2にアップグレード後、以下の症状が発生する可能性があります:
- CPU使用率が高い AIQUM Java/JBoss プロセスについて
- 単一の Undertow ワーカースレッド (例:
default I/O-2) が、1つの CPU コアの 100% を継続的に消費します - AIQUM Web GUI の動作が遅い、または部分的に応答しない
- この状態は自己解決しないため、復旧にはサービスの再起動が必要になる場合があります
- この問題は、AIQUM 9.18P2D2 にアップグレードした後に発生する可能性があります
- この問題は、HTTPS/TLS 接続が異常終了した場合 (例:ハンドシェイク中の TCP リセット) に発生する可能性があり、監視、ロードバランサーのヘルスチェック、またはセキュリティスキャン活動中に起こることがあります
Linuxでは、CPU使用率が高いことは以下の方法で確認できます:
top -H -p <jboss_pid>
出力例:
default I/O-2 R 99.7 ...
スレッドダンプには、以下のようなスタックが表示される場合があります。
sun.security.ssl.SSLEngineImpl.wrap at io.undertow.protocols.ssl.SslConduit.wrapAndFlip(SslConduit.java:1009) at io.undertow.protocols.ssl.SslConduit.doWrap(SslConduit.java:940) at io.undertow.protocols.ssl.SslConduit.doHandshake(SslConduit.java:673) at io.undertow.protocols.ssl.SslConduit$5$1.run(SslConduit.java:1153)
Undertow の読み取り、書き込み、またはリクエスト解析のタイムアウトを設定しても、この問題は解決されません。これは、スレッドがソケット I/O を待機するのではなく、ユーザー空間の SSL コード内でアクティブにスピンしているためです。
原因
Active IQ Unified Manager 9.18では、Undertowの古いバージョンが使用されており、CVE-2023-1108の脆弱性があります。
- 影響を受ける jar ファイル:
undertow-core-2.3.0.Final.jar(WildFly 27.0.1.Final にバンドル) - メカニズム:
SslConduit.wrapAndFlipTLS 受信側が予期せず閉じられた場合、無限ループに陥り、CPU 使用率が継続的に上昇する可能性があります(サービス拒否)。 - 修正済み:
undertow-core-2.3.5.Final.jar(UNDERTOW-2239)
この「問題」は、AIQUM 9.13 および 9.14 で文書化された以前の undertow の「問題」に関連していますが、AIQUM 9.18 に同梱されている 2.3.x undertow ラインに影響します。
この問題では、直接識別可能なログメッセージは生成されませんが、スレッドダンプとCPUプロファイリングでは、影響を受けるスレッドが io.undertow.protocols.ssl.SslConduit.wrapAndFlip でスピンしていることが通常示されます。
解決策
この問題を回避するには、以下の手順に従ってください。
警告
- このプロセスを開始する前に、仮想マシンのコールドスナップショットを作成してください。
- 以下の手順は、NetApp テクニカルサポートの監督のもとで実施してください。
重要 — 実験手順
- この回避策は実験的であり、AIQUM 9.18 に対して NetApp により正式に認定されていません。
- 少なくとも1つの顧客環境で検証済みですが、製品全体の回帰テストは 完了していません。
- NetApp は、特定の CVE 修正を超えたサードパーティ製 jar の置換との互換性を保証しません。
- undertow jar を置き換える AIQUM のアップグレードまたはパッチを適用した後は、再度適用してください。
- 予期しない動作が発生した場合は、バックアップしておいた元の jar ファイルに戻し、サービスを再起動してください。
Windows:
- Maven リポジトリから
undertow-core-2.3.5.Final.jarをダウンロードします:
https://repo1.maven.org/maven2/io/undertow/undertow-core/2.3.5.Final/undertow-core-2.3.5.Final.jar
ファイルのチェックサムが一致することを確認します:
https://repo1.maven.org/maven2/io/undertow/undertow-core/2.3.5.Final/undertow-core-2.3.5.Final.jar.sha1 - UMサービスを停止します。参照:Microsoft Windows上で実行されているActiveIQ Unified Managerサービスを適切に再起動する方法。
- オリジナルのjarファイルをバックアップします。
C:\Program Files\NetApp\essentials\jboss\modules\system\layers\base\io\undertow\core\main\undertow-core-2.3.0.Final.jar - 手順1でダウンロードした
undertow-core-2.3.5.Final.jarを以下にコピーします:C:\Program Files\NetApp\essentials\jboss\modules\system\layers\base\io\undertow\core\main\
新しくコピーしたjarファイルのパーミッションが元のjarファイルと同じであることを確認してください。 - 以下のファイルでjarのバージョンを2.3.0から2.3.5に編集して変更します:
C:\Program Files\NetApp\essentials\jboss\modules\system\layers\base\io\undertow\core\main\module.xml - オリジナルのjarファイルを削除します。
C:\Program Files\NetApp\essentials\jboss\modules\system\layers\base\io\undertow\core\main\undertow-core-2.3.0.Final.jar - UMサービスを開始します。
Linux/vApp:
- Maven リポジトリから
undertow-core-2.3.5.Final.jarをダウンロードします:
https://repo1.maven.org/maven2/io/undertow/undertow-core/2.3.5.Final/undertow-core-2.3.5.Final.jar
ファイルのチェックサムが一致することを確認します:
https://repo1.maven.org/maven2/io/undertow/undertow-core/2.3.5.Final/undertow-core-2.3.5.Final.jar.sha1 undertow-core-2.3.5.Final.jarを AIQUM ホスト上の/jail/uploadにコピーします。
OVA バージョンでは、SCP または WinSCP のようなアプリケーションを使用する必要があります。scp undertow-core-2.3.5.Final.jar <AIQUM_username>@<AIQUM_IP>:/jail/upload/
- AIQUMのコマンドラインにアクセスします。参照:How to access ActiveIQ Unified Manager Virtual Machine OVA DIAG shell
- UMサービスを停止します。参照:How to properly stop/start Unified Manager services in RHEL/CentOS/OVA
- オリジナルのjarファイルをバックアップします。
/opt/netapp/essentials/jboss/modules/system/layers/base/io/undertow/core/main/undertow-core-2.3.0.Final.jar - 手順1でダウンロードした
undertow-core-2.3.5.Final.jarを/opt/netapp/essentials/jboss/modules/system/layers/base/io/undertow/core/main/にコピーし、新しくコピーしたjarファイルの権限がオリジナルのjarファイルと同じであることを確認します。 /opt/netapp/essentials/jboss/modules/system/layers/base/io/undertow/core/main/module.xml内のjarバージョンを2.3.0から2.3.5に編集して変更します。
変更前:<resource-root path="undertow-core-2.3.0.Final.jar"/>
変更後:<resource-root path="undertow-core-2.3.5.Final.jar"/>- オリジナルのjarファイルを削除します。
/opt/netapp/essentials/jboss/modules/system/layers/base/io/undertow/core/main/undertow-core-2.3.0.Final.jar - UMサービスを開始します。
undertow-core-2.3.5.Final.jarが使用されていることを確認するには、以下を実行します。grep Undertow /var/log/ocie/server.log
以下のような出力が期待されます:WFLYUT0003: Undertow 2.3.5.Final starting
パートナーノート
partnerNotes_text
追加情報
「問題」はUndertowの脆弱性が原因でしたが、更新されたバージョンで修正されています。
この「問題」は、AIQUM 9.13 および 9.14 に記載されている undertow CVE に関連しています。参照:
- AIQUM 9.13および9.14で検出された脆弱なundertowバージョンにより、CPUが高くなり、取得の問題が発生する
- Active IQ Unified Manager の CPU 使用率が高い場合の解決ガイド
- 脆弱性スキャナーとActive IQ Unified Manager 9.13以上
Undertow の読み取り / 書き込みタイムアウトを設定するだけでは、この問題は解決されません。影響を受けるスレッドは、ソケット I/O を待機するのではなく、ユーザー空間の SSL コード内でスピンしているためです。
注:脆弱性スキャナーを使用していない環境でも、同様のアクセスパターンによってこの問題が発生する可能性があります。したがって、脆弱性スキャナーが存在しないからといって、その環境がこの問題の影響を受けていないとは限りません。
内部情報
AIQUM 9.18 の undertow CVE-2023-1108 に対する実験的な回避策。
顧客事例2010765728 (DZ BANK AG) では、undertow-core-2.3.5.Finalからundertow-core-2.3.0.Final.jarへのクラス置換が検証されました。エンジニアリングの承認待ちのサポート回避策として、jar ファイルの完全置換が文書化されています。
関連する欠陥:CAIQUM-9250 (P2、Jaspal Singh)。
関連:CAIQUM-5933 (AIQUM 9.13/9.14 にも同じ CVE が存在し、9.16 で修正済み)。