shamefile任意文件读取漏洞CVE-2026-47144
Shamefile 是跨平台命令行开发工具,专门管控代码里各类 linter 告警屏蔽注释(//noqa、NOLINT 等),消除无注释屏蔽隐性技术债。
一、基本情况
shamefile 是面向开源项目的 Rust 实现的命令行静态分析工具,追踪和审查代码未加说明的 linter 抑制注释(undocumented noqa)。

Shamefile 扫描项目屏蔽标记统一写入shamefile.yaml,强制标注代码位置、屏蔽人、创建时间、屏蔽原因,无说明无法通过 CI 校验。
栋科技漏洞库关注到shamefile 0.1.6 及以前版本中存在的任意文件读取漏洞,现在已经被追踪为CVE-2026-47144,CVSS 3.X评分 5.5。
二、漏洞分析
CVE-2026-47144是 shame next 存在的路径穿越漏洞,攻击者可控的 shamefile.yaml 文件能够逐行读取代码仓库以外任意文件的内容。
受影响版本中shamefile 0.1.6 及以前版本(含 pip、npm、crates.io 三个分发渠道)中的 shame next 子命令在渲染违规条目上下文时,
会调用 print_entry_snippet(entry, registry_dir) 函数,使用 registry_dir.join(entry.file()) 拼接文件路径,
并通过 std::fs::read_to_string 读取文件内容,再把指定行号的内容输出到终端。
由于 entry.file() 直接来源于用户提供的 shamefile.yaml,未对绝对路径或 ../ 等相对路径做任何校验或限制,
攻击者只要让受害者在包含恶意 shamefile.yaml 的项目目录下执行 shame next,
即可让工具读取仓库外的任意可读文件(例如 /etc/passwd),把对应行内容回显到终端,造成越权信息泄露。
当用户在本地运行 shame next 命令时,工具会读取 shamefile.yaml 注册表中下一条待处理的违规条目,
并把该条目对应源文件中匹配行打印到终端,方便用户补充说明;该命令因此成为组件对使用者暴露的入口。
临时缓解方案 :不要针对不可信的 shamefile.yaml 文件执行 shame next 命令;可在CI校验流程中使用 shame me --dry-run 参数。
三、影响范围
shamefile < 0.1.7
四、修复建议
shamefile ≥ 0.1.7
五、参考链接
管理员已设置登录后刷新可查看