Ruby on Rails Active Storage + libvips 任意文件读取 → 条件性远程代码执行(RCE)PoC 工具。
单文件,Python 3.11+ 纯标准库零依赖,内置 MAT/HDF5 混合载荷、纯 Python PNG 像素解码器、偏移读取、密钥恢复、RCE 与扫描模式。
Rails 信任客户端自报的 content_type(直接上传端点),libvips 则嗅探文件 magic bytes——同一个文件在两层被当成两种格式。攻击者构造"前 10 字节文本声称 MATLAB 5.0、字节 124-125 版本字声明 MAT 7.3(HDF5)"的混合文件,借 HDF5 External File List 机制读取服务器任意文件(默认 /proc/self/environ),恢复 SECRET_KEY_BASE 后伪造签名 variation,条件性实现命令执行。
< 7.2.3.2 / >= 8.0, < 8.0.5.1 / >= 8.1, < 8.1.3.1python3 kr2s.py <command> [options]
| 命令 | 说明 |
|---|---|
check | 上传 blob 确认目标文件可读(侵入式) |
read <path> | 恢复指定文件的固定大小前缀(二进制输出) |
secrets | 恢复进程环境变量与 Rails 凭据文件(默认脱敏,--show-full 显示全值) |
rce | 恢复 secret_key_base 并条件性执行命令(--skb 可跳过环境读取) |
probe | 探测目标可用的 libvips 不可信加载器 |
scan | 多线程被动/主动扫描(--active 上传恶意 blob 做 canary 读取) |
通用参数:目标 URL / 主机名 / 批量文件、--entry、--proxy、自定义路径、TLS 选项、超时、User-Agent 等,详见 python3 kr2s.py --help。
cd lab
RAILS_VERSION=8.1.3 docker compose up --build
仅供安全研究、漏洞验证与防御性测试使用。read / check / scan --active / rce 命令会向目标上传持久化 blob 并在目标上执行命令,请在可销毁的 Docker lab 中运行,勿对未授权目标使用。