FreeSWITCHに脆弱性2件、修正版1.11.2が公開
FreeSWITCHに、プロセスを落として全通話を切る脆弱性と、通話の媒体経路を乗っ取られる脆弱性が公表されました。IP電話やWebRTCの基盤で使っている組織は、1.11.2へ更新し、ICEの検証設定も有効にしてください。
同じ発表の脆弱性 2 件
- CVE-2026-116785 重大 9.1
- CVE-2026-116790 重大 9.1
急ぎ度: 早めに
2件ともCVSS v3は9.1で、認証なしにネットワークから届き、修正版1.11.2が出ているため、早めの更新が必要です。
関係があるか
SIPやWebRTCの通話基盤としてFreeSWITCHを動かしている組織が対象です。ICEの件は、ICEを使う通話であればWebRTCもSIPも範囲に入ります。mod_xml_rpcの件は、モジュールを読み込み、WebSocketの受け口を有効にした環境だけが対象で、どちらも標準では無効です。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| FreeSWITCH | 1.11.2より前の版。1.10系と1.11系の現行リリースはすべて影響を受けます。 | 1.11.2 |
確かめ方
- 1
freeswitch -versionで稼働中の版を確認し、1.11.2より前なら対象です。 - 2modules.conf.xmlでmod_xml_rpcが読み込まれているか、xml_rpc.conf.xmlでenable-websocketが設定されているかを調べます。両方当てはまる場合、http-port(標準は8080)に届く範囲が露出しています。
- 3WebRTCの通話や、ICEを使うSIP通話を受け付けているかを確認します。受け付けていれば、ICEの件の対象です。
何が起きたか
FreeSWITCHの1.11.2より前の版に、通話サービスを止めたり、通話の媒体経路を第三者に奪われたりする脆弱性が2件あります。2件とも、外部から届くポートで受け付ける通信の検証に抜けがあり、CVSS v3は9.1です。
- CVE-2026-116785: mod_xml_rpcのWebSocket処理でフレーム長を誤って読み取り、64KiBの受信バッファーを越えてメモリーが上書される。プロセスが落ち、同時に張られている通話がすべて切れる(CVSS v3は9.1)
- CVE-2026-116790: ICEの接続確認で、STUNのMESSAGE-INTEGRITY属性を暗号的に検証せずに受け入れる。偽の接続確認で、RTPとDTLSの送り先を書き換えられる(CVSS v3は9.1)
前者は、64ビットの長さ指定を32ビットで読み、符号付きの値に押し込むため、巨大な書き込み量として扱われることが原因です。上書きは接続の内部状態にも及びますが、リモートコード実行は実証されていません。弱点の種類はCWE-122、CWE-681、CWE-787です。後者の弱点の種類はCWE-290とCWE-347です。
攻撃の流れ
-
1
対象ポートに到達
攻撃者が、WebSocketの受け口(標準は8080)か、ICEを使う通話のメディアポートにネットワーク越しに届く。
-
2
検証をすり抜け
WebSocketはHTTP認証より前に処理され、ICEの接続確認は署名を検証されないまま受け入れられる。
-
3
WebSocket側の被害
受信バッファーを越えてメモリーが壊れ、プロセスが停止して全通話が切れる。
-
4
ICE側の被害
正規の通話の送り先を書き換えられ、媒体経路を奪われる。
どう悪用されるか
mod_xml_rpcの件は、認証が不要です。http-portへのTCP接続とWebSocketのアップグレードが完了すれば足り、auth-realm、auth-user、auth-passを設定していても、/socketへのリクエストはHTTPのダイジェスト認証より前にWebSocket処理へ回ります。認証をかけているつもりでも防げません。利用者の操作も要りません。1つのフレームで成立し、プロセスの停止による通話断や、接続の内部状態の破壊を起こします。
ICEの件は、ICEを使う通話のメディアポートに届くネットワーク上の相手なら、SDPの資格情報を知らなくても接続確認を偽造できます。送り先を書き換えられると、RTPとDTLSの通信が奪われ、正規のメディア経路は切断されます。暗号化されていない通話では、盗聴と音声や映像の挿入も可能になります。
今すぐやること
-
1
稼働中の版を確認する
FreeSWITCHを動かしているすべてのサーバーで版を確認し、1.11.2より前のものを洗い出します。
freeswitch -version -
2
1.11.2に更新する
外部からポートに届く環境を優先して更新します。1.10系を使っている場合も、示されている修正版は1.11.2以降です。
-
3
ICEの検証設定を有効にする
ICEの件は、1.11.2への更新に加えてice_verify_message_integrity=trueが必要です。設定の置き場所と書き方は、FreeSWITCHのリリースとセキュリティ勧告のページで確認し、更新後に反映されているかを見ておきます。
-
4
mod_xml_rpcの公開範囲を絞る
モジュールを使っていなければ読み込まないようにします。WebSocketを使っていなければenable-websocketを設定しません。必要な場合も、http-portをファイアウォールで信頼できるネットワークに限ります。
-
5
異常な停止や通話断を調べる
更新前の期間に、プロセスの予期しない停止や再起動、原因不明の通話断がなかったかをログで確認します。
すぐ更新できないとき
mod_xml_rpcの件は、enable-websocketを設定しないことで /socketを閉じられます。XML-RPCの他の機能はそのまま動きます。モジュールを読み込まない方法もあります。WebSocketが必要なら、HTTPポートへのアクセスをファイアウォールで信頼できるネットワークに限定します。HTTP認証はこの経路を守らないため、認証の設定では代わりになりません。ICEの件は、1.11.2への更新とice_verify_message_integrity=trueで対処します。
背景
FreeSWITCHは、汎用のハードウェア上で動くオープンソースのソフトスイッチです。社内IP電話の交換機、コンタクトセンター、WebRTCのビデオ会議やブラウザー電話のサーバーとして使われ、外部の回線やインターネットと社内の通話をつなぐ位置にあります。そのため、落ちると同時に張られた通話が全部切れます。
mod_xml_rpcは、HTTPで管理や制御の呼び出しを受けるモジュールです。今回の件は、WebSocketの受け口が認証の手前で処理される構造に原因があるため、管理用の認証を設定していても、受け口を有効にした環境では防げません。ICEは、WebRTCなどがNATをはさんで通話の経路を決める仕組みです。接続確認の署名は、SDPで交換した資格情報を知っている相手かどうかを見分ける唯一の手がかりなので、これを検証しないと、経路の決定そのものを第三者に任せることになります。
よくある質問
Q.通話をSRTPやDTLSで暗号化していれば、ICEの件は問題になりませんか。
まだ分かっていないこと
- 1.10系に対して、1.11.2とは別の修正版が提供されるかどうかは示されていません。
この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
FreeSWITCH is a Software Defined Telecom Stack enabling the digital transformation from proprietary telecom switches to a software implementation that runs on any commodity hardware. Prior to 1.11.2, ws_read_frame() decoded a WebSocket frame's 64-bit extended payload length with a 32-bit byte swap and narrowed the result into a signed length. A value whose surviving low word became negative bypassed the signed size check and was reinterpreted as an enormous unsigned count, causing client bytes to overwrite memory beyond the 64 KiB receive buffer. Any client completing a /socket WebSocket upgrade on an enabled mod_xml_rpc endpoint reached the parser before HTTP authentication; both the module and WebSocket endpoint are disabled by default. The heap overwrite can corrupt connection pointers and crash FreeSWITCH, ending every concurrent session, although remote code execution has not been demonstrated. This issue is fixed in version 1.11.2.
出典: CVE.org (CVE Program・cvelistV5) NVD