挖洞经验 | HackerOne用户头像名称变化导致的DoS漏洞
字数 1064 2025-08-15 21:30:37
HackerOne用户头像名称变化导致的DoS漏洞分析
漏洞概述
该漏洞存在于HackerOne平台的用户头像上传功能中,由于未对头像图片文件名设置适当的字符长度限制,攻击者可以构造超长文件名导致平台某些页面出现拒绝服务(DoS)问题。该漏洞最终获得了HackerOne平台2,500美元的奖励。
漏洞发现过程
-
初始观察:在注册HackerOne用户时,发现头像图片默认文件名为
unnamed.jpg,且未对文件名长度进行限制 -
初步测试:尝试构造超长文件名,试图触发500服务器错误,但未成功
-
深入分析:发现HackerOne多个端点使用GraphQL查询用户信息,响应中包含用户头像URL和原始文件名
漏洞利用步骤
-
构造Payload:
- 创建一个约3.6MB的随机字符串作为文件名
- 替换默认的
unnamed.jpg文件名
-
上传恶意头像:
POST /settings/profile/picture HTTP/1.1 Host: hackerone.com Content-Type: multipart/form-data --boundary Content-Disposition: form-data; name="picture"; filename="[超长字符串].jpg" Content-Type: image/jpeg [图片数据] -
触发DoS:
- 使用主账户创建漏洞报告
- 邀请测试用户(@d3f4ul7_m4n)参与讨论
- 服务端请求
/reports/<report-id>/participants/时会包含恶意用户的头像文件名 - 响应因处理超长字符串而变慢或崩溃
-
扩大影响:
- 注册第二个恶意用户(@fossnow27)并同样设置超长头像名
- 同时邀请两个恶意用户参与报告
- 服务端响应完全崩溃
受影响的端点
- 用户配置页面
- 个人漏洞报告页面
- 邀请报告页面
- 公司众测项目的致谢白帽列表
漏洞危害
- 漏洞报告争议:恶意用户可在重复(duplicate)漏洞争议中阻止其他上报人有效参与
- 众测项目影响:可导致公司众测项目出现DoS问题
- 系统稳定性:影响多个关键页面的正常访问
漏洞复现步骤
- 访问
https://hackerone.com/settings/profile/edit - 上传用户头像图片并抓包
- 在请求中将
filename:unnamed.jpg替换为超长字符串Payload - 执行上传
漏洞时间线
- 2019.12.25:漏洞初报
- 2020.3.2:漏洞修复
- 2020.3.25:漏洞公开
防御建议
- 输入验证:对上传文件的文件名实施严格长度限制
- 数据处理:在GraphQL响应中截断或省略不必要的大数据
- 资源限制:设置请求处理超时和最大内存限制
- 缓存策略:对包含用户信息的响应实施适当缓存
总结
该漏洞展示了看似无害的文件名参数如何通过系统间的数据传递导致严重的DoS问题。在Web应用开发中,必须对所有用户输入实施严格的验证和过滤,特别是在数据会跨多个系统组件传递的情况下。