Caddy SSO插件曝10个安全漏洞,可导致客户端代码执行与OAuth重放攻击

本文详细分析了Caddy服务器SSO插件中发现的10个安全漏洞,包括反射型XSS、不安全随机数生成、IP欺骗等高风险问题,并提供了即时修复方案与长期防护建议。

Caddy SSO插件安全漏洞分析

我们在Caddy Web服务器的caddy-security插件中发现了10个安全漏洞,这些漏洞可能导致各种高严重性攻击,包括客户端代码执行、OAuth重放攻击和未授权资源访问。

Caddy背景介绍

Caddy(又称Caddy Server或Caddy 2)是一个用Golang编写的现代开源Web服务器,设计易于使用且高度可配置。caddy-security插件是Caddy的中间件插件,提供各种安全相关功能,包括基于表单、基本、本地、LDAP、OpenID Connect、OAuth 2.0、SAML认证,以及基于JWT/PASETO令牌的HTTP请求授权。

漏洞发现

问题1:反射型跨站脚本(XSS)

严重性:高

反射型XSS发生在应用程序将不受信任的数据包含在发送给用户浏览器的HTML响应中。攻击者可利用此漏洞在目标用户浏览器中执行任意JavaScript代码。

即时修复方案: 将所有字符串值视为潜在不可信来源并进行适当转义(使用safehtml/template包生成输出安全的HTML)。

深度防御建议:

  • 使用恶意XSS载荷扩展单元测试
  • 在测试环境中使用Burp Suite Professional的主动扫描器
  • 扩展文档以推广安全头,特别是内容安全策略(CSP)头

问题2:不安全随机数生成

严重性:高

插件使用基于Unix时间戳种子的math/rand库生成安全关键字符串,可能通过暴力搜索预测。攻击者可利用可预测的nonce值进行OAuth重放攻击。

即时修复方案: 使用加密安全随机数生成器(crypto/rand)。

长期建议:

  • 审查其他使用math/rand的安全上下文
  • 避免代码重复,创建安全包装函数
  • 在CI/CD中实施Semgrep检查

问题3:通过X-Forwarded-For头进行IP欺骗

严重性:中

攻击者可通过操纵X-Forwarded-For头欺骗用户身份模块中使用的IP地址,可能导致未授权访问。

修复方案: 重新实现应用程序,不依赖用户提供的头来获取用户IP地址。

问题4:基于Referer头的XSS

严重性:中

通过重写Referer头可触发XSS漏洞,虽然对某些字符进行了转义,但未考虑JavaScript URL方案攻击。

问题5:开放重定向漏洞

严重性:中

登录用户点击特制链接可能被重定向到外部网站,可能导致钓鱼攻击。

问题6:X-Forwarded-Host头操纵

严重性:中

处理X-Forwarded-Host头可能导致各种安全漏洞,包括Web缓存中毒、业务逻辑缺陷和SSRF。

问题7:X-Forwarded-Proto头操纵

严重性:低

处理X-Forwarded-Proto头可能导致重定向到注入的协议,可能绕过安全机制。

问题8:通过暴力破解验证码绕过2FA

严重性:低

双因素认证缺乏足够的暴力破解保护,攻击者可通过自动化完整的多步2FA过程绕过阻止机制。

问题9:注销时缺乏用户会话失效

严重性:低

点击"登出"按钮后用户会话仍然有效,攻击者可利用活动会话执行未授权操作。

问题10:解析Caddyfile时多次恐慌

严重性:低

多个解析函数在尝试访问元素前未验证输入值是否为nil,可能导致恐慌。

Golang安全社区

我们在Trail of Bits热爱编写和审查Golang代码库,持续开发Golang相关的Semgrep资源、规则和博客文章。

协调披露时间线

  • 2023年8月7日:向caddy-security插件维护者报告发现
  • 2023年8月23日:维护者确认无近期修复计划
  • 2023年9月18日:发布披露博客文章并在原始项目仓库提交问题
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计