敏感信息泄露:OAuth2 客户端密钥在管理员设置中暴露(未屏蔽)

问题描述

在我们定制的 Discourse 部署的安全审查中,我们在管理员 > 设置界面中发现了一个关于 OAuth2 客户端密钥的潜在敏感信息泄露问题。

详细信息

  • 在管理员配置页面中,OAuth2 客户端密钥(以及其他潜在的敏感令牌/密钥)以明文形式显示,而不是被屏蔽(例如用星号表示)。

  • 管理员需要将明文密钥直接输入到设置中。任何能够访问管理员 UI 的人都可以看到完整的密钥。

  • 如果攻击者(即使是暂时的)获得了管理员会话的访问权限,他们可以轻松获取客户端密钥,并将其用于未经授权的 OAuth2 令牌请求或伪造请求到第三方服务。

安全影响

  • 管理员 UI 中明文暴露密钥会增加凭证泄露的风险。

  • 缺乏屏蔽不符合处理密钥的安全最佳实践。

  • 密钥/令牌可能被滥用于权限提升、身份仿冒或针对集成服务的进一步攻击。

问题

  • 是否有计划在管理员设置 UI 中屏蔽敏感字段,如 OAuth2 密钥(例如,显示为 ******,并在必要时提供显示选项)?

  • 是否有推荐的方法或插件来增强 Discourse 部署中敏感凭证的保护?

  • 此问题以前是否讨论过?在官方修复之前是否有任何变通方法?

感谢您关注这个重要的安全问题!

@Evie_Tao
你正在报告很多安全问题。你有没有想过按照 GitHub 存储库中的说明,在 HackerOne 上报告它们?

2 个赞

我们不认为信息 向管理员 泄露是个问题,但是的,它 应该 被标记为敏感,以避免不必要地显示,就像 google_oauth2_client_secret 一样。

这是一个简单的修复:

这是一个便利性与保密性之间的权衡;不允许在 UI 中取消隐藏密钥只会提供一种无法访问的假象,管理员还有其他方法可以轻松地从数据库中读取它。

但是,任何密钥(实际上是任何站点设置)都可以通过环境变量指定,这样它们就不会显示在管理员 UI 中。

(对吧 @pmusaraj?)

2 个赞