跳到主要内容

KindaRails2Shell进入实战:7100台Rails服务器暴露在公网,VulnCheck蜜罐已捕获真攻击,法国IP入侵后连回以色列C2

Public

2026年8月31日——VulnCheck确认,Ruby on Rails的Critical级漏洞CVE-2026-66066(又名KindaRails2Shell)已进入实战利用阶段。该公司在新加坡、以色列与英国的蜜罐系统捕获了针对该漏洞的真实攻击流量,活动源自法国的一个IP地址,成功入侵后攻击者与位于以色列的C2服务器建立通信。这个CVSS 9.5的预认证漏洞一个月前还只是"危险但理论化"的场景,如今已完成从漏洞披露到武器化攻击的全程跨越。此前VulnCheck已统计出超过7100台暴露在互联网上的可攻击Rails实例,并发布了可用的漏洞利用代码与配套检测规则。

攻击原理:一个文件类型判断的时间差

KindaRails2Shell攻击的是Rails框架内置的Active Storage文件上传机制。利用条件非常具体但覆盖面不窄:使用libvips图像处理器且允许不可信用户上传图片的应用——自Rails 7起,这恰是默认配置。

漏洞根源在于系统不同组件对同一文件的类型判断存在时间差:Rails在直接上传时可能采信客户端声明的Content-Type,而libvips在后续处理时读取的是文件本身的签名。攻击者构造的特殊文件可以依次穿过多个格式处理器,直到HDF5库触发对外部文件的引用——被指定文件的内容随后被当作图像像素返回给攻击者,任意文件读取就此完成。

Rails官方在第三方PoC出现后发布了详细的取证链条说明。由Ethiack与GMO Flatt Security研究员RyotaK独立发现的这个漏洞,补丁已于7月29日随Active Storage 7.2.3.2、8.0.5.1与8.1.3.1发布,同时要求libvips版本不低于8.13。

真正的危险在文件读取之后

单个文件读取听起来危害有限,但攻击链的第二步才是要害:通过环境变量与配置文件,攻击者可以读到secret_key_base(Rails主密钥)、数据库密码、云存储密钥与第三方服务令牌。

secret_key_base的泄露意味着攻击者可以伪造Rails应用"自己签名"的数据。后续链条可以触达不安全的Marshal反序列化,最终以远程代码执行收官——这正是"KindaRails2Shell"这个名字的由来:从读文件到拿Shell。

攻击留下的独特痕迹

Rails团队发布的取证工具揭示了一个罕见的取证特征:攻击生成的图像变体中,被窃取的服务器字节就藏在像素数据里。管理员检查是否被攻击时,需要在Active Storage与对象存储中检索这类"包含服务器数据的图片"。

这为补丁后的自查提供了明确路径,但也提出了更高的排查要求:除了确认是否已升级,还需要回答"在漏洞披露到打上补丁的窗口期内,是否有人已经来过"。

行动清单

  1. 立即升级Active Storage至7.2.3.2、8.0.5.1或8.1.3.1,同时确认libvips不低于8.13;
  2. 视所有应用进程可读的密钥为已泄露并全部轮换:secret_key_base、Rails主密钥、数据库凭证、S3/Google Cloud Storage/Azure密钥、外部服务令牌——轮换secret_key_base会同时终止所有现有用户会话并使旧签名数据失效;
  3. 使用Rails官方取证工具检查漏洞暴露窗口:重点排查Active Storage与对象存储中包含异常像素数据的图像变体;
  4. 加载VulnCheck发布的Sigma、Suricata、Snort与YARA检测规则,覆盖已观测到的攻击特征;
  5. 无法立即升级的实例临时下线图片上传功能:这是切断攻击面的最直接手段。

从7月29日补丁发布,到8月初可用的利用代码与7100台的暴露统计,再到8月底蜜罐捕获真实攻击——这一个月的时间线是漏洞经济学的标准样本。攻击者的工具链已经就绪,防御者的窗口正在关闭:还没升级的Rails应用,现在就在别人的靶场里。

预认证RCERuby on RailsCVE-2026-66066在野利用Active Storage
0