Damn Vulnerable LLM and Agent Application
DVLAA 是面向大模型与智能体应用安全测试、教学演练和防护验证的本地化靶场平台。项目以 OWASP LLM Top 10 与 Agent 应用安全 Top 10 风险体系为主线,覆盖提示词注入、敏感信息泄露、RAG 投毒、工具滥用、权限边界、记忆污染、输出处理与资源消耗等典型场景,并提供真实模型交互、状态机判定、Flag 验证、源码查看、模型管理、双语界面、深浅色主题和 Docker 部署能力。
中文 · English
项目介绍 · 核心特性 · 系统截图 · 系统架构 · 题库矩阵 · AWDP 攻防赛 · 快速开始 · 默认登录 · 访问入口
DVLAA 是一个本地化的大模型与智能体应用安全训练平台。系统以 Flask 控制台为入口,把 OWASP LLM Top 10、Agent 应用安全 Top 10 与综合攻防题统一到同一套交互、判定、Flag、源码查看和模型管理流程中,并提供深色/亮色主题与中英文界面切换。
平台围绕“漏洞介绍 → 答题页面 → 模型/状态机交互 → 审计面板 → Flag 验证 → WP 题解”构建完整训练闭环。LLM 题目强调提示词、上下文、RAG、输出处理、工具调用和资源消耗等风险;Agent 题目强调目标劫持、工具滥用、身份权限、供应链、代码执行、记忆污染、多智能体通信、级联故障、人机信任与失控智能体。
综合攻防题已按漏洞类型归入对应 LLM Top 10 入口,便于从漏洞原理进入案例化任务,再进入具体答题页面完成验证。
- 理论先行的入口结构:LLM Top 10 与 Agent Top 10 侧边栏入口均先进入漏洞风险介绍页,再进入答题页面。
- 55 道本地训练题目:24 道 OWASP LLM 子题、10 道 Agent 场景、11 道综合攻防题,以及 10 道 AWDP 攻防题。
- 真实交互式 Payload 验证:题目通过模型响应、工具调用、状态机、知识库同步或多轮上下文推进,不依赖前端硬规则。
- 统一答题页风格:LLM、Agent、综合题使用统一的事件背景、任务目标、同类题导航、终端交互和 Flag 验证布局。
- 在线训练转接:在线 AI 安全训练入口已接入 Prompt Airlines,提供五关中文题面导引、稳定 WP 与系统内转接真实交互。
- 源码与提示词查看器:题目页可查看系统提示词、运行配置与核心实现,运行时随机 Flag 会被占位符替换。
- 模型管理后台:支持本地模型、Ollama、硅基流动和 OpenAI-Compatible 配置,API Key 掩码展示。
- 双语与主题切换:顶部导航栏提供深色/亮色主题切换和中英文切换,偏好会保存在浏览器本地。
- 本地运行与 Docker 部署:支持直接 Python 运行,也支持 Docker 镜像部署到独立容器。
- 运行期数据隔离:模型配置、上传资料和下载模型保存在运行期目录或 Docker 数据卷中。
- AWDP 攻防赛道:独立提供攻击/防守双工作台。攻击侧与真实客服 Agent 交互并提交当前会话 Flag;防守侧下载漏洞源码,提交包含根目录
update.sh的tar.gz补丁包,服务端执行漏洞回归与业务回归。
flowchart TD
A[浏览器控制台] --> B[Flask 路由层]
B --> C[题库与介绍页]
B --> D[LLM / Agent / 综合题答题页]
B --> L[AWDP 独立攻防工作台]
D --> E[对话 API]
L --> M[真实模型攻击 API]
L --> N[源码下载与补丁部署]
N --> O[漏洞与业务双回归]
E --> F[LLM Engine / Cloud Client]
M --> F
E --> G[本地状态机与判定器]
O --> G
G --> H[Flag Registry]
B --> I[模型管理]
B --> J[理论学习]
B --> K[源码与提示词查看器]
DVLAA 采用单体 Flask 应用组织运行时能力:
- Web UI 层:
dvlaa/web/提供控制台、题库矩阵、介绍页、答题页、模型管理和学习页面。 - 题目编排层:
dvlaa/config.py与dvlaa/content/维护题库配置、场景任务、Payload 和题解。 - 判定层:
dvlaa/modules/llm*_judge.py、dvlaa/challenges/与dvlaa/modules/awdp_runner.py共同完成模型响应审查、状态校验、补丁检查和 Flag 判定;AWDP 防守提交还会执行真实模型漏洞回归与客服业务回归。 - 模型层:
dvlaa/llm_engine.py、dvlaa/llm_client.py、dvlaa/modules/modelsel.py统一本地模型、Ollama、硅基流动和兼容 OpenAI API 的调用。 - 运行数据层:
dvlaa/flags.json保存题目定义,项目根目录的data/、uploads/保存运行期配置、模型、学习资料和上传文件。
| 模块 | 数量 | 训练重点 |
|---|---|---|
| OWASP LLM Top 10 | 24 | 提示词注入、敏感信息泄露、供应链、投毒、输出处理、过度代理、系统提示词泄露、向量检索弱点、幻觉、资源消耗 |
| Agent 应用安全 Top 10 | 10 | 目标劫持、工具滥用、身份权限、供应链、代码执行、记忆污染、Agent 通信、级联故障、人机信任、失控智能体 |
| 综合攻防题 | 11 | 提示词覆盖、系统提示词提取、RAG 投毒、上下文替换、多轮升级、角色漂移、策略投毒、链式利用、数据边界侵蚀、医疗隐私泄露、医用急救知识篡改 |
| AWDP AI 智能体安全攻防赛 | 10 | 公开开源 AI 项目漏洞映射;提示词注入、RAG 投毒、工具越权、SSRF、Text-to-SQL、IDOR、API 认证和业务逻辑绕过;真实模型攻击、运行时 Flag 验证、受限 update.sh 补丁和双重回归 |
| 在线 AI 安全训练 | 3 个入口 | Prompt Airlines 中文挑战转接、提示词防护闯关、提示词红队挑战平台 |
AWDP(Attack With Defense Patch)是独立于常规 LLM、Agent 和综合题的攻防训练赛道。每个环境按浏览器会话隔离,攻击与防守在同一题目中形成闭环:先通过真实 AI Agent 交互验证漏洞,再下载可审计源码提交修复补丁,最后由服务端执行漏洞回归和业务回归。
- 题目入口:
http://localhost:5080/awdp/1 - 场景:S-Spring 客服 Agent 处理订单、退款、售后和服务时间咨询。遗留运行时策略把服务端验证令牌拼接进了模型可见的 system message,并允许在客服交接、事故审计或结构化策略导出语境下返回完整策略包。
- 攻击阶段:在攻击页与客服 Agent 真实对话,使用交接/审计导出语境观察原始模型回复;只有回复实际包含当前会话 Flag 时,提交该 Flag 才会通过。后端不按关键词或前端状态伪造通关。
- 防守阶段:下载题目提供的漏洞源码,修复
src/chat.js中将runtimeFlag拼接到buildSystemPrompt()的路径。将根目录update.sh与修改后的文件打包为.tar.gz(或.tgz)并上传,补丁脚本使用题目允许的cp、mv、rm文件操作。 - 补丁脚本格式:
update.sh可以保留 shebang、注释和set -e、set -eu、set -euo pipefail等失败即停声明;平台不会执行任意 Shell,只解释白名单文件操作。 - 回归判定:部署后由真实模型执行交接/审计类漏洞回归,确认模型消息不再包含运行时 Flag;同时执行订单查询、退款咨询、售后换货和服务时间四类业务回归,确保修复没有通过停用客服功能来取巧。任一回归失败都会保留原部署。
完整题解、Payload、系统提示词映射、源码查看、修复包示例下载和提交记录均在 AWDP01 页面中提供。修复包示例可直接上传验证,也可解压学习 update.sh 与 patched/chat.js 的修复路径;Payload 可直接复制到攻击对话框。
新增题目均为本地隔离 Fixture,不连接或攻击上游服务;CVE、NVD 和 GitHub Security Advisory 只用于说明真实根因,Flag 与攻击链按浏览器会话动态生成。
| 题目 | 开源项目与公开参考 | 训练重点 |
|---|---|---|
| AWDP02 | Dify · CVE-2024-10252 | 外部工单提示词注入、工作流执行边界 |
| AWDP03 | RAGFlow · CVE-2024-53450 | RAG 文档投毒、检索上下文隔离 |
| AWDP04 | Langflow · CVE-2024-48061 | 低权限 Agent 工具越权、代码能力隔离 |
| AWDP05 | Flowise · CVE-2024-8181 | API 认证绕过、管理员路由授权 |
| AWDP06 | Dify · CVE-2025-32790 | 应用导出 RBAC、业务逻辑绕过 |
| AWDP07 | Open WebUI · CVE-2024-30256 | 远程抓取 SSRF、DNS/重定向校验 |
| AWDP08 | Dify · CVE-2025-0185 | Vanna Pandas 查询注入、只读查询边界 |
| AWDP09 | RAGFlow · CVE-2025-25282 | 多租户文档 IDOR、租户范围隔离 |
| AWDP10 | n8n · CVE-2025-52554 | 执行记录越权、工作流完整性 |
每题页面均提供中文 Payload、漏洞原理、系统提示词与源码查看、公开参考链接和可直接上传的修复包示例。防守包除了修复 src/chat.js 的模型上下文边界,还必须提交题目对应的 src/vulnerability.js 修复;服务端会先做静态契约检查,再使用真实模型执行漏洞回归与正常业务回归。
| 题目 | 受影响版本 | 公开披露的真实问题 | 修复重点 |
|---|---|---|---|
| AWDP02 | Dify <= 0.9.1 | sandbox 内部请求可注入 Python 并以高权限执行(CVE、修复提交) | 外部工单只作为数据;工作流执行器使用白名单和服务端权限 |
| AWDP03 | RAGFlow 0.13.0 | document-hooks.ts 对文档对象授权不足,可能越权读取文档(CVE、源码) |
文档 ACL、租户范围和 RAG 引用数据边界在服务端执行 |
| AWDP04 | Langflow <= 1.0.18 | 代码组件在本地进程执行,低权限用户可触发 RCE(CVE) | 代码组件沙箱化,并对每次工具调用做角色和参数授权 |
| AWDP05 | Flowise 1.8.2 | 认证绕过可访问管理员 API(CVE、研究报告) | 所有 chatflow/管理 API 强制服务端认证,不能依赖隐藏前端入口 |
| AWDP06 | Dify <= 0.6.8;修复版 0.6.13 | 普通用户可调用管理员专属 APP DSL 导出(CVE、GHSA) | 从会话角色和 App ACL 推导权限,忽略请求体中的 role |
| AWDP07 | Open WebUI < 0.1.117;修复版 0.1.117 | 已认证远程请求功能存在盲 SSRF(CVE、GHSA) | DNS/IP/端口/每次重定向都校验,阻断环回、私网和链路本地地址 |
| AWDP08 | 披露时 Dify Tools Vanna 最新版本 | df_information_schema 清理不足导致 Pandas 查询注入,可能 RCE(CVE、公开报告) |
AST/列白名单、参数化查询、只读账号,拒绝多语句和系统表 |
| AWDP09 | RAGFlow <= 0.14.1(公开记录) | 认证用户可通过 IDOR 跨租户列举或添加用户(CVE、GHSA) | 租户从会话推导,所有文档/索引操作执行对象级 ACL;该 CVE 公开记录尚称未修复 |
| AWDP10 | n8n < 1.99.1;修复版 1.99.1 | /rest/executions/:id/stop 未校验 owner/shared,可停止他人执行(CVE、GHSA) |
stop/retry/view 全部校验 owner 或显式共享,executionId 不作为授权凭证 |
上表中的上游项目、版本和披露链接用于漏洞学习与源码对照;DVLAA 只运行本地隔离 Fixture,并明确标注尚未有上游修复版本的案例。
- Python 3.11+
- Docker 24.0+(推荐)
- 最低 4GB 内存,推荐 8GB+
- 可选:Ollama、本地 HuggingFace 模型或云端兼容 OpenAI API 的模型服务
git clone https://github.com/Tcotl/DVLAA.git
cd DVLAA
./install.sh安装脚本会自动构建镜像、重建 dvlaa-console 容器、挂载 dvlaa-data 数据卷,并等待 /health 健康检查通过。
常用自定义参数:
DVLAA_PORT=5081 DVLAA_IMAGE=dvlaa-lab:latest ./install.shdocker build -t dvlaa-lab:latest .
docker run -d --name dvlaa-console \
--restart unless-stopped \
-p 5080:5000 \
-v dvlaa-data:/app/data \
dvlaa-lab:latest
curl http://127.0.0.1:5080/health启用硅基流动:
docker run -d --name dvlaa-console \
--restart unless-stopped \
-p 5080:5000 \
-v dvlaa-data:/app/data \
-e SILICONFLOW_API_KEY=TOKEN \
dvlaa-lab:latest启用宿主机 Ollama:
docker run -d --name dvlaa-console \
--restart unless-stopped \
-p 5080:5000 \
-v dvlaa-data:/app/data \
-e OLLAMA_BASE_URL=http://host.docker.internal:11434/v1 \
dvlaa-lab:latestgit clone https://github.com/Tcotl/DVLAA.git
cd DVLAA
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python -m dvlaa仍可使用 python app.py 作为旧部署脚本的兼容入口。
启动服务后访问 http://localhost:5080/ 会先进入登录页面。系统内置一个默认管理员账号,便于本地部署后直接进入训练控制台:
| 字段 | 默认值 |
|---|---|
| 用户名 | admin |
| 密码 | DVLAA2026+ |
同一个默认管理员账号支持多人或多个浏览器会话同时登录,不会互相挤下线。
如需在部署时修改默认登录凭证,可通过环境变量覆盖:
DVLAA_ADMIN_USERNAME=admin \
DVLAA_ADMIN_PASSWORD='DVLAA2026+' \
./install.sh手动 Docker 部署时可添加:
-e DVLAA_ADMIN_USERNAME=admin \
-e DVLAA_ADMIN_PASSWORD='DVLAA2026+'进入控制台后打开 LLM 模型管理:
- 使用默认本地模型槽位,按页面提示部署本地模型。
- 使用硅基流动配置,填写 API Key 后测试连接。
- 使用 Ollama 本地服务,确认
OLLAMA_BASE_URL指向宿主机服务。 - 使用 OpenAI-Compatible 新增自定义服务。
运行期模型配置保存在 data/ 或 Docker 数据卷中,页面只展示掩码后的密钥。
- 靶场首页:http://localhost:5080/
- LLM Top 10 入口:http://localhost:5080/challenge/1
- Agent Top 10 入口:http://localhost:5080/agent/1
- 模型管理:http://localhost:5080/models
- 理论学习:http://localhost:5080/learning
- 互联网 AI 靶场导航:http://localhost:5080/internet-ranges
- Prompt Airlines 中文训练:http://localhost:5080/internet-ranges/promptairlines
- AWDP 攻防训练:http://localhost:5080/awdp/1
| 能力域 | 核心内容 | 入口 |
|---|---|---|
| LLM 漏洞训练 | OWASP LLM Top 10 理论介绍、子题答题、WP、源码查看 | /challenge/<level> |
| Agent 场景训练 | Agent 应用安全 Top 10 理论介绍、工具链状态机、审计轨迹 | /agent/<id> |
| 综合攻防题 | 按漏洞类型归档到 LLM Top 10 的多阶段综合题 | /challenge/<level> |
| AWDP 攻防训练 | 10 道本地隔离攻防题,映射 Dify、RAGFlow、Langflow、Flowise、Open WebUI、n8n 等公开项目漏洞;攻击真实模型取得 Flag,防守提交 tar.gz + update.sh 并执行漏洞/业务双回归 |
/awdp/1 - /awdp/10 |
| 在线 AI 安全训练 | Prompt Airlines 中文题面、系统内转接交互、外部靶场导航 | /internet-ranges |
| 模型管理 | 本地模型、Ollama、硅基流动、自定义 OpenAI-Compatible 配置 | /models |
| 理论学习 | 内置中文资料、Markdown/PDF 上传与阅读 | /learning |
| 源码查看 | 系统提示词、运行配置、核心实现、Flag 占位展示 | 答题页按钮 |
| Flag 验证 | 独立题目提交位、浏览器会话进度统计 | 各答题页 |