一、发现:从拿到代码到确认漏洞
1.1 发现流程(全程分钟级)
- 接入:把目标框架源码打包,通过扫描器的 Web 界面上传(也支持一条命令指向本地目录),不需要改造工程结构;
- 自动检测:五路并行------LLM 语义提名(两轮:先按规范模板提名候选,再强制补链路线索)、静态规则、开源依赖风险、多 Agent 权限拓扑、Web 权限一致性;
- 统一终审:所有候选逐条过确定性验证引擎(不依赖大模型、同代码同结论)验证据链,只有 confirmed 进报告,被否决和存疑的进漏报池不丢弃;
- 人工复判:报告出来不直接信------这次扫描器给了 6 条 confirmed,人工逐条对靶码复核,毙掉 2 条(把"方法接受路径参数"直接判为路径穿越、没追到调用点已做的校验------典型的点状误报),留下 4 条真问题,其中就包括这条 critical;
- 定性研判:对 critical 问三个问题,确定漏洞等级与攻击形态。

1.2 扫描器报了什么
那条 critical 的结论是:配置文件里携带的自定义代码,会在服务端被无沙箱执行------证据链从配置字段一路指到执行点,文件行号齐全,判定依据可逐步复查。这正是"LLM 提名 + 确定性终审"双通道的价值:LLM 负责把这类"藏在配置语义里"的问题提名出来(纯规则引擎看不见它),终审引擎负责把证据链钉死(纯 LLM 说不清依据)。
顺带一句诚实的话:4/6 的条级精确率说明扫描器是加速器不是裁判------第 4 步的人工复判省不掉,但成本从"全量人审"降到了"只审 confirmed"。
1.3 研判三问
报告 ≠ 成立,人工研判接着问三个问题:
| 问题 | 怎么验 |
| 入口真实吗? | 追攻击者输入到执行点的完整链路,确认不是"只有开发者自己能触发" |
| 真能执行任意代码? | 实际投递载荷验证,而不是停留在"理论可达" |
| 远程还是必须本地操控? | 按部署形态分档定性(见下表),这决定它是 critical 还是中危 |
远程性三档表(这次最有复用价值的判定框架):
| 部署形态 | 攻击者条件 | 定性 |
| 服务对外绑定 | 仅网络可达 | 未认证远程 RCE |
| 默认只绑本机回环 | 本机进程,或受害者浏览器跳板(目标无 Host 校验 + 无 CORS + 无鉴权时 DNS rebinding 可达) | 条件性远程 RCE |
| 命令行运行来源不明的配置 | 受害者主动运行 | 供应链/社工 RCE |
三档我都做了实测,最重的一档(纯远程、零凭证、零交互)成立------下面就是它的复现。
二、复现:从搭靶机到交互式控制台
2.1 环境
一台全新 Ubuntu 虚拟机当靶机,按目标框架官方文档原样部署;攻击机与靶机同网段,全程只用 HTTP。

2.2 复现一:一条无凭证请求,服务端执行代码
攻击只有一个动作:向目标的会话创建接口发一个 POST,请求体里某个配置字段携带 Python 载荷。载荷故意设计成无害标记------只抛出一个装着靶机信息的异常(主机名 / 用户 / 服务进程 pid / 内核版本)。
关键在目标的错误处理:异常内容会被原样回显给未授权请求方。于是响应体本身就是证据:
这些值只可能来自靶机服务进程内部------单次 curl 闭环出证,不需要登录靶机。
2.3 复现二:升级成交互式 RCE 控制台
把"异常里装靶机信息"换成"异常里装命令输出",就得到一个交互式控制台:五十行纯标准库 Python,输入命令、回车、靶机执行、结果回显。实测 id / ps aux / top(批处理模式)全部回显成功。

2.4 复现三:证明"防线无效"
载荷配置里特意开了目标框架最严格的审批选项(所有敏感操作都要求人工确认)------照样拦不住。因为审批层只覆盖工具调用,不覆盖配置加载路径:代码在"加载配置"这一步就执行了,根本走不到审批环节。这一条证明漏洞是结构性的,不是用户配置失误。
三、思考
目前是人工进行符合,能否把人工复现转为ai自动复现->代码静态审核->poc输入->poc确认。从而进行一个静态闭环,不仅要检测漏洞的产出同步提升poc产出,同时对poc进行benchmark沉淀呢。(后续将会朝这个方面设想不足静态扫描,从而丰富自身项目的多用性和可用性)
四、总结
发现这一半,扫描器把成本降到了分钟级;复现这一半,三个设计原则撑起全部说服力:无害载荷(证明执行权而非破坏力)、单命令出证(错误回显让证据自己送回来)、证防线无效(开最严审批照样打穿)。
方法论没有保质期------希望这三问、三档表和三条 PoC 原则,对正在做 Agent 安全研究的你有点用。
ps:失业状态中,希望大佬多多指教,讨论和共同进步。