速率限制(Rate Limit)是为了限制某种资源在某段时间内被访问的次数,也即客户端发起请求的或服务端响应请求的次数,目的在于防止DoS攻击或对资源的无限请求下载。资源可以是网站服务、API接口或 磁盘读写等。本文中作者就通过发现了雅虎(Yahoo)网站评论区的速率限制漏洞,可在短时间内发送大量评论,造成评价拥塞,从而收获了雅虎官方奖励的$2000。

速率限制漏洞

在一些API接口中,应该考虑速率限制,限制每个客户端IP对API接口的请求是1分钟内最多多少次调用,如果超过该次数,那么,服务端应该采取拦截封堵,这样从服务端性能和资源安全性方面考虑,都会是一个很好的控制措施。

如果服务端未设置合理的速率限制(Rate Limit)措施,那么可以造成间接的DoS或是用户信息泄露。比如,若网站提供了邮箱和手机号码注册功能,并设置有忘记密码页面,但是却忘记针对忘记密码功能做速率限制(Rate Limit),那么我们对此可以发起两方面的利用:

1、在忘记密码页面中填入注册用户(受害者)的注册邮箱或手机号码,配合BurpSuite抓包,提交忘记密码请求,利用repeater或intruder模块进行多次数据包重放,1000次或上万次的重放将对受害者邮箱和手机造成信息轰炸;

2、收集或生成邮箱和手机字典,根据忘记密码页面请求的响应提示,判断网站注册用户,间接实现对网站注册用户的枚举。

雅虎(Yahoo)的速率限制漏洞

当然,速率限制漏洞不仅限于忘记密码页面,还会存在于一些用户评论、用户添加、用户邀请、评论发送或一次性密码(OTP)发送等功能中。就比如我最近在yahoo.com用户评论区发现的一个速率限制漏洞,利用该漏洞,我可以在1分钟内发送多达100到200条的GIF动图评论,在评论区造成GIF flood。如下:

我发现yahoo.com网站中有4个服务端都存在类似漏洞,目前这些漏洞均已修复。用Intruder的复现步骤如下:

1、去到存在速率限制漏洞的评论区,发送评论;

2、用BurpSuite抓包并发送到Intruder模块;

3、清除其它多余参数,保留评论区参数;

4、针对评论区构造任意评论内容字典,开始发起attack;

5、attack结束,刷新评论区页面即可看到attack后留下的评论内容。

同样,用Repeater点击多次送请求包也能实现同样效果:

漏洞修复建议

1、在API接口中设置速率限制措施;

2、在API接口中设置严格的权限设置,严格防范IDOR漏洞;

3、对于忘记密码或注册等用户功能处,不给出明显的请求响应提示。

*参考来源:medium,clouds 编译整理,转自 FreeBuf