| Summary |
cbor2 バージョン 5.7.0 までの C 拡張デコーダー(source/decoder.c)の decode_definite_long_string() 関数には複数の脆弱性が存在します。(1) 整数アンダーフローによる範囲外読み取り (CWE-191, CWE-125) があります。チャンク処理ループで不適切な変数参照と状態のリセット漏れが発生し、UTF-8 文字を消費した後に buffer_length が 0 にリセットされません。その結果、後続の chunk_length 計算で負の値(例:chunk_length = 65536 - buffer_length)が生成され、この値が signed integer として read() メソッドに渡されることで、無制限の読み取り操作やリソース枯渇が発生する可能性があります。(2) 参照カウント解放漏れが原因でメモリリーク (CWE-401) が発生します。メイン処理ループにおいて、各イテレーションで割り当てられるチャンクオブジェクトの Python オブジェクト参照(Py_DECREF)の解放が行われていません。そのため、65536 バイトを超える CBOR 文字列の場合、ペイロードサイズに応じてメモリリークが累積し、大きな CBOR ペイロードの繰り返し処理によってメモリ枯渇攻撃を受ける可能性があります。これらの脆弱性は、65536 バイト境界に複数バイトからなる UTF-8 文字を含む定長テキスト文字列を持つ特別に細工された CBOR データを送信することで、認証なしのリモートから悪用することができます。攻撃が成功すると、プロセスがクラッシュして(CBORDecodeEOF 例外が発生し)、メモリ枯渇によるサービス拒否状態に陥る可能性があります。cbor2 の C 拡張を利用して信頼できない CBOR データを処理する全てのアプリケーション(Web API や IoT データ収集機、メッセージキュー処理など)がこの問題の影響を受けます。コミット 851473490281f82d82560b2368284ef33cf6e8f9(バージョン 5.7.1 リリース)により修正されました。
|