Ruby on Rails应用因Ransack搜索漏洞面临数据窃取风险
Ben Dickson
2023年1月26日 17:27 UTC
更新:2023年2月1日 21:29 UTC
多个应用易受暴力攻击;数百个应用可能面临风险
UPDATED 安全公司Positive Security警告,Ruby on Rails(RoR)应用中Ransack库的集成不当可能允许攻击者从后端数据库窃取信息。
Ransack允许开发人员为其Rails应用添加基于对象的搜索。其便利性和灵活性使其既被广泛使用,又从安全角度来看存在问题。
通过搜索遍历对象
默认情况下,Ransack支持关联对象的查询条件。例如,如果您在列出博客文章的页面上运行查询,可以通过与博客对象的关联包含关于文章作者的条件。
Ransack还支持非常有用的命令,可以附加到字段名称上,以使用“以…开头”或“包含”等运算符过滤结果。然而,如果没有防护措施,此功能可能使恶意行为者轻松遍历域以访问后端数据库系统。
例如,攻击者可以从帖子表转到用户表,并尝试猜测用户的密码哈希。过滤运算符使恶意行为者能够通过一次猜测一个字符的哈希值来加速过程。Positive Security研究人员发现,单个bcrypt密码哈希可以在几分钟内提取,且请求次数少于2000次。
“这是一个功能,问题在于Web应用如何使用此功能,即使用不受限制的用户输入作为参数调用Ransack搜索功能,”Positive Security董事总经理Lukas Euler告诉The Daily Swig。“然而,库文档明确推荐了这种使用方式。”
最近在Ransack文档中添加了一条通知,警告用户“搜索和排序在模型的任何列上都是授权的”。此警告是在GitHub上关于此问题的公开讨论开始后添加的。
在野外利用Ransack搜索
研究人员通过在URL数据集中搜索Ransack模式,发现了数百个可能易受攻击的站点。尽管他们无法验证每一个候选站点,但他们能够在数十个网站上确认此漏洞。
“我们在利用此问题时使用的常见模式是使用公开暴露的搜索功能,从可搜索数据类查找关联链到应用用户类的敏感属性,”Euler说。
他们最令人担忧的发现是能够使用Ransack接管管理员账户。例如,在fablabs.io(一个共享科学知识的平台)中,Ransack搜索查询可以访问超级管理员用户的密码重置令牌(由于另一个糟糕的设计决策,该令牌不会过期且可以重复使用)。
“拥有管理员用户账户访问权限使我们能够方便地读取和操作我们测试的两个Ruby on Rails应用的所有私有数据,”Euler说。
其他被发现易受攻击的流行应用包括CodeOcean、Pageflow、Active Admin和openSUSE Travel Support Program。除Active Admin外,所有这些问题都已在这些项目中得到修复,Active Admin的供应商Tidelift在Positive Security研究发布时显然未回复其电子邮件。然而,Tidelift代表后来回复了我们的关于此缺陷的电子邮件,称Ransack的维护者正在开发一个更新,将更改默认行为,并正在与错误报告者讨论此问题。
其他易受攻击的技术
在之前的工作中,研究人员在使用Hasura(一个GraphQL服务器平台)的应用中发现了类似问题。他们能够通过跨不同对象的多步关联链提取管理员会话令牌。
“库和框架通常会随着时间的推移添加越来越多的功能,这些功能通常默认启用,同时试图保持简单用例的集成和使用对开发人员容易,”Euler说。“因此,开发人员经常无意中集成比预期更多的附加功能和攻击面。”
Euler说,教训是始终研究您使用的库和框架的完整功能范围,并通过禁用任何不需要的功能来采取措施最小化攻击面。
“这不仅限于Ruby on Rails,但由于RoR强调‘约定优于配置’并通过简单API接口提供强大功能,它可能比其他框架更容易出现此类问题,”Euler说。
本文于2月1日更新,添加了Tidelift关于修复影响Ransack和Active Admin的安全问题的评论。