CyberGlossary

漏洞

格式化字符串漏洞

别称: printf 格式漏洞

定义

因将用户可控输入直接作为 printf 等函数的格式化字符串而引发的漏洞,可被用于任意内存读写。

格式化字符串漏洞通常出现在开发者写下 printf(user_input) 而非 printf("%s", user_input) 时。%x 会泄露栈内存,%s 会解引用任意指针,%n 会把已输出字节数写入指定内存地址,从而获得任意读写原语。经典利用目标包括 GOT/PLT 表项、函数指针或栈金丝雀。现代工具链会发出告警(-Wformat-security、FORTIFY_SOURCE),许多新语言也禁止此种模式,但在遗留 C、嵌入式固件和 shell 中仍频频出现。防御十分机械:永远不要把不可信输入作为格式串,优先使用 fmtlib、Rust 的 println!、Go 的 fmt 等带类型与明确占位符的格式化器。

示例

  • CVE-2000-0573(wu-ftpd):site exec 中的格式串漏洞导致远程 root。
  • 嵌入式路由器将攻击者可控字段直接写入 syslog。

相关术语