Entry № 478
格式化字符串漏洞
格式化字符串漏洞 是什么?
格式化字符串漏洞因将用户可控输入直接作为 printf 等函数的格式化字符串而引发的漏洞,可被用于任意内存读写。
格式化字符串漏洞通常出现在开发者写下 printf(user_input) 而非 printf("%s", user_input) 时。%x 会泄露栈内存,%s 会解引用任意指针,%n 会把已输出字节数写入指定内存地址,从而获得任意读写原语。经典利用目标包括 GOT/PLT 表项、函数指针或栈金丝雀。现代工具链会发出告警(-Wformat-security、FORTIFY_SOURCE),许多新语言也禁止此种模式,但在遗留 C、嵌入式固件和 shell 中仍频频出现。防御十分机械:永远不要把不可信输入作为格式串,优先使用 fmtlib、Rust 的 println!、Go 的 fmt 等带类型与明确占位符的格式化器。
● 示例
- 01
CVE-2000-0573(wu-ftpd):site exec 中的格式串漏洞导致远程 root。
- 02
嵌入式路由器将攻击者可控字段直接写入 syslog。
● 常见问题
格式化字符串漏洞 是什么?
因将用户可控输入直接作为 printf 等函数的格式化字符串而引发的漏洞,可被用于任意内存读写。 它属于网络安全的 漏洞 分类。
格式化字符串漏洞 是什么意思?
因将用户可控输入直接作为 printf 等函数的格式化字符串而引发的漏洞,可被用于任意内存读写。
如何防御 格式化字符串漏洞?
针对 格式化字符串漏洞 的防御通常结合技术控制与运营实践,详见上方完整定义。
格式化字符串漏洞 还有哪些其他名称?
常见的别称包括: printf 格式漏洞。