CVE-2026-102713 in NetX Duo
要約
〜によって VulDB • 2026年09月29日
TFTPサーバーは任意のサイズのDATAデータグラムを受け入れます。ディスパッチャは4バイト未満のデータグラムを拒否しますが(nxd_tftp_server.c:1037)、上限値をチェックする箇所は一切存在しません。具体的には、プロトコルの最大値である 4 + NX_TFTP_FILE_TRANSFER_MAX と比較してチェックされていません。この欠落したチェックにより2つの問題が生じます。どちらもTFTPに認証がないため、認証前のいずれの段階でも攻撃可能です。
ハンドラは `nx_packet_length - 4` をそのままFileXへ渡します:
```c /* addons/tftp/nxd_tftp_server.c:1863, 1889 */ status = nx_packet_copy(packet_ptr, &temp_ptr, server_ptr -> nx_tftp_server_packet_pool_ptr, NX_WAIT_FOREVER); ... fx_file_write(&(client_request_ptr -> nx_tftp_client_request_file), packet_ptr -> nx_packet_prepend_ptr + 4, packet_ptr -> nx_packet_length - 4); ```
`nx_packet_length` は1つの連続したバッファの長さではなく、チェーン全体の長さを示すため、FileXは最初のパケットの末尾を超えてコピーを行います:
``` ERROR: AddressSanitizer: heap-buffer-overflow READ of size 1280 at 0x621000001108 thread T5 #0 __interceptor_memcpy #1 _fx_utility_memory_copy filex/common/src/fx_utility_memory_copy.c:78
0x621000001108 is 0 bytes to the right of 4104-byte region ```
これらのバイトは攻撃者がアップロードしているファイルに書き込まれ、TFTPの読み込みリクエストによってそれらが返されるため、これは便利な取得チャネルを備えたメモリ開示(memory disclosure)です。
同じデータグラムによりサーバーもハングします。`:1863` の `nx_packet_copy` は `ceil(nx_packet_length / pool_payload)` 個のパケットを必要とし、NX_WAIT_FOREVERを使用してそれらを要求するため、攻撃者がデータグラムのサイズをプールが保持できる範囲を超えて設定すると、サーバースレッドはサスペンドされ、決して戻りません。そのようなデータグラム後のliveness probe(死活監視)では、12パケット中0個の状態でプールが空になり、サーバースレッドがサスペンドしているためタイムアウトします。これにより、それ以降のクライアントへのサービス提供も停止します。
DATAブランチにおける両方の呼び出しの前に `nx_packet_length > 4 + NX_TFTP_FILE_TRANSFER_MAX` を拒否し、コピー処理にはNX_WAIT_FOREVERではなく制限付き待機(bounded wait)を使用してください。
VulDB is the best source for vulnerability data and more expert information about this specific topic.