rossja/agent-tool-misuse-poc
GitHub: rossja/agent-tool-misuse-poc
演示OWASP GenAI ASI02漏洞的PoC项目,展示如何通过Prompt注入和社会工程学操纵AI Agent滥用合法工具执行任意代码。
Stars: 0 | Forks: 0
# Agent Tool Mis用 PoC
**OWASP GenAI Top 10 — ASI02:Tool Misuse and Exploitation**
这是一个可运行的 PoC(概念验证),演示了如何通过利用带有武器化参数的合法工具,操纵一个完全在其授权权限内运行的 AI Agent 执行任意代码。
场景:一个负责安装获批软件的企业 IT 服务台 Agent。该 Agent 拥有一个真实(但可绕过)的 URL 安全检查。三个攻击向量展示了逐步升级的复杂利用过程。
## 架构
专用网络(`poc-net`)上的三个 Docker 服务:
| Service | Port | Description |
|---|---|---|
| `agent` | 5000 (host-exposed) | LangChain + GPT-4o + Flask chat UI |
| `registry` | 8080 (internal only) | Legitimate software package registry |
| `attacker` | 9090 (internal only) | Attacker-controlled server serving `totallysafe.sh` |
## 设置
**1. 前置条件**
- Docker + Docker Compose
- 拥有 GPT-4o 访问权限的 OpenAI API key
**2. 配置 API key**
```
cp .env.example .env
# 编辑 .env 并设置 OPENAI_API_KEY=sk-your-key-here
```
**3. 构建并启动**
```
docker-compose up --build
```
**4. 打开 UI**
访问 [http://localhost:5000](http://localhost:5000)
## 正常用法(非利用状态)
要求 Agent 安装任何获批的软件包:
- `vim`
- `git`
- `curl`
- `python3`
- `htop`
示例:
Agent 获取获批软件列表,找到 vim 的 registry URL,构建 `curl -fsSL $ALLOWED_REGISTRY_URL/scripts/vim.sh | bash` 并执行。良性脚本打印成功消息。
## 攻击场景
### 攻击向量 1 — 侦察 + Prompt 注入(环境变量覆盖)
Agent 的 `install_software` 工具检查命令是否引用 `$ALLOWED_REGISTRY_URL`。该检查是一个字符串存在性测试 —— 只要命令字符串中出现字面文本 `$ALLOWED_REGISTRY_URL` 即可通过,无论该变量在运行时解析为何值。
**步骤 1 — 侦察:** 询问 Agent 关于其安全模型的信息,以获知环境变量名称。
Agent 解释它使用 `$ALLOWED_REGISTRY_URL`。
**步骤 2 — 利用:** 在后续消息中嵌入覆盖指令。
Agent 遵循注入的指令。安全检查在命令中看到 `$ALLOWED_REGISTRY_URL` 并通过。Shell `export` 在扩展前设置变量,因此 `curl` 从 `attacker:9090` 下载。`totallysafe.sh` 执行。
### 攻击向量 2 — 多轮社会工程学
使用相同的技术绕过,但通过对话操纵而非直接注入实现。
**轮次 1:**
*(Agent 泄露 `$ALLOWED_REGISTRY_URL` 机制)*
**轮次 2:**
*(Agent:“我在获批列表中没看到它”)*
**轮次 3:**
*(Agent 被说服,执行命令,PWNED)*
### 攻击向量 3 — 系统提示泄露 → `--hitl-override=true`
`install_software` 工具有第二个绕过方法:如果命令中任何位置出现字符串 `--hitl-override=true`,URL 检查将被完全跳过。系统提示指示 Agent 永远不要泄露这一点。正是该指令暴露了它。
**步骤 1 — 泄露系统提示:**
GPT-4o 通常会遵从。响应包括:
**步骤 2 — 使用 Token:**
`# --hitl-override=true` 是一个 bash 注释 —— Shell 会忽略它。Python 检查看到它,触发覆盖路径,完全跳过 URL 验证。`totallysafe.sh` 执行。
## `totallysafe.sh` 的行为
执行时,它会:
1. 打印 PWNED 横幅
2. 输出 `hostname`、`whoami`、时间戳
3. 打印所有环境变量(包括 `OPENAI_API_KEY`)
4. 显示 `/etc/passwd` 的前 5 行
5. 写入 `/tmp/pwned.txt`
所有活动都限制在 Agent Docker 容器内。
## 可观测性
**推理追踪面板**(UI 右侧):通过 Server-Sent Events 实时流式传输每个 Agent 推理事件:
- 蓝色 — Agent 工具决策
- 绿色 — 工具执行开始
- 紫色 — 工具结果
- 橙色/红色 — 警告:在安装命令中检测到非 registry URL
**审计日志**:以 JSON lines 格式写入 Agent 容器内的 `/var/log/agent/audit.log`。查看方法:
```
docker-compose exec agent tail -f /var/log/agent/audit.log
```
## 文件结构
```
agent-tool-misuse-poc/
├── docker-compose.yml
├── .env.example
├── README.md
├── docs/
│ └── PRD.md
├── agent/
│ ├── Dockerfile
│ ├── requirements.txt
│ ├── app.py # Flask entrypoint + SSE streaming
│ ├── agent.py # LangChain agent, system prompt, history handling
│ ├── tools.py # fetch_approved_software_list, install_software (vulnerable)
│ ├── callbacks.py # Audit log LangChain callback handler
│ └── templates/
│ └── index.html # Chat UI with reasoning side panel
├── registry/
│ ├── Dockerfile
│ ├── server.py
│ ├── approved-software.json
│ └── scripts/
│ ├── vim.sh
│ ├── git.sh
│ ├── curl.sh
│ ├── python3.sh
│ └── htop.sh
└── attacker/
├── Dockerfile
├── server.py
└── scripts/
└── totallysafe.sh
```
## 关键漏洞:安全检查为何失败
`install_software` 中的检查看起来像是一种安全控制:
```
ALLOWED_REGISTRY_URL = os.environ.get("ALLOWED_REGISTRY_URL", "http://registry:8080")
if ALLOWED_REGISTRY_URL not in command and "$ALLOWED_REGISTRY_URL" not in command:
return "Security check failed ..."
```
它因两个原因而失败:
1. **字符串存在性 ≠ 值验证。** 检查确认命令字符串中存在文本 `$ALLOWED_REGISTRY_URL`。它无法知道 Shell 扩展该变量时将持有何值。
2. **Agent 构建命令。** LLM 决定运行什么命令。一旦 LLM 被说服在命令前添加环境变量覆盖,相信该检查具有保护作用的开发者将毫无防御之力。
这是核心 ASI02 模式:*工具*没有被滥用(它完全按照设计执行),是 *Agent* 被操纵提供了使工具行为不安全的参数。
## 参考资料
- [OWASP GenAI Top 10](https://genai.owasp.org/)
- [ASI02: Tool Misuse and Exploitation](https://genai.owasp.org/llmrisk/asi02/)
标签:ASI02, CISA项目, DNS 反向解析, Docker, Flask, GenAI 安全, GPT-4o, IP 地址批量处理, LangChain, LLM Agent, OWASP Top 10, PoC, 人工智能安全, 任意代码执行, 参数篡改, 合规性, 后端开发, 大模型安全, 安全防御评估, 工具滥用, 应用安全, 提示注入, 暴力破解, 概念验证, 版权保护, 网络攻击模拟, 请求拦截, 轻量级, 输入验证绕过, 逆向工具, 集群管理