应用层DoS - 回复区大型Markdown负载导致资源耗尽
漏洞概述
在 https://try.discourse.org 网站的回复区发现了一个应用层拒绝服务(DoS)漏洞。通过提交超大型标记负载(约80万字符),服务器需要30秒才能响应,最终返回HTTP/2 502 Bad Gateway错误。这表明存在潜在的资源耗尽或后端服务故障,可能被利用来降低或破坏网站可用性。
攻击场景
如果攻击者使用多个并行请求(例如通过Burp Intruder、Python脚本或僵尸网络)自动化此请求,可能导致严重的资源耗尽。后端服务将被淹没,导致广泛的服务中断,阻止合法用户访问论坛。
复现步骤
- 使用有效凭证登录 https://try.discourse.org
- 导航到默认的discobot问候消息
- 在拦截请求的同时,使用以下负载回复消息:https://github.com/theteatoast/theteatoast.github.io/blob/main/payload.txt
- 重复请求并观察服务器需要约30秒才能响应502
视频证明
提供了完整的视频证明展示攻击过程。
建议缓解措施
- 在回复中实施输入长度限制,防止过大的负载大小
- 引入速率限制和请求节流以减轻自动化滥用
- 优化后端请求处理,在处理前尽早拒绝大型负载
影响
- 攻击者可利用此漏洞导致严重延迟和临时或长期服务中断
- 缺乏输入验证允许攻击者并行发送多个大型请求,导致后端资源耗尽
- 如果自动化,此攻击可能使论坛完全无法访问
额外测试发现
通过执行7个并行请求使用大型Markdown负载模拟多个并发攻击者,同时监控与回复操作无关的/latest端点(不使用会话cookie,匿名进行)。结果显示:
- 通常响应时间为1-2秒的/latest端点,在攻击期间需要约30秒才能响应
- 这证明负载可能导致应用级资源耗尽,影响不相关的端点并降低论坛上其他用户的体验
漏洞验证与修复
经过多次测试和验证,Discourse团队确认了该漏洞的存在,并开发了修复程序。该修复已部署到托管客户,并在下一个测试版中公开发布。相关CVE编号为GHSA-3q5q-qmrm-rvwx。
披露政策
根据Discourse政策,研究人员必须在修复发布后等待90天才能公开披露有关漏洞的任何信息、研究方法或利用方式。