整数アンダーフロー
整数アンダーフロー とは何ですか?
整数アンダーフロー算術上の欠陥(CWE-191)。符号なし整数を 0 未満まで減算すると巨大な値に巻き戻り、過大なアロケーションやバッファ越境を引き起こす。
整数アンダーフローは、符号なし整数が 0 を下回るか、符号付き演算が INT_MIN を越えたときに結果が非常に大きな正の値へ巻き戻る現象です。典型的なパターンは len = header_len - prefix_len で、prefix_len が攻撃者制御の場合、計算結果の巨大な len が境界チェックを潜り抜けてヒープ/スタックバッファオーバーフローや境界外読み取りを誘発します。実例には libcurl の CVE-2018-1000005、パケット長の size_t 演算がアンダーフローした多数のカーネル脆弱性などがあります。対策は明示比較を伴う符号付き演算、検査付き減算(__builtin_sub_overflow、std::safe_int)、Rust デバッグや Swift などの言語レベルのオーバーフロートラップ、UBSan を併用したファジング、厳格な入力検証です。
● 例
- 01
total < header_len のとき len = total - header_len が 0xFFFFFFFF に巻き戻り、memcpy のサイズに使われる。
- 02
Linux カーネル CVE-2019-11815:残り長の減算がアンダーフローして UAF を誘発する。
● よくある質問
整数アンダーフロー とは何ですか?
算術上の欠陥(CWE-191)。符号なし整数を 0 未満まで減算すると巨大な値に巻き戻り、過大なアロケーションやバッファ越境を引き起こす。 サイバーセキュリティの 攻撃と脅威 カテゴリに属します。
整数アンダーフロー とはどういう意味ですか?
算術上の欠陥(CWE-191)。符号なし整数を 0 未満まで減算すると巨大な値に巻き戻り、過大なアロケーションやバッファ越境を引き起こす。
整数アンダーフロー はどのように機能しますか?
整数アンダーフローは、符号なし整数が 0 を下回るか、符号付き演算が INT_MIN を越えたときに結果が非常に大きな正の値へ巻き戻る現象です。典型的なパターンは len = header_len - prefix_len で、prefix_len が攻撃者制御の場合、計算結果の巨大な len が境界チェックを潜り抜けてヒープ/スタックバッファオーバーフローや境界外読み取りを誘発します。実例には libcurl の CVE-2018-1000005、パケット長の size_t 演算がアンダーフローした多数のカーネル脆弱性などがあります。対策は明示比較を伴う符号付き演算、検査付き減算(__builtin_sub_overflow、std::safe_int)、Rust デバッグや Swift などの言語レベルのオーバーフロートラップ、UBSan を併用したファジング、厳格な入力検証です。
整数アンダーフロー からどのように防御しますか?
整数アンダーフロー に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
整数アンダーフロー の別名は何ですか?
一般的な別名: 符号なしアンダーフロー, CWE-191。
● 関連用語
- vulnerabilities№ 543
整数オーバーフロー
算術演算の結果が整数型の表現可能範囲を超え、ラップアラウンドや切り詰めがセキュリティ上重大な影響を及ぼすバグ。
- vulnerabilities№ 131
バッファオーバーフロー
メモリ安全性の欠陥で、確保済みバッファの末尾を超えて書き込みが行われ、隣接メモリが破壊されてしばしばコード実行を可能にする。
- attacks№ 772
境界外読み取り
メモリ安全性に関するバグ(CWE-125)で、想定したバッファの前後または範囲外を読み取り、隣接メモリの内容を漏えいさせる。
- vulnerabilities№ 667
メモリ破壊
プログラムが意図したメモリ境界の外に書き込み、型安全性・制御フロー・データ整合性を損なうタイプの脆弱性を総称する用語。
- appsec№ 538
入力検証
アプリケーションが処理する前に、信頼できないすべての入力が期待する型・長さ・範囲・形式・値集合に合致しているかをサーバー側で確認する処理。