作为前言,当我在7月底发现本文中的漏洞时,我还不知道有“空字节溢出”这种类型的安全问题。我仅只是对一个标准Web应用的用户输入点进行了Fuzzing测试,就发现了这么一个有意思的漏洞,并获得了厂商高达$40,000美金的奖励。
直到近期,HackerOne上一个名为 “maxarr” 的用户上报了一个关于Mail.ru存在内存内容泄露的漏洞,我感觉他的这个漏洞和我的非常相似,Mail.ru安全总监Sergey Belov也对该漏洞有了以下的说明:(Lua绑定到不安全的C语言函数时导致的内存信息泄露)
“maxarr” 未在漏洞报告中给出具体细节,但Sergey Belov推特内容中透露出来的东西,让我对此前7月份发现的那个“空字节溢出”漏洞有了更准确的认识。在此我来做个分享。
漏洞发现背景
漏洞发现于DEF CON会议的前几天,当时我在旧金山闲了几天,并准备和一众朋友们开车到拉斯维加斯参加DEF CON大会,凑巧就是在这放松的几天当中,我发现了该漏洞。
朋友们准备驾车前往拉斯维加斯,其实本来我是不想去参加DEF CON大会的,但在最后时刻我甚至连行李和衣服都没准备,就决定加入了他们的公路之旅。我随便买了一些换洗的衣服,并与大家相约第二天早上在附近的星巴克做一波测试,之后就上路前往DEF CON。
意外地发现
当我一开始测试目标Web应用时,我就想到了用一些字符串技巧去注册测试账户,比如用“victim”加上一些空字节、CRLF控制符、空格或其它Unicode等特殊字符当做注册的用户名,这样做的想法在于,有些后端Web应用在处理这些特殊字符时,会把这些特殊字符简单的删除,由此做为攻击者来说,就能获得与目标账户“victim”同等的账户权限了。
我想如果这种思路最终可行,那么整个测试逻辑应该是这样的:攻击者用victim%00作为注册用户,有些独特的victim%00到达前端注册程序后,经处理操作,并被转向后端服务进行处理。关键点就在于,当victim%00经过前端和后端的两次处理后,其中的空字节%00在到达后端服务时就被删除了,所以最终变成了victim。
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。