5.5.5 では判定できない — TrueConf CVE-2026-72530 のビルド番号
セマンティックバージョニングに慣れていると、バージョン比較は3つの数字を左から見ればよい、という感覚になる。5.5.4 < 5.5.5 であり、5.5.5 は 5.5.5 と等しい。台帳の比較処理もたいていそう書かれている。
その感覚のまま扱うと確実に誤判定する脆弱性がある。TrueConf Server の CVE-2026-72530 がそれだ。CISA が 2026年8月20日に KEV へ収載し、是正期限を 2026年9月3日とした。
理由は単純で、修正が4桁目のビルド番号で入っており、しかもその番号が OS ごとに違うからである。「5.5.5 だから修正済み」は成立しない。
この記事では判定を間違える構造を示し、最後にビルド番号まで見て判定するスクリプトを置く。
何が起きるのか
NVD の記述によると、4307/TCP を通じてネットワーク到達できる未認証の攻撃者が、細工したスクリプトを用いて隔離された実行環境を脱し、ホストシステム上で任意コードを実行できる。
CWE は CWE-94(コード生成の不適切な制御)。採番元(CNA)は Kaspersky Labs で、CVSS 4.0 で 9.5 Critical、CVSS 3.1 で 9.0 Critical を付けている。NIST 独自の評価は本稿執筆時点(2026年8月22日)では付いていない。
「隔離環境からの脱出」という表現が要点である。スクリプトを走らせる仕組み自体は想定された機能で、その実行はサンドボックス内に閉じているはずだった。壊れているのは機能ではなく閉じ込めのほうだ。したがって「スクリプト機能を使っていないから関係ない」とは言えない。使うかどうかを決めるのは攻撃者の側である。
そして悪用は理論上の話ではない。Kaspersky の Securelist は、Head Mare と呼ばれる攻撃者グループが TrueConf Server を標的に PhantomCore を展開した事例を公表しており、NVD はこの記事を Exploit の参照として登録している。
修正版の一覧
影響を受けるのは 5.3.X〜5.3.9、5.4.X〜5.4.9、5.5.X〜5.5.5 とそれ以前である。修正版は次のとおり分かれる。
| 系列 | Windows | Linux |
|---|---|---|
| 5.3 | 5.3.9.10013 以降 | 5.3.9.10015 以降 |
| 5.4 | 5.4.9.10072 以降 | 5.4.9.10019 以降 |
| 5.5 | 5.5.5.10010 以降 | 5.5.5.10009 以降 |
表を眺めると、判定に必要な情報が3つあることが分かる。系列(5.3 / 5.4 / 5.5)、OS(Windows / Linux)、そしてビルド番号である。どれか1つでも欠けると判定できない。
いくつか具体で確かめる。
5.5.5.10009(Windows)… 修正版は 10010 以降。該当する5.5.5.10009(Linux)… 修正版は 10009 以降。該当しない5.4.9.10019(Windows)… 修正版は 10072 以降。該当する5.4.9.10019(Linux)… 修正版は 10019 以降。該当しない
同じ文字列 5.5.5.10009 が、OS によって該当と非該当に分かれる。バージョン文字列だけでは答えが決まらないということだ。
さらに 5.4 系のビルド番号 10072 は、他の系列の 10013〜10019 と桁の並びが違う。「番号が大きいほう=新しい」という素朴な比較は系列をまたぐと通用しない。比較は同じ系列の中でだけ意味を持つ。
資産台帳が壊れる形
ここで起きがちな誤判定を整理しておく。
1. 3桁で切り捨てている。 収集スクリプトが 5.5.5.10009 を正規表現 [0-9]+\.[0-9]+\.[0-9]+ で拾うと 5.5.5 になる。この時点で判定に必要な情報が消える。しかも消えたことに気づけない。台帳には妥当な文字列が入っているからだ。
2. OS を持っていない。 バージョンだけの台帳では、同じ 5.5.5.10009 が該当か非該当か決められない。
3. 系列をまたいで数値比較している。 「ビルド番号 10072 以上なら修正済み」という単一の閾値を書くと、5.3 系と 5.5 系のホストが軒並み「未修正」になる。逆に「10009 以上」と書けば 5.4 系が取りこぼされる。
3つとも、間違った答えが自信を持って返ってくるのが厄介なところである。エラーにならないので、レビューでも見つかりにくい。
実際に試す
系列と OS を踏まえて判定する Python スクリプトを置く。依存パッケージは無い。
前提: Python 3.8 以上。バージョン文字列と OS を渡すと該当可否を返す。
1 | |
同じバージョン文字列が OS で分かれることを確かめる。
1 | |
出力は次のとおりになる。
1 | |
3行目が、この記事で言いたかったことである。**5.5.5 を渡すと「非該当」ではなく「判定不能」が返る。** 3桁しか持っていない台帳は、安全だと答えてはいけない。答えられないと答えるのが正しい。
更新のほかにやること
対応は更新だけで終わらない。3点を挙げておく。
4307/TCP の到達範囲を見る。 この番号はクライアントの接続に使うものではないので、インターネットから到達させる必要がある構成は多くない。管理セグメントからのみ到達可能にする措置は、更新までの時間稼ぎとして現実的である。ただしベンダーが公式の workaround として提示したものではなく、成立条件から導かれる措置である点は区別しておく。
痕跡を確認する。 KEV 収載と Head Mare の事例公表がある以上、更新前の期間に既に侵入されている可能性を検討する必要がある。TrueConf Server のプロセスから起動された想定外の子プロセス、4307/TCP への外部からの接続記録、サーバ上の新規の実行ファイルを確認する。
台帳の粒度を上げる。 今回の教訓はここに残す。ビルド番号と OS を記録していない台帳は、この種の脆弱性が来るたびに実機調査からやり直しになる。
各クラウド・ディストリでの対応状況は CVE Watch の該当ページにまとめている。TrueConf Server はベンダー配布パッケージで導入するため、ディストリのセキュリティトラッカーにはエントリが立たない点も Zimbra と同じである。