脆弱性対策情報ポータルサイト「JVN」は10月27日、車の電子制御ユニット(ECU)同士の通信などに使われるオープンソースソフト「vsomeip」に、過剰なメモリー割り当ての脆弱性があると公表した。初期設定のままだと、認証の無い相手が短い通信を1つ送るだけで、最大約4GBのメモリーを確保させられる。メモリーの少ない機器ではサービスが止まるおそれがある。対象は3.7.3以前の版で、開発団体は7月6日に公開した3.7.4で修正している。
通信の「長さ」をうのみにしてメモリーを確保
JVNの公表(JVNVU#90363302)は、米国の脆弱性調整機関CERT/CC(CERTコーディネーションセンター)が10月26日(米国時間)に出したアドバイザリ「VU#128947」を参照するよう求めている。識別番号はCVE-2026-91141。
CERT/CCによると、vsomeipが使う通信規格「SOME/IP」のメッセージは、16バイトのヘッダーで始まる。ヘッダーには、後に続くメッセージの大きさを申告する32ビットの「長さ」欄がある。vsomeipは、TCPで接続を受ける窓口(英語で「reliable endpoint」)にメッセージが届くと、この欄に書かれた大きさに合わせて受信用のメモリー(バッファー)を広げる。その際、申告どおりのデータが実際に届いたかを確かめる前に、メモリーを確保していた。
初期設定では、TCPの窓口に大きさの上限が設けられていない。このため相手は、最大でおよそ4GBの大きさを申告し、受け手にその分のメモリーを確保させることができた。CERT/CCは、接続を受け付けた直後の最初のメッセージでこの処理に達するため、正規のサービスも資格情報も、SOME/IPの認証も要らないとしている。
欠陥は接続を受ける側だけではない。接続しにいく側(クライアント)にも同じ処理があり、悪意のある、あるいは乗っ取られたサーバーが、接続してきたクライアントを攻撃できる。一方で、受け付けるメッセージの大きさに上限を明示的に設定している環境は影響を受けない。
16バイトの通信で1.5GB制限のサービスが停止
CERT/CCは影響を具体的に示している。初期設定のままTCPの窓口に到達できる相手は、通常のTCP接続で短いメッセージを1つ送るだけで、接続1本あたり最大約4GBのメモリーを確保させられる。メモリーの使用を1.5GBに制限したサービスでは、3GBの中身があると申告した16バイトのメッセージ1つで、メモリー不足を理由にサービスが強制終了された。
メモリーに余裕がある機器では、1本の接続で確保されたメモリーは接続が切れると解放される。ただし、接続を保ち続けたり、何度も繰り返したりすれば、接続ごとにメモリーが確保され、メモリーを使い果たしてサービスが止まる。情報を盗んだり書き換えたりする種類の欠陥ではなく、機能を止める「サービス妨害」にあたる。
| 項目 | 内容 |
|---|---|
| 対象 | vsomeip 3.7.3以前 |
| 脆弱性の種類 | 過剰なメモリー割り当て(TCPの受信処理) |
| 識別番号 | CVE-2026-91141(CERT/CC VU#128947、JVNVU#90363302) |
| 攻撃の条件 | 初期設定のままのvsomeipにTCPで接続できること。認証は不要 |
| 想定される影響 | メモリーを使い果たさせられ、サービスが止まる |
| 対策 | 3.7.4以降へ更新(7月6日公開) |
| 更新できない場合 | 受信サイズの上限を設定する、通信できる相手をネットワークで絞る |
出典: CERT/CC VU#128947、JVNVU#90363302
報告者がGitHubに書き込んだ分析では、深刻度の自己評価を共通脆弱性評価システム(CVSS 3.1)で4.6(中)としていた。車内のイーサネットに物理的に接続する必要があるとの前提に立った値で、報告者は、外部と通信する車載機器や中継装置を経由して到達できる場合は6.5や7.5に上がると付記している。CERT/CCとJVNの公表に、深刻度の数値は載っていない。
車の部品同士をつなぐ通信ソフト
vsomeipは、SOME/IP(Scalable service-Oriented MiddlewarE over IP)という規格を実装したソフトだ。CERT/CCは、自動車などの組み込み機器で、ECU同士がサービスのやり取りをする通信に広く使われていると説明している。名前のとおりIP(インターネット・プロトコル)を使うネットワークの上で動き、メッセージの送り手と受け手の間で、サービスの提供と利用をやり取りする。
公開元のCOVESAは、コネクテッドカー(通信機能を持つ車)の技術を共同で開発する非営利の国際団体だ。会員主導で運営し、車両データの共通仕様「VSS(Vehicle Signal Specification)」などを生み出してきたとしている。vsomeipのソースコードは、Mozilla Public License 2.0の条件でGitHubに公開されている。READMEの著作権表示は、ドイツの自動車大手BMWで、期間を2014〜2026年と記している。GitHub上のリポジトリは2016年9月に作られた。
オープンソースの部品は、多くの製品に組み込まれて使われる。ただ今回の公表では、どのメーカーのどの車種がvsomeipを使っているかは示されていない。CERT/CCの製品別の状況欄で、COVESAは「Unknown(不明)」とされ、開発元からの声明は「受け取っていない」と記されている。
本紙は10月28日、富士電機の操作盤画面ソフト「V-SFT」に欠陥7件 細工ファイルで任意コード実行のおそれを報じた。今回のCERT/CCの対策も、SOME/IPの窓口を車内などの隔離されたネットワークにとどめることを前提にしており、ネットワークの外からつながせない運用が安全の土台になっている。
2月に報告、7月に修正、10月に公表
経緯はGitHubの記録でたどれる。報告者は2月26日、vsomeipのGitHubに問題報告「issue #1009」を立て、TCPで接続を受ける処理にメモリー確保の上限が無いことを、該当するソースコードの行番号まで挙げて指摘した。開発チームは5月21日、報告に謝意を示し「修正は3.7.4で提供される」と返信した。7月6日に修正が取り込まれて報告は閉じられ、同じ日に3.7.4が公開された。
CERT/CCのアドバイザリは、それから3か月余り後の10月26日に出た。報告への謝辞として、Jaafer Rahmani氏の名前を挙げている。JVNはその翌日、日本語の公表を出した。
| 日付 | 出来事 |
|---|---|
| 2月26日 | 報告者がGitHubで問題を報告(issue #1009) |
| 5月21日 | 開発チームが3.7.4での修正を表明 |
| 7月6日 | 修正を取り込み、3.7.4を公開 |
| 10月26日 | CERT/CCがアドバイザリVU#128947を公表(米国時間) |
| 10月27日 | JVNがJVNVU#90363302を公表 |
出典: COVESA/vsomeip issue #1009、vSomeIP-Lib 3.7.4、CERT/CC VU#128947、JVNVU#90363302
本紙が10月30日に報じたソフト製品の脆弱性届出、7〜9月は179件 前年同期の1.4倍 IPA集計は、国内の届出制度の動きを伝えた。今回は、報告者が開発元の公開の場に直接書き込み、修正が出た後で調整機関が周知した例になる。
初期値を「上限なし」から10MiBへ
CERT/CCによると、3.7.4での修正は、コンパイル時の初期値を「上限なし(MESSAGE_SIZE_UNLIMITED)」から、10MiB(約1050万バイト)の「DEFAULT_MAX_MESSAGE_SIZE」に改めた。上限を明示的に設定していなくても、TCPの窓口は受信用のメモリーを広げる前に、大きすぎる申告を拒むようになった。3.7.4には、長さ欄が大きすぎる場合の動作を確かめる試験も加わった。修正のコミットでは、設定の説明書の記述も、上限を指定しないときの扱いを「unlimited」から「10 MiB」に書き換えている。
3.7.4の変更一覧には「restrict max message size(最大メッセージサイズの制限)」「add test for too big length field + fix(大きすぎる長さ欄の試験と修正)」が並ぶ。vsomeipはその後も8月14日に3.7.5、9月17日に3.7.6を公開している。
CERT/CCは、3.7.4以降への更新を求めている。すぐに更新できない場合の対策として、まず設定項目「max-payload-size-reliable」(またはサービスごとの同等の設定)で、受け付けるメッセージの大きさをサービスに見合った値に制限するよう挙げた。更新せずに取れる手段として最も有効だとしている。
あわせて、TCPで接続できるあらゆる機器から攻撃が届きうるため、ネットワークを分けて露出を減らすよう求めた。TCPの窓口は、信頼できる隔離された車内や試験用のネットワークにとどめ、ファイアウォールなどで既知の許可された相手に接続を限る。SOME/IPの窓口は「信頼できない外部のネットワークにさらすべきではない」としている。運用者には、メモリー使用量の異常な増加や、SOME/IPのポートへの想定外の接続の繰り返しを監視するよう促している。
