C ライブラリ libuv の SSRF 脆弱性 CVE-2024-24806 が FIX:直ちにアップデートを!

CVE-2024-24806: Critical SSRF Flaw Found in libuv – a Multi-Platform C Library

2024/02/10 SecurityOnline — 多目的な C ライブラリの1つである libuv は、Node.js のイベント・ループから各種ソフトウェア・プロジェクトの静的な効率性にいたるまで、多くのアプリケーションの非同期システムを支えている。epoll/kqueue/Windows IOCP/Linux io_uring/Solaris イベントポートなどの、多様な I/O メカニズムを橋渡しする libuv の機能は、非同期操作の領域における最適なツールとなっている。しかし、その libuv に、脆弱性 CVE-2024-24806 が発見された。

最近になって、libuv コアの ”uv_getaddrinfo” 関数内に存在する、SSRF (Server-Side Request Forgery) の脆弱性 CVE-2024-24806 (CVSS:7.3) が発見された。この関数は、ホスト名からアドレスへの変換を行うものだが、256文字を超えるホスト名の処理に不具合がある。このようなホスト名の切り捨ては、安全策として意図されたものだが、不覚にもトロイの木馬を生み出すことになってしまった。意図したパスから外れたペイロードを作成する攻撃者が、アプリケーションの内部構造をむき出しにするという、IP アドレスに解決することを許してしまうのだ。

この脆弱性は 1.45.x 以降のバージョンに存在し、バージョン 1.48.0 で修正されている。しかし、”hostname_ascii” 変数は、不安定な操作に依存している。この欠陥の本質は、切り捨て自体にあるのではなく、終端となるヌル・バイトの省略にある。したがって、様々なビルド環境や実行環境下で、悪用されやすくなっているのだ。憂慮すべきことに、その影響は多岐にわたる:

  1. 誤ったセキュリティ意識:Kali Linux ディストリビューションに付属しているような、特定の Node.js ビルドでは、切り捨てられたホスト名に隣接するメモリが、便利なことにヌル・バイトを保持し、不正なホスト名を知らず知らずのうちに有効なものにしてしまう。
  2. 運命のいたずら: 他の環境においては、ホスト名の最後のバイトが、後続のヌル・バイトと一致するシナリオがある。特に並列 Node.js インスタンスを実行している本番環境では、ブルート・フォース攻撃のための予測可能なパターンが作成される。
  3. 狭いウィンドウ:最後のバイトのランダム性は、特定のケースでは 16進文字と整列し、localhost アドレスなどの特定の IP 範囲をターゲットにするための機会を生じ、内部セキュリティ・プロトコルを効率よく横取りされてしまう。

CVE-2024-24806 の影響は、技術的な専門用語の枠をはるかに超え、この脆弱性の重大性を強調する、現実世界のシナリオに現れている:

  • 内部 API の暴露:Kubernetes ポッドのオーケストレーションされた振る舞いにおいて、この欠陥は潜在的な内部 API への不正アクセスを可能にする。
  • SSRF 攻撃ベクター: この脆弱性は SSRF 攻撃の発射台となり、ユーザー生成コンテンツをクロール/キャッシュするための、内部サービスに置かれた信頼を悪用する。