Exploiting a Blind Format String Vulnerability in Modern Binaries A Case Study from Pwn2Own Ireland 2024
在 2024 年 10 月,爱尔兰科克的 Pwn2Own 活动期间,黑客们针对多种硬件设备进行攻击,包括打印机、路由器、智能手机、家庭自动化系统、NAS 设备和安全摄像头等。本文重点介绍了一个在比赛前刚刚修复的复杂漏洞。尽管进行了及时修复,但该漏洞仍值得更多关注,而非被忽视。
介绍
在 2024 年 Pwn2Own 之前,这是一场以展示针对广泛使用的软件和设备的漏洞利用而闻名的著名黑客比赛。在此次比赛中,发现了运行在 ARM 32 位架构上的 Synology TC500 安全摄像头存在格式字符串漏洞。该漏洞源于一个 WEB 服务,具体是在解析 HTTP 请求的函数中,由于字符串格式化不当导致了该缺陷。
尽管现代安全措施如_地址空间布局随机化_(ASLR)、位置无关可执行文件(PIE)、不可执行内存(NX)和_完全重定位只读_(Full RelRO)等已被实施,但该漏洞在特定条件下仍然可以被利用。
利用该漏洞面临额外挑战:有效载荷限制为 128 个字符(其中部分字符保留给客户端 IP 地址),并且不允许使用一系列字符(从0x00
到0x1F
)。此外,在没有内存泄漏或无法查看客户端格式字符串输出的情况下,利用必须在盲目上下文中进行。
易受攻击的代码片段如下:
void mg_vsnprintf(const struct mg_connection *conn, int *truncated, char *buf, size_t buflen, const char *fmt, va_list ap) {
int n;
int ok;
if ( buflen ) {
n = vsnprintf(buf, buflen, fmt, ap);
ok = (n & 0x80000000) == 0;
if ( n >= buflen ) {
ok = 0;
}
if ( ok ) {
if ( truncated ) {
*truncated = 0;
}
buf[n] = 0;
} else {
if ( truncated ) {
*truncated = 1;
}
mg_cry(conn, "mg_vsnprintf", "truncating vsnprintf buffer: [%.*s]", (int)((buflen > 200) ? 200 : (buflen - 1)), buf);
buf[n] = '
评论