CVE-2025-61598Discourse是一个开源讨论平台,被全球众多社区和论坛广泛使用。该平台在3.6.2之前版本及3.6.0.beta2之前版本中存在一个缓存控制相关的安全漏洞。具体表现为:Discourse的错误响应中缺少默认的Cache-Control响应头(值为'no-store, no-cache'),这导致Web代理服务器和CDN可能会意外缓存这些错误响应页面。攻击者可以利用这一缺陷,通过精心构造的恶意请求触发特定的错误响应,并诱导代理服务器缓存这些响应。当其他合法用户访问相同路径时,会从代理缓存中接收到被污染的内容,从而可能导致缓存投毒攻击。这种攻击可以造成会话劫持、敏感信息泄露、恶意内容注入等严重安全问题。由于Discourse是一个社区平台,用户量通常较大,因此该漏洞的影响范围可能相当广泛。
该漏洞属于Web缓存投毒(Cache Poisoning)类型,源于Discourse在错误响应处理中未正确设置缓存控制头。正常情况下,Web应用应通过Cache-Control: no-store, no-cache响应头来指示代理服务器不要缓存敏感内容,特别是错误响应。Discourse在处理错误响应时遗漏了这一关键的安全头,导致代理服务器(如Varnish、Nginx、CDN等)可能将这些错误页面缓存起来。攻击者可以构造特定的请求参数或路径,触发Discourse返回错误响应(如404、500等错误页面)。由于缺少no-store指令,代理服务器会将这些错误响应缓存并保留一段时间。此后,任何访问相同URL的合法用户都会从缓存中获取被污染的错误页面。攻击者可以在缓存的错误页面中注入恶意JavaScript代码、钓鱼内容或重定向脚本,从而对后续访问该页面的用户发动攻击。这种攻击的隐蔽性较高,因为用户访问的是原本可信的域名,但实际上收到的是被篡改的缓存内容。