Source游戏中的远程代码执行漏洞的分析
2017年07月26日
原文
Valve的Source SDK包含了一个缓冲区溢出漏洞,其导致在客户端和服务器上能执行任意代码。这个漏洞在射杀玩家时触发,其能导致加载特定的布娃娃模型(ragdoll model)。多个Source游戏在2017年6月更新修复了这个漏洞。包括CS:GO, TF2, Hl2:DM, Portal 2, L4D2。我们感谢Valve非常负责,并迅速处理了漏洞。Valve一天内就修复并发布了更新。
0x01 缺少边界检查
函数nexttoken用于令牌化一个字符串。我们可以注意到, 只要找不到NULL字符或者分隔符sep,就会导致str这个buffer被复制到token这个buffer中。根本就没有边界检查。
const char *nexttoken(char *token, const char *str, char sep)
{
...
while ((*str != sep) && (*str != '