「AI渗透测试Agent拆解」six2dez/burp-ai-agent实测:MCP越权漏洞+59个MCP工具+隐私脱敏
原创
句芒安全实验室
句芒安全实验室
句芒安全实验室
2026年10月17日 17:34
上海
去阅读
把 AI 接进渗透测试工具,今天已经是常规操作。麻烦在于:当这个 AI 能自己调工具、读流量、写文件,你的渗透工具本身就不再只是工具,它自己成了一条新攻击链的起点。这期拆的 six2dez/burp-ai-agent 正好是个好标本:一个把大模型接进 Burp Suite 的扩展,同时在 2026 年 8 月和 10 月两次公开了自己的安全公告,其中一条是 critical 的 MCP 访问控制失效。
它是什么
仓库自己的定位一句话:Burp Suite 和现代 AI 之间的桥。发布名叫 Custom AI Agent(原 Burp AI Agent,为符合 BApp Store 命名要求改名,避免跟 Burp 内置的 Burp AI 混淆)。
它不是一个\"AI 聊天框\",而是三种能力叠在一起:
- 分析:右键任意请求交给 AI 分析;被动和主动 AI 扫描器覆盖 62 类漏洞(注入、认证、密码学等),被动扫描器以 Burp 的
PassiveScanCheck形式跑,需要 Burp Pro。 - 驱动:内置 MCP 服务器,full 版最多 59 个 MCP 工具,让 Claude Desktop 或任意 MCP 客户端驱动 Burp;官方同时提供 scoped MCP access,把每个 MCP 工具限制在 in-scope 主机上,免得外部 AI 客户端借 Burp 打到范围外目标。
- 当扫描器:
burp-scan技能让终端的 AI 编码助手(Claude Code、Gemini CLI、Codex 等)当推理引擎,Burp 只提供 MCP 工具。技能里带 200+ payload,覆盖 62 类漏洞,工作流是 scope → 被动 → 主动 → OOB → 报告。
后端一共 12 个:Burp 内置 AI、Anthropic、Ollama、LM Studio、NVIDIA NIM、Perplexity、任意 OpenAI 兼容端点,加上 Gemini CLI、Claude CLI、Codex CLI、OpenCode CLI、Copilot CLI 五种云 CLI。本地模型、云模型、终端 CLI 都能接。
硬数据(截至 2026-10-17)
1544 star、229 fork、6 个未关 issue、17 watch;Kotlin 写的,仓库约 10MB;2026-01-27 建仓,2026-10-14 还在推送;MIT;最新 release v1.0.1(2026-10-09),上一版 v1.0.0(2026-08-22)。
它没上 BApp Store,提交 issue(PortSwigger/extension-portal#231)从 2026 年 1 月挂到现在。安装方式是从 Releases 下 JAR 自己加载:full 版 59 个 MCP 工具,商店版只有 8 个扩展原生 AI 工具。
亮点一:MCP 工具面,它按三件事收
第一件是范围。MCP 工具默认能打到任何地方,这个扩展让你把每个工具限制在 in-scope 主机上。
第二件是确认。模型输出里解析出来的工具调用不会直接执行:只读且输出有界的工具静默跑,其他一律先弹审批卡片;目录里不认识的工具名解析结果不是\"自动\",而是\"每次确认\";带 ext: 命名空间的外部工具永远每次确认。拒绝时返回的是一句中性的\"未授权,不要重试\",而不是错误。这个分级跟 Unsafe Mode 是两件事:Unsafe Mode 决定一个工具能不能跑,分级决定模型能不能不问就跑。
第三件是输入方向。外部 MCP 服务器的输出在进入 AI 上下文之前会被包上信任边界标记,避免不可信服务器的响应直接当指令用。
亮点二:一次\"自己审自己\"的披露,值得逐条读
2026-08-05,作者请外部评审实跑 0.9.2 的代码,确认了两个可利用缺陷;2026-10-08 又对 1.0.0 做了一轮完整评审。结果都写进 SECURITY.md,而且明说没有任何 CVE 和 GHSA 编号——不用去搜编号,因为不存在。
- SEC-04(critical,影响 0.9.0 / 0.9.1 / 0.9.2):访问控制拦截器注册在 Ktor
routing块之后,而同一阶段拦截器按注册顺序执行,于是路由一旦匹配上,请求先被 handler 处理掉了。后果是开了外部 MCP 访问后,不带Authorization头的POST /message和未认证的 SSE 连接都能进到 MCP handler。作者给的复现很实:外部模式下无认证POST /message返回的是 handler 自己的 400sessionId query parameter is not provided,而不是 401;只有没匹配上路由的路径才返回 401。本地模式下,Origin、Host、User-Agent检查与X-Frame-Options、X-Content-Type-Options、Referrer-Policy、CSP 响应头对已匹配路由全部失效。前置条件也写清了:MCP 默认只绑127.0.0.1,未认证监听要你主动开外部访问;但本地模式那个缺口不需要任何 opt-in。 - PRIV-05(high,影响 0.9.x):被动扫描器把 cookie 单独拼成一段
name=value塞进请求,丢掉了脱敏规则依赖的Cookie:前缀;敏感键匹配又是固定列表精确匹配,于是JSESSIONID、PHPSESSID、connect.sid、auth_token、csrftoken、remember_me在 STRICT 和 BALANCED 两档下都原样发给了 AI 后端,只有名字literally叫session的 cookie 被拦住。 - ADV-101-1(high):打开审计日志后,
audit.jsonl和bundles/里记了 MCP token、X-Custom-Auth这类自定义头、完整请求、抓到的上下文、响应分片和 provider 报错文本,跟文档写的\"只记哈希\"相反;macOS 和 Linux 上还是默认 umask,同机其他本地账号可读。 - ADV-101-4(medium):发往 HTTP 后端的请求体丢掉了每个字符的高字节,
Ģ变成\"、Ž变成},于是被扫页面或代理历史里的内容可以闭掉 JSON 字符串、加成员,比如插一条 system 角色的消息或换掉model。作者补了一句关键澄清:脱敏没有被绕过,因为脱敏跑在序列化之前。同一个缺陷还让所有非 ASCII 请求被破坏(#84、#85、#86、#88)。 - ADV-101-5(medium):AI 回复或工具输出里的 markdown 链接,无论什么 scheme 都能点、点了立刻打开且不显示地址。Windows 上
file:链接会让系统去连远端主机的 SMB,把当前 Windows 账号的 NTLM 凭证带出去。 - 另外两条:主动扫描器的 IDOR/BOLA 测试在任意风险等级下都会把
DELETE、PUT、PATCH、POST这类改状态的请求重放给相邻对象 ID,403 绕过测试也会把请求改成 POST/PUT;现在只有 DANGEROUS 档才做。捆绑的 Netty 4.1.119.Final 和 Jackson 2.22.1 带已公布公告,1.0.1 升到 4.1.138.Final 和 2.22.3。
亮点三:隐私和密钥的边界,写得很诚实
三档隐私模式:STRICT 用真 HKDF(HMAC-SHA256 extract/expand)匿名化主机名,BALANCED 脱敏 cookie、token 和认证头,OFF 原样发。审计日志默认\"哈希优先\":每条记录带一个 SHA-256,请求、上下文、响应默认只记哈希和长度,只有打开 Verbose audit 才记正文,凭证永不写入;每条记录还盖 promptSource 和 contextKind,方便复现。
密钥存储那段值得直接抄下来:所有 API key 和 token 用 AES-256-GCM 加密,主密钥每次安装随机生成,而主密钥本身以 Base64 存在 Burp Preferences 里、就放在它保护的密文旁边(preference secret.master.key.v1)。翻译过来:这层加密只挡\"随手翻一眼偏好文件或导出工程\",挡不住任何能读这些偏好的本地进程或攻击者——能读偏好,就等于能读密钥。作者自己写了\"把偏好文件访问等同于凭证访问\"。
上手
构建要 Java 21:./gradlew clean fullJar 出 full 版(59 个 MCP 工具),./gradlew clean bappJar 出商店版(8 个工具)。加载在 Extensions > Installed > Add,类型选 Java。注意两个 build 注册名都是 Custom AI Agent,别同时装:会出现两个标签页、两个 MCP 服务器抢同一个端口、两份进程写同一个 ~/.burp-ai-agent 目录。
装完在 AI Agent 标签页的 Settings 选后端;本地 Ollama 或 LM Studio 最省事,云 CLI 型要先装好对应命令并登录。MCP 接入是把 Settings > MCP Server 打开,再在 Claude Desktop 配置里加 supergateway 指向 http://127.0.0.1:9876/sse;开了外部访问时每个请求都要带 Bearer。想用终端助手当扫描器,就把 skills/burp-scan 拷进助手的技能目录,然后在对话里让它连 localhost:9876 扫代理历史。
避坑
- 0.9.x 全部带着 SEC-04、PRIV-05 未修,1.0.0 也带着 1.0.1 修掉的那批,唯一解法是升到 1.0.1,没有 backport。如果你在 0.9.x 或 1.0.0 上开过外部 MCP 访问,把那个监听当成\"整个可达期都接受过未认证工具调用\",并轮换 MCP bearer token;如果你开过审计日志,1.0.1 不会帮你删旧文件,要自己删
audit.jsonl和bundles/,并轮换自定义头里用过的 key。 - 在 0.9.x 上跑过被动扫描、且后端不是本地 Ollama / LM Studio,那么经过它的 session cookie 都要当已泄露处理,cookie 属于客户或雇主应用时还得通知对方。
- 主动扫描器的状态变更重放现在只在 DANGEROUS 档做;如果你在 1.0.0 上以更低档跑过,去目标上核对有没有被误改。
- 在 1.0.0 上收紧隐私模式或换本地后端,要重启 Burp 才对扫描器生效;没重启就按旧模式算。
- 主密钥和密文放在同一个偏好文件里,这层加密不构成对本地攻击者的防护。
- 只装一个 build,full 版和商店版看着一样但工具数差 51 个。
- MCP 默认只绑
127.0.0.1;开外部访问要自己配 token 和 TLS,别把它当默认安全。 - 商店版只有 8 个 MCP 工具,跟 full 版 59 个不是一套;文档口径要看清。
适合谁
三类人:一是做授权 Web 渗透、想把 AI 放进 Burp 又不把目标流量直接交给云厂商的测试者——本地模型加三档隐私模式;二是想把 Burp 的能力接进自己的 AI 编码助手(Claude Code、Codex、Gemini CLI 这类)当扫描引擎的人——走 burp-scan 加 MCP,注意范围限制;三是做 AI 安全研究、想看一个真实产品怎么处理 MCP 访问控制、工具调用分级、审计哈希和外部服务器输出信任边界的人。
回到开头。这个扩展值得看的不是它接了几家模型,而是它把自己接 AI 的那几条边界摆在了明面上:MCP 有范围限制,工具调用有分级,外部输出有信任标记,审计有哈希默认,密钥存储的边界也自己写了\"这层加密不挡谁\"。一个安全工具肯把自己的 AI 面公开评审、把没有编号的缺陷连前置条件一起写清,这比它能不能扫出漏洞更值得看。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论