Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 544

整数下溢

整数下溢 是什么?

整数下溢一种算术缺陷(CWE-191):无符号整数被减到 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 的模糊测试,以及严格的输入验证。

示例

  1. 01

    len = total - header_len 在 total < header_len 时回绕为 0xFFFFFFFF,随后被用作 memcpy 长度。

  2. 02

    Linux 内核 CVE-2019-11815:剩余长度减法下溢从而触发 UAF。

常见问题

整数下溢 是什么?

一种算术缺陷(CWE-191):无符号整数被减到 0 以下会回绕成极大值,常导致超大分配或缓冲区越界。 它属于网络安全的 攻击与威胁 分类。

整数下溢 是什么意思?

一种算术缺陷(CWE-191):无符号整数被减到 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。

相关术语