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

整数溢出

审核人Cybersecurity entrepreneur & security researcher

整数溢出 是什么?

整数溢出算术运算产生超出整数类型可表示范围的结果,以回绕或截断的方式带来安全关键影响的缺陷。


整数溢出发生在计算结果超过整数类型可容纳的最大(或最小)值时,导致回绕、符号翻转或截断。当错误的数值随后被用作缓冲区大小、循环计数、数组下标或授权检查时,就会成为安全问题,经常引发缓冲区溢出、无限循环或绕过限制。

经典模式。 一个常见的危险汇聚点是 malloc(count * size):如果 count * size 回绕超过了 SIZE_MAX,分配器返回的缓冲区就远小于代码所假设的大小,随后的复制便会越界写入——这是一次由乘法而非错误的 memcpy 长度所驱动的溢出。2015 年 Android 的 Stagefright 系列漏洞(CVE-2015-1538)正是利用了这一点:MP4 文件中 stsc 元数据原子里的整数溢出导致堆分配过小,使得单条 MMS 短信即可在估计约 9.5 亿台设备上实现远程代码执行。2002 年 OpenSSH 的 challenge-response 缺陷(CVE-2002-0639)以及许多图像编解码器和字体解析器的漏洞都是同样的形态。有符号到无符号的转换是与之相关的陷阱:一个被解释为巨大无符号值的负长度会击溃像 if (len > max) 这样幼稚的检查。

防御措施 包括受检算术(Rust 的 checked_add/checked_mul、C23 的 ckd_*、编译器选项 -ftrapv 以及 UBSan)、先用更宽的类型计算再在收窄前进行范围检查、选择与取值域相匹配的类型、在分配内存前验证由攻击者控制的大小,以及对解析器进行积极的模糊测试。

flowchart TD
  A[攻击者控制的<br/>count 与 size] --> B[size = count * elem]
  B --> C{乘积是否超过<br/>类型最大值?}
  C -->|否| D[分配正确]
  C -->|是| E[数值回绕为<br/>较小的数字]
  E --> F[分配了过小的缓冲区]
  F --> G[复制越界写入<br/>堆破坏 / RCE]

示例

  1. 01

    CVE-2002-0639(OpenSSH challenge-response):整数溢出导致堆破坏。

  2. 02

    CVE-2015-1538(Android Stagefright):MP4 'stsc' 原子中的整数溢出,可实现远程代码执行。

常见问题

整数溢出 是什么?

算术运算产生超出整数类型可表示范围的结果,以回绕或截断的方式带来安全关键影响的缺陷。 它属于网络安全的 漏洞 分类。

整数溢出 是什么意思?

算术运算产生超出整数类型可表示范围的结果,以回绕或截断的方式带来安全关键影响的缺陷。

如何防御 整数溢出?

针对 整数溢出 的防御通常结合技术控制与运营实践,详见上方完整定义。

整数溢出 还有哪些其他名称?

常见的别称包括: 整数回绕。

相关术语

另见