用户可以通过聊天插件发现其他用户的IP(修复盗链保护)

(先前通过安全渠道报告,但被拒绝,现在遵循负责任披露流程进行公开披露)

摘要/请求

作为一个用户,我希望聊天中发布的外部链接图片能由服务器缓存,然后再显示给我,以保护我的 IP 免受恶意第三方图片托管服务器的侵害。我仍然希望看到缓存/代理的图片!

Discourse 已经为此提供了设置,但它们没有正确应用于聊天。启用两个相关的外部链接设置(如下)应该与论坛的行为相同。即:第三方托管的图片会被下载到服务器,然后再显示给用户。

背景/影响

在互联网论坛的早期,允许用户通过“外部链接”到托管图片的第三方服务器来发布图片嵌入非常流行。

虽然这在旧论坛中很常见,但随着互联网的发展,我们了解到这是一种不良做法。几乎所有的社交媒体平台都已演进以防止这种情况。部分原因是为避免图片损坏/丢失或使小型服务器过载的问题,但还有一个非常重要的安全考量:

用户从站外服务器发布图片时,会从链接的服务器下载该图片。这使得恶意的第三方服务器能够记录用户的 IP。这非常成问题,因为如果服务器由恶意用户运行,他们现在就知道其他用户的 IP。(想象一下,一个恶意用户给你发消息以发现你家庭 IP 的情况)

泄露的 IP 可能被恶意人士用来确定用户的真实身份,或扫描他们的家庭路由器/PC 的漏洞等。如果其他网站存在任何 XSS 漏洞,你甚至可能在其他网站上利用它进行XSS攻击。

这就是为什么几乎所有主要的社交网络(Twitter、Discord、Facebook 等)出于安全原因不再进行图片外部链接。现在,所有第三方图片都会在服务器上缓存,而不是由用户直接拉取。

相关的 Discourse 设置

Discourse 提供了两个相关设置:

Block hotlinked media(阻止外部链接媒体)会将外部链接的图片替换为文本链接。

Download remote images to local(将远程图片下载到本地)会将外部链接的图片转换为本地存储的图片。

论坛中的设置行为

:white_check_mark: 启用这两个设置后,在我的有限测试中,论坛似乎按预期工作。外部图片在显示给其他用户之前会被转换为本地图片,从而保护用户的 IP。我没有进行广泛的计时攻击来验证行为,但在我有限的测试中,它至少能正确工作。

(这是我对任何现代社交平台所期望的行为,类似于 Twitter/Discord/Facebook 等平台上的行为)

聊天中的设置行为

在聊天中,我无法获得类似的行为。任何设置组合都无法产生令人满意的结果:

:cross_mark: 启用这两个设置会将远程图片仅转换为链接。但是,在非常短的时间窗口内,图片仍然会显示给其他用户,从而产生一个网络请求,将用户的 IP 暴露给其他用户。 这基本上是最糟糕的结果,因为用户的 IP 被暴露了,而你甚至看不到图片。

:cross_mark: 禁用 Block hotlinked media 并启用 Download remote images to local 只会进行外部链接;它似乎没有真正下载远程图片。这不是一个漏洞,但似乎是一个错误。

:cross_mark: 启用 Block hotlinked media 并禁用 Download remote images to local 的行为与同时启用它们时相同。它显示为链接而不是图片——但图片有时会被远程客户端拉取,暴露 IP。(我发现有时第一次发送图片时会阻止它,但第二次短暂地不会,或者其他可能与时间相关的、频繁发生的问题。)

(今天在 git 的开发版本上重新测试:3.5.0.beta8-dev (2c0635ee4c))

披露/响应

我之前(在 2024 年)通过电子邮件和 hackerone 报告了这个问题,但被告知这不是一个安全问题,安全报告 (2844784) 被拒绝了,很遗憾。以下是相关的声明:

感谢您的报告。经过仔细审查,我将关闭此报告,因为描述的行为是标准的网络功能,而不是安全漏洞。

当浏览器加载任何外部资源(图片、脚本等)时,它必然会向托管服务器发出请求。该服务器自然会看到请求的 IP 地址——这是互联网工作方式的基本原理,本身不被视为安全漏洞。虽然 IP 地址在某些情况下可被视为个人数据,但通过标准网络请求暴露 IP 地址是用户在浏览互联网时隐含接受的预期行为。

Discourse 中的外部链接保护旨在防止未经授权的内容重用,而不是向外部服务器隐藏用户 IP 地址。

这可能确实是外部链接阻止功能的使用目的,但我确实认为不解决这个问题会使聊天插件用户面临风险——尤其是在更混乱的社区中,可能存在试图查找对手家庭 IP 并进行人肉搜索/DDoS 攻击的用户。

我也反对用户在当今信任的论坛网站上隐含同意访问不受信任的外部链接 URL 的说法。我不会评论 GDPR/等相关问题,因为我不知道它们,但仅从基本的隐私期望来看,除非在非常旧的论坛上,否则不应期望这种情况。绝对不是现代论坛。

我已于 2024 年 11 月 22 日告知我打算在此论坛上公开讨论此问题,此后未收到任何回复。

我在此发帖,以便其他 discourse 管理员能够了解情况,并希望鼓励工程团队改进外部链接保护。由于时间已久且没有改进,我本着善意发帖,希望引起关注,或许社区的鼓励能促使问题得到改进。


感谢阅读 :slight_smile:

3 个赞

感谢您提供详细的报告,团队将在未来几周内对此进行研究,并确定封闭此向量所涉及的工作。

我同意站点设置应在整个产品中均匀工作,而不应仅限于特定主题。

2 个赞