用途
llm-top-10 用于对 LLM 驱动的应用进行安全审查,审查依据为 OWASP Top 10 for Large Language Model Applications(2025 版)。它面向代码与架构层面的安全检查,帮助识别 LLM 应用特有的风险模式,并给出检测方法与缓解建议。
触发场景包括:新增或修改 LLM API 集成代码(如 OpenAI、Anthropic、Google Gemini、Azure OpenAI、Cohere、Mistral 及本地模型端点);审查 RAG(检索增强生成)流程(嵌入生成、向量库查询、上下文组装、文档摄取);构建聊天机器人或对话式 AI(含系统提示词配置、会话管理、工具/函数调用);AI 功能的 PR 引入提示词模板、补全解析、智能体编排或模型输出渲染;涉及模型服务(vLLM、TGI、Ollama)、微调流程、训练数据管理或嵌入数据库(Pinecone、Weaviate、Chroma、pgvector)的基础设施变更;包含 LLM 组件的安全架构评审或威胁建模。若目标通过参数提供,审查会聚焦于该目标。不含 LLM 或生成式 AI 组件的传统 Web 应用审查不适用本技能。
审查前需收集的上下文
技能在开始审查前要求收集:LLM 供应商与模型标识(通过哪个 SDK 或 API 调用哪些模型);系统提示词与提示词模板;输入流(用户输入如何到达模型);输出流(模型输出如何渲染、解析或被使用);工具/函数调用配置及其权限与确认环节;RAG 流程架构(文档摄取、分块策略、嵌入模型、向量库、检索查询构建、上下文窗口组装);认证与授权上下文(用户身份如何贯穿 LLM 流程,模型是否继承用户权限或使用提升的权限);限流与配额配置;数据分级(流入或流出模型的数据敏感级别,如 PII、PHI、财务信息、凭据);部署拓扑(自托管还是第三方 API、数据驻留、网络边界)。
覆盖的风险类别
LLM01:2025 提示词注入:攻击者构造输入覆盖系统提示词或注入模型会执行的指令,包括直接注入与间接注入(来自检索文档、邮件、网页的恶意内容)。检查点包括:未经净化的字符串拼接或 f-string 插值、RAG 注入检索内容时缺少边界标记、仅依赖指令文本作为安全边界、模型可凭自然语言推理调用特权操作、指令通道与数据通道未分离。检测方法包括搜索提示词构建模式、审查 RAG 检索流程的净化与转义、检查输出驱动动作是否有独立于 LLM 的二次校验。缓解措施:使用模型 API 原生角色消息结构严格分离指令与数据;对用户输入做校验与净化;用分隔符标记检索上下文;对模型请求的动作实施确定性代码的二级校验;对工具与函数应用最小权限;高风险应用部署提示词防火墙或分类器。CWE 映射:CWE-77、CWE-74。
LLM02:2025 敏感信息泄露:模型在响应中泄露机密数据,包括训练记忆、系统提示词泄露、上下文中的 PII 或内部系统细节。检查点:系统提示词中硬编码 API 密钥、凭据、内部 URL;RAG 检索未按用户授权级别过滤;日志记录完整提示词/响应且含 PII;缺少输出过滤;微调数据集未净化。检测方法:搜索系统提示词文件中的硬编码密钥与内部主机名;审查 RAG 检索是否按请求用户权限过滤;查找记录完整消息数组的日志语句;检查返回前是否做输出过滤或脱敏。缓解措施:系统提示词中绝不嵌入密钥,改用环境变量或密钥管理服务;在 RAG 中实施文档级与分块级访问控制;使用正则或 NER 类 PII 检测器(如 Microsoft Presidio)过滤输出;净化训练与微调数据集;最小化完整提示词日志并脱敏。CWE 映射:CWE-200、CWE-532。
LLM03:2025 供应链风险:来自第三方组件的风险,如被污染的预训练模型、投毒训练数据、存在漏洞的第三方库(LangChain、LlamaIndex、向量数据库)、恶意模型市场制品。检查点:从公共模型 Hub 下载未做完整性校验;使用 pickle 序列化模型文件(反序列化可执行任意代码);LLM 框架库版本过期且存在已知 CVE;未经审查引入第三方插件与社区集成;训练数据来源缺乏溯源验证。检测方法:检查依赖文件中 LLM 相关库版本与漏洞库对比;搜索 pickle.load、未加 weights_only=True 的 torch.load 等不安全反序列化;检查模型下载是否做校验和与签名验证;识别第三方 LangChain 工具与插件来源。缓解措施:固定依赖版本并运行自动漏洞扫描(Dependabot、Snyk、pip-audit);使用 safetensors 替代 pickle 格式,必要时强制 weights_only=True;加载前校验模型完整性;维护经审查的插件允许列表;审计训练数据来源;应用 SBOM 实践。CWE 映射:CWE-502、CWE-829。
LLM04:2025 数据与模型投毒:操纵训练、微调或嵌入数据,向模型引入后门、偏见或定向异常行为,包括对 RAG 知识库的投毒。检查点:微调流程摄取用户生成或未审查的第三方数据;RAG 摄取端点接受未认证或低信任用户上传;知识库进入文档缺少内容审核或异常检测;用户反馈直接调整模型行为;嵌入存储缺少写访问控制。检测方法:审查文档摄取路径的认证与授权检查;检查摄取文档的内容校验(格式、长度、异常检测、人工审核);检查微调数据溯源与质量检查;搜索直接影响模型行为的反馈闭环。缓解措施:对 RAG 文档摄取实施严格访问控制与审计日志;校验与净化进入微调流程的数据并追踪来源;对摄取内容做异常检测;高风险应用引入人工审核工作流;检索路径使用只读访问;对知识库做版本控制以支持回滚。CWE 映射:CWE-1321、CWE-20。
LLM05:2025 输出处理不当:在将 LLM 输出传递给下游系统或渲染给用户前未做校验、净化或编码。模型输出属于不可信数据,可能含 XSS 载荷、SQL 注入字符串、Shell 命令或客户端执行的 markdown/HTML。检查点:前端将模型输出作为原始 HTML 渲染(innerHTML、dangerouslySetInnerHTML、v-html、Blade 的 {!! !!});输出被插值进 SQL、Shell 命令或后续执行的代码;输出传给 eval()、exec()、subprocess、os.system() 等动态执行函数;Markdown 渲染未净化内嵌 HTML 或 JavaScript;输出用于构造 URL、文件路径或 API 调用且未校验。检测方法:搜索危险渲染模式;搜索模型输出变量流向 eval()、exec()、subprocess.run()、os.system()、数据库查询构造或 ORM 原始查询;追踪从响应对象到最终用途的数据流;检查 Markdown 渲染库的 XSS 净化配置。缓解措施:把 LLM 输出当作不可信用户输入,做与用户生成内容相同的输出编码与净化;按上下文编码(HTML 编码、参数化查询、命令允许列表);绝不把输出传给 eval()、exec() 或动态执行函数;配置 Markdown 渲染器剥离或净化 HTML 与 JavaScript(如 DOMPurify);实施输出格式允许列表;部署 CSP 头作为纵深防御。CWE 映射:CWE-79、CWE-94、CWE-116。
LLM06:2025 过度授权:模型被授予超出必要范围的能力(工具、函数、插件、系统访问),或被允许在缺少人工监督与确认环节情况下自主执行有后果的操作。检查点:工具定义授予模型对数据库、文件系统或外部 API 的写访问且无确认步骤;智能体框架允许模型自主串联多次工具调用;工具权限过宽(如允许任意 SQL 执行);破坏性或不可逆操作缺少人工确认;模型使用应用服务账号凭据而非终端用户的受限权限。检测方法:枚举模型可调用的所有工具、函数与插件并记录其权限与影响范围;检查是否存在确认环节;审查工具权限是否符合最小权限;搜索自主执行循环。缓解措施:对每个工具应用最小权限;对状态变更、破坏性或高影响操作实施强制人工确认;限制每会话或每请求的工具调用次数;使用终端用户权限而非应用服务账号。