
CVE-2026-10672の概念実証(PoC)エクスプロイト。Zephyr RTOSのLwM2Mファームウェア更新プルクライアントにおける領域外読み取り(out-of-bounds read)の脆弱性です。スタンドアロンのC再現コードと、テスト用の悪意あるCoAP/LwM2Mサーバーが含まれます。
CVE-2026-10672 の概念実証コード。Zephyr RTOS の
LwM2M ファームウェア更新プルクライアント (subsys/net/lib/lwm2m/lwm2m_pull_context.c) における領域外読み取りです。
lwm2m_pull_context.c の lwm2m_pull_context_start_transfer()memcpy(context.uri, uri, LWM2M_PACKAGE_URI_LEN) は、サーバー提供の
Package URI (/5/0/1) が128バイト以上の場合に、char uri[128] へ
正確に128バイトをNUL終端文字なしでコピーします。後続の strlen(context.uri)、
http_parser_parse_url()、CoAP PROXY_URI オプションの追加処理は、バッファを越えて
隣接する構造体メモリ(is_firmware_uri、result_cb /
write_cb 関数ポインター、DTLS接続コンテキスト)を読み取ります。過剰読み取りされた
バイトは、送信CoAPリクエストで外部に漏えいします。context.uri[128] (CONFIG_LWM2M_SWMGMT_PACKAGE_URI_LEN、デフォルト128;
LWM2M_PACKAGE_URI_LEN はその値に #define されています)99a164df5cea5af76e32b57c6d51854f018969a2
— strlen(uri) >= sizeof(context.uri) の場合に -ENOMEM を返す処理を追加し、strcpy() に切り替え。| ファイル | 目的 |
|---|---|
poc.c | 脆弱性のある/修正されたコードパスを再現するスタンドアロンのCコード。struct firmware_pull_context(uri[128] バッファと過剰読み取りされる隣接フィールド)と情報漏えいするCoAP コンシューマを忠実に再宣言します。 |
gcc -O0 -g -o poc poc.c
./poc
期待される結果: 200バイトのPackage URIにより、CoAP PROXY_URI オプションは 141バイト になります。
— 128バイトのURIに加え、context.is_firmware_uri、
構造体パディング、result_cb/write_cb 関数ポインターから 13バイト漏えい します。修正されたコードでは
URIが -ENOMEM で拒否され、何もコピーされません。
gcc -O0 -g -fsanitize=address -o poc-asan poc.c
./poc-asan
このプローブは正確に128バイトを割り当て、非NULバイトで満たし(
終端文字なしの完全な context.uri を再現)して strlen() を呼び出します:
ERROR: AddressSanitizer: heap-buffer-overflow
READ of size 129 at 0x...
0x... is located 0 bytes after 128-byte region [...,0x...)
# Build and inspect the CoAP packets without sending:
python3 lwm2m_evil_server.py --dry-run --uri-len 200
# Send to a vulnerable client (NoSec CoAP, UDP/5683):
python3 lwm2m_evil_server.py --target 10.0.0.42 --port 5683 --uri-len 200 --listen 2
このスクリプトは、CoAP PUT /5/0/1(Package URIリソースへのLwM2M Write)を送信し、
続いてCoAP POST /5/0/2(LwM2M Execute Update。これにより
ファームウェアのプルが開始され、バグが発動します)を送信します。本番のLwM2Mではセッションは
DTLS(UDP/5684)上で実行されます。対象となる攻撃者は、悪意のある/侵害された
管理サーバー、またはDTLSサーバー認証が強制されていない場合の経路上の攻撃者
です。
認可されたセキュリティ研究および教育目的のみに使用してください。これらのツールを、所有していない、またはテストする 明示的な許可がないデバイスに対して使用しないでください。
PROXY_URIlwm2m_evil_server.py | UDP(NoSecモード)で脆弱なクライアントの /5/0/1 に過大なPackage URIを届ける最小限のCoAP/LwM2Mサーバー。攻撃のネットワーク配信部分です。外部依存関係はありません。 |