一个绝妙的 exploit
Oen 通过 Google 阅读器发送给您的内容: 一个绝妙的 exploit 于 13-5-15 通过 A Geek's Page 作者:王 聪 最近 Linux 内核爆出了一个严重的安全漏洞,非root用户可以通过该 漏洞的 exploit 获取root权限。这并不罕见,值得一提的是这个补丁看起来如此平常以至于我们绝大多数人都不会以为这是安全问题。 先看这个问题的 补丁 ,就是下面这个: static int perf_swevent_init(struct perf_event *event) { - int event_id = event->attr.config; + u64 event_id = event->attr.config; if (event->attr.type != PERF_TYPE_SOFTWARE) return -ENOENT; 我们第一眼的感觉就是这大概只是修复了编译器报的一个小警告吧,怎么会引起如此严重的安全问题呢? 在没打补丁的代码中 event_id 是个 带符号 的整型,而且就在下面不远处的两行代码中只检查了其上界: PLAIN TEXT C: if ( event_id> = PERF_COUNT_SW_MAX ) return - ENOENT; 而如果传递进来的 event->attr.config 值正好设置了符号位,那么 event_id 就会变成负值,而且能躲过上面的检查。 负值意味着什么呢?再继续看后面的代码: PLAIN TEXT C: if ( ! event - >parent ) { int err; err = swevent_hlist_get ( event ) ; if ( err ) ...