漏洞
缓冲区溢出
别称: 缓冲区溢写
定义
内存安全缺陷:程序写入数据超出已分配缓冲区末尾,破坏相邻内存,常被用于实现代码执行。
缓冲区溢出常发生在 C、C++ 等语言中,程序未对输入长度与目标缓冲区大小进行正确检查。多余的字节会覆盖相邻的栈帧、堆块、函数指针或返回地址,使攻击者得以劫持控制流或泄露数据。经典的栈溢出是众多历史漏洞利用的基础,堆溢出在今天仍然非常普遍。现代缓解措施包括栈金丝雀、ASLR、DEP/NX、控制流完整性、更安全的 libc 函数、模糊测试,以及越来越多地向 Rust 等内存安全语言迁移。缓冲区溢出归入 CWE-119 等条目,并长期出现在 OWASP、SANS 的高危榜单中。
示例
- CVE-2014-0160(Heartbleed):OpenSSL 中的内存读取越界。
- Morris 蠕虫(1988)利用 fingerd 中的栈溢出。