应用层DoS攻击:大型Markdown负载导致资源耗尽漏洞分析

本文详细分析了Discourse论坛平台中的应用层拒绝服务漏洞,攻击者通过在回复区提交超大型Markdown负载导致服务器资源耗尽,造成服务中断。包含完整的攻击场景、复现步骤和缓解建议。

应用层DoS - 回复区大型Markdown负载导致资源耗尽

漏洞概述

https://try.discourse.org 网站的回复区发现了一个应用层拒绝服务(DoS)漏洞。通过提交超大型标记负载(约80万字符),服务器需要30秒才能响应,最终返回HTTP/2 502 Bad Gateway错误。这表明存在潜在的资源耗尽或后端服务故障,可能被利用来降低或破坏网站可用性。

攻击场景

如果攻击者使用多个并行请求(例如通过Burp Intruder、Python脚本或僵尸网络)自动化此请求,可能导致严重的资源耗尽。后端服务将被淹没,导致广泛的服务中断,阻止合法用户访问论坛。

复现步骤

  1. 使用有效凭证登录 https://try.discourse.org
  2. 导航到默认的discobot问候消息
  3. 在拦截请求的同时,使用以下负载回复消息:https://github.com/theteatoast/theteatoast.github.io/blob/main/payload.txt
  4. 重复请求并观察服务器需要约30秒才能响应502

视频证明

提供了完整的视频证明展示攻击过程。

建议缓解措施

  • 在回复中实施输入长度限制,防止过大的负载大小
  • 引入速率限制和请求节流以减轻自动化滥用
  • 优化后端请求处理,在处理前尽早拒绝大型负载

影响

  • 攻击者可利用此漏洞导致严重延迟和临时或长期服务中断
  • 缺乏输入验证允许攻击者并行发送多个大型请求,导致后端资源耗尽
  • 如果自动化,此攻击可能使论坛完全无法访问

额外测试发现

通过执行7个并行请求使用大型Markdown负载模拟多个并发攻击者,同时监控与回复操作无关的/latest端点(不使用会话cookie,匿名进行)。结果显示:

  • 通常响应时间为1-2秒的/latest端点,在攻击期间需要约30秒才能响应
  • 这证明负载可能导致应用级资源耗尽,影响不相关的端点并降低论坛上其他用户的体验

漏洞验证与修复

经过多次测试和验证,Discourse团队确认了该漏洞的存在,并开发了修复程序。该修复已部署到托管客户,并在下一个测试版中公开发布。相关CVE编号为GHSA-3q5q-qmrm-rvwx。

披露政策

根据Discourse政策,研究人员必须在修复发布后等待90天才能公开披露有关漏洞的任何信息、研究方法或利用方式。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计