P-Netに任意コード実行の恐れのある脆弱性、1.0.3で修正
産業用通信スタックP-Netに、細工した接続要求でメモリを壊され、機器が停止したり、コードを実行されたりする恐れのある脆弱性が見つかりました。対象は、特定のビルドオプションを有効にして組み込んだ機器だけです。該当する開発元は修正版1.0.3で再ビルドし、機器の利用者はベンダーに該当の有無を問い合わせてください。
急ぎ度: 早めに
CVSS v4は9.3で認証なしのネットワーク経由で悪用でき、修正版1.0.3も出ていますが、影響するのは既定で無効なオプションを有効にした場合に限られます。
関係があるか
P-Netを組み込んだPROFINET機器を開発・製造しているメーカーと、その機器を工場や設備で使っている組織が対象です。ただし、ビルド時にPNET_OPTION_AR_VENDOR_BLOCKSを有効にした場合に限ります。このオプションは既定で無効です。
| 製品 | 影響を受ける版 | 直った版 |
|---|---|---|
| RT-Labs P-Net(PNET_OPTION_AR_VENDOR_BLOCKSを有効にしてビルドした場合) | 1.0.3より前のすべての版 | 1.0.3 |
確かめ方
- 1自社で機器のファームウェアを開発している場合は、P-Netのソースとビルド設定で、PNET_OPTION_AR_VENDOR_BLOCKSが有効になっていないかを調べます。
- 2利用しているP-Netの版が1.0.3より前かどうかを、依存関係の記録やサブモジュールの参照先で確認します。
- 3機器を購入して使っている場合は、ファームウェアにP-Netが入っているか、このオプションを有効にしているかを、機器のベンダーに問い合わせます。利用者側で版を見分けるのは難しいためです。
何が起きたか
P-Netに、特定の要求を処理するときにメモリの範囲外へデータを書き込んでしまう脆弱性が見つかりました。結果として、機器が停止する(サービス拒否)か、場合によっては任意のコードを実行されます。
問題があるのは、PNET_OPTION_AR_VENDOR_BLOCKSを有効にしてビルドしたときに使われるARVendorBlock要求の解析処理です。この処理は、ブロックの定義に含まれない項目からデータ長を読み取り、その値をそのままコピーするバイト数として使います。コピー先は固定サイズのバッファーですが、バッファーの大きさともブロックの長さとも照らし合わせません。細工したConnect要求を受け取ると、バッファーの外に書き込みが起きます。CWEの分類はCWE-787です。
RT-Labsはこの問題をP-Net 1.0.3で修正しました。
攻撃の流れ
-
1
機器へ到達
攻撃者が、P-Netを使う機器のPROFINET通信に届くネットワーク上の位置に入ります。
-
2
細工した要求
ARVendorBlockを含む、長さの値を偽ったConnect要求を機器に送ります。
-
3
長さを無検証
機器が、要求内の長さを確認せずに固定サイズのバッファーへコピーします。
-
4
範囲外に書込
バッファーの外のメモリが書き換わります。
-
5
停止か乗っ取り
機器がクラッシュするか、条件次第でコードを実行されます。
どう悪用されるか
認証は不要で、利用者の操作も要りません。CVSS v4のベクターはネットワーク経由(AV:N)で、攻撃条件の複雑さは低く(AC:L)、特別な前提もありません(AT:N)。P-Netの通信を受け付ける機器にネットワークで到達できれば、Connect要求を送るだけで成立します。ただし、機器がPNET_OPTION_AR_VENDOR_BLOCKSを有効にしてビルドされていることが前提です。
成功した場合、最低でも機器のクラッシュによるサービス停止が起こります。コード実行まで至れば、機密性・完全性・可用性のいずれにも大きな影響が出ると評価されています。制御機器では、機器の停止がそのまま設備の停止につながります。一方で、機器の外にある別のシステムへの影響(SC・SI・SA)は評価されていません。
今すぐやること
-
1
オプションの有効化を確認する
自社でP-Netを組み込んでいる場合は、ソースとビルド設定でPNET_OPTION_AR_VENDOR_BLOCKSの指定を調べます。無効なら、この脆弱性の影響は受けません。
grep -rn PNET_OPTION_AR_VENDOR_BLOCKS . -
2
使用中のP-Netの版を洗い出す
製品ごとに、組み込んでいるP-Netの版が1.0.3より前かどうかを一覧にします。有効化している製品を優先します。
-
3
修正版に更新して再ビルドする
P-Netを1.0.3に更新し、ファームウェアを再ビルドして、動作を確認したうえで出荷・配布します。
-
4
機器のベンダーに問い合わせる
機器を購入して使っている組織は、該当製品の有無と、修正済みファームウェアの提供時期をベンダーに確認します。回答を待つあいだは、回避策を適用できるか検討します。
すぐ更新できないとき
このオプションが業務上不要なら、無効にして再ビルドします。脆弱性があるのは有効時に使われる処理なので、無効化で影響を避けられます。再ビルドや更新がすぐにできない機器では、PROFINET機器のネットワークを制御系の専用セグメントに分け、信頼できない端末や外部のネットワークから到達できないようにします。
背景
P-Netは、RT-Labsが公開しているオープンソースのPROFINETデバイス用スタックです。PROFINETは工場の制御機器が使う産業用イーサネットの規格で、P-Netはその通信をI/O機器などの組み込み機器側で処理します。多くの場合、利用者が直接インストールするのではなく、機器メーカーがファームウェアに組み込んで出荷します。そのため、修正版が出ても、手元の機器に反映されるにはメーカーのファームウェア更新を待つことになります。
今回の脆弱性は、要求に含まれる長さの値を信用して、コピー先の大きさと照らし合わせなかったことで起きています。通信プロトコルの解析処理で、長さを検証しないまま固定サイズのバッファーに書き込むと範囲外書き込みになる、という典型的な形です。通信を受ける側の機器では、認証より前の段階で処理されるため、認証が防御にならない点が厄介です。
よくある質問
Q.1.0.3より前の版でも、オプションが無効なら更新しなくてよいですか。
まだ分かっていないこと
- 実際の攻撃で悪用されたかどうかは、公表されていません。
- P-Netを組み込み、このオプションを有効にして出荷されている製品の一覧は、公表されていません。
- 修正版1.0.3に、この脆弱性以外の変更が含まれるかどうかは、分かっていません。詳細はRT-Labsの告知(RRTL-261019-01)で確認してください。
この記事は、取得元の公開情報をもとに生成 AI で作成しています。誤りを含むことがあります。対応を決める前に、下の原文と参照先を確認してください。
影響パッケージ
| 種類 | パッケージ | 影響を受ける版 | 直った版 |
|---|---|---|---|
| RT-Labs | P-Net |
1.0.3 未満 |
1.0.3 |
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
P-Net before 1.0.3, when built with PNET_OPTION_AR_VENDOR_BLOCKS enabled, parses a data length from a field of the ARVendorBlock request that is not part of the block definition and uses it as the number of bytes to copy into a fixed-size buffer, without comparing it with the buffer size or the block length. A crafted Connect request causes an out-of-bounds write. This can lead to a crash (denial of service) or potentially arbitrary code execution.
This option is disabled by default.
出典: CVE.org (CVE Program・cvelistV5) NVD
参照URL
- web rt-labs.com