n132/BeapOverflow
GitHub: n132/BeapOverflow
展示 Linux 内核 x86_64 架构下堆地址随机化范围不足导致 BSS 溢出到堆的技术研究及已修复漏洞的 PoC。
Stars: 20 | Forks: 2
# BeapOverflow (Bss 溢出 -> 堆溢出)
这是一个关于地址随机化的发现。在 `bss` 段和堆区域之间可能没有间隙。
这不是一个安全的设计,因为人们可以从 `bss` 溢出到堆,并在 tcache 管理结构上部分写入重要数据。
我们可以暴力破解 0x2000 次(理论上)来执行 BeapOverflow。
但是我们需要在 `bss` 上溢出至少超过一个页面,这很罕见。
# 补丁
我向 linux 内核安全团队报告了这个问题,并且这个问题已在此次 [提交][2] 中修复
但是 `.bss` 仍然可以连接到堆。概率为 1024/1G,这在大多数情况下太小而难以利用
```
unsigned long arch_randomize_brk(struct mm_struct *mm)
{
- return randomize_page(mm->brk, 0x02000000);
+ if (mmap_is_ia32())
+ return randomize_page(mm->brk, SZ_32M);
+
+ return randomize_page(mm->brk, SZ_1G);
}
```
# 概念验证
- 编译 c 代码:[main.c](./main.c)
- 多次运行 Python 脚本以查看偏移范围:[exp.py](./exp.py)

# 最大范围
0 - 0x1fff
# 源码阅读
在阅读了这篇 [文章][1] 后我定位了该文件,并且源代码确认了我代码的正确性:
https://elixir.bootlin.com/linux/v6.8/source/arch/x86/kernel/process.c#L1031
# 原因
尽管我们有更多空间,但仍然使用 x86 的值 (0x2000)。
标签:BSS段溢出, Exploit开发, Linux内核安全, PoC, TCache攻击, Web报告查看器, x86架构, 二进制利用, 内存破坏, 内存管理, 内核漏洞, 地址随机化绕过, 堆溢出, 子域名枚举, 安全渗透, 暴力破解, 系统安全, 网络安全, 逆向工具, 隐私保护