HAProxy の脆弱性 CVE-2024-45506 が FIX:1件の悪用を確認

HAProxy Vulnerability CVE-2024-45506 Under Active Exploit: Urgent Patching Required

2024/09/08 SecurityOnline — ロード・バランシングとプロキシの機能を提供する、人気のソフトウェアである HAProxy にいおいて、脆弱性 CVE-2024-45506 (CVSS:7.5) が悪用されていることが判明した。この脆弱性は、HAProxy の HTTP/2 マルチプレクサに影響するものであり、特定の条件下において無限ループを引き起こし、システム・クラッシュやリモート・サービス拒否 (DoS) 攻撃にいたる恐れがある。この欠陥は、Enterprise/ALOHA/Kubernetes Ingress Controller などの、複数の HAProxy 製品に影響を与えるものだ。

この脆弱性は、最適化されたデータフローのために設計された Zero-Copy 転送システムと組み合わせれた場合の、HTTP/2 マルチプレクサの問題に起因する。この欠陥を悪用する攻撃者は、低い確率ではあるが、h2_send() 関数で無限ループを作り出せる。この問題が発生するのは、処理エラーにより GOAWAY フレームがトリガーされるが、システムの出力バッファが満杯に近いために、対象となるフレームが不完全な状態に陥り、入力バッファの処理が進まない場合である。この状況を複雑にしているのは、複数の Zero-Copy モード・ストリームが、同時にデータを送信している可能性である。それにより、システムに大きな負担が発生していることになる。

HAProxy の開発者は、「このような状態の再現は難しいが、少なくとも1件の悪用事例が確認されており、HAProxy の高負荷時にクラッシュが発生する可能性がある」と指摘している。この状況下でサービス拒否攻撃が引き起こされると、高可用性サービスが中断され、HAProxyの負荷分散機能に依存する、重要なオペレーションに影響を生じることになる。

この脆弱性は、HAProxy の各製品の、さまざまなバージョンに影響を及ぼす。以下の表に、影響を受けるバージョンと対応するパッチの概要を示す:

影響を受けるバージョン修正バージョン
HAProxy 3.03.0.4
HAProxy 2.92.9.10
HAProxy Enterprise 2.9r1hapee-2.9r1-lb 1.0.0-328.475
HAProxy ALOHA 16.016.0.4
HAProxy Kubernetes Ingress Controller 3.03.0.1
HAProxy Kubernetes Ingress Controller 1.111.11.6
HAProxy Enterprise Kubernetes Ingress Controller 1.111.11.6-ee7
HAProxy Enterprise Kubernetes Ingress Controller 1.71.7.12-ee12

前述のとおり、脆弱性 CVE-2024-45506 の悪用は難しいとされるが、たとえ1件であっても、悪用が確認されたことで、この脆弱性の深刻さが示唆される。インフラ・レベルの脆弱性を狙う攻撃者が増えるにつれ、HAProxy ユーザーのリスクが増大し続けている。それらのユーザーには、GitHub/Reddit/Twitter などの、主要な Web サイトも含まれている。

HAProxy の脆弱性を悪用して DoS 攻撃を実行することで、それらのサービスのロード・バランシング機能を混乱させ、トラフィックの多い時間帯にシステム全体をダウンさせるというシナリオも浮かび上がってくる。トラフィック分散と高可用性のために、HAProxy に依存している組織にとっては、一時的なクラッシュであったとしても、運用上/財務上の大きな損失が生じるだろう。

すでに HAProxy は、問題を修正したバージョンをリリースしている。そして、すべてのユーザーに対して、これらのバージョンへと直ちにアップデートして、悪用の可能性を防ぐよう促している。
このパッチは、HTTP/2 マルチプレクサのループ問題を解決し、システムの安定性とセキュリティを回復するよう設計されている。

HAProxy は、ただちにパッチを適用できない組織のために、脆弱性の原因となる Zero-Copy 転送システムを無効化するという回避策を提供している。この一時的な修正を行う管理者は、HAProxy コンフィグの global セクションに、以下のディレクティブを追加する必要がある:

global
  …
  tune.h2.zero-copy-fwd-send off