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, 人工智能安全, 任意代码执行, 参数篡改, 合规性, 后端开发, 大模型安全, 安全防御评估, 工具滥用, 应用安全, 提示注入, 暴力破解, 概念验证, 版权保护, 网络攻击模拟, 请求拦截, 轻量级, 输入验证绕过, 逆向工具, 集群管理