注入型漏洞以及agent-audit的检测原理

keywords: AI安全,漏洞,源码

1. 引入

agent-audit能扫描Agent项目源代码,通过静态分析的方法,发现Agent的风险(参考1)。在参考2中可以看到,agent-audit能检测多种安全问题。其中排第一的就是比较严重的注入类攻击"Injection attacks",这是指外部可控用户输入未经过滤,直接传入代码执行、系统命令、数据库查询逻辑,极易引发代码注入 、命令注入 、SQL 注入漏洞",它也被agent-audit标为AGENT-001的漏洞。

2. 注入型漏洞原理

  1. 代码注入(Code Injection)

(1)定义:

程序未做过滤,把外部输入拼接进代码逻辑,解释器正常解析并执行恶意内容,对应 exec() 这类代码执行函数。

(2)示例

python 复制代码
cmd = input("请输入计算表达式:")
exec(cmd)

正常输入:1+2 → 输出 3

恶意输入:import ('os').system('rm -rf /')

服务端直接执行这段 Python 代码,造成服务器文件被删除。

  1. 命令注入(Command Injection)

(1)定义

程序调用系统命令时,拼接了用户输入,攻击者利用 Shell 特殊字符(; & | 等)截断原有命令,追加恶意系统指令。

(2)示例

python 复制代码
import subprocess
filename = input("请输入文件名:")
subprocess.call("cat " + filename, shell=True)

正常输入:test.txt → 读取文件内容

恶意输入:test.txt; whoami

Shell 会先后执行两条命令:cat test.txt + whoami,攻击者获取服务器账户信息。

  1. SQL 注入(SQL Injection)

(1)定义

可控用户输入被直接拼接进 SQL 语句,数据库把输入当成 SQL 指令执行,针对数据库场景。前端输入直接拼接到查询 / 增删改 SQL 中,利用 SQL 语法特殊字符(' # -- 等)篡改原有 SQL 逻辑。

(2)示例

原始 SQL 拼接逻辑:

sql 复制代码
sql
SELECT * FROM user WHERE username='输入的账号' AND password='输入的密码'

正常输入:账号admin、密码123456 → 正常登录

恶意输入:账号 admin' -- ,密码随意

拼接后 SQL:

sql 复制代码
sql
SELECT * FROM user WHERE username='admin' -- ' AND password='xxx'

-- 是 SQL 注释符,后面语句全部失效,无需密码直接登录管理员账号。

3. agent-audit检测注入型漏洞用法

  1. 安装
shell 复制代码
pip install agent-audit
  1. 扫描
shell 复制代码
agent-audit scan ./your-agent-project
  1. 扫描后输出sarif格式报告
shell 复制代码
agent-audit scan . --format sarif --output results.sarif

4. agent-audit检测注入型漏洞原理

从参考3中,我们可以看到AGENT-001的核心检测逻辑:

python 复制代码
if pattern.get('has_tainted_input', False):
    if 'taint_analysis' not in pattern:
        # Fallback: construct synthetic taint analysis
        func_name = pattern.get('function', '')
        # Map function to sink type - matching oracle expectations
        # Oracle uses: eval, code_execution, shell_execution, sql_execution
        sink_type_map = {
            'eval': 'eval',  # Oracle expects "eval" for eval()
            'exec': 'code_execution',
            'compile': 'code_execution',
            'os.system': 'shell_execution',
            'os.popen': 'shell_execution',
            'subprocess.run': 'shell_execution',
            'subprocess.Popen': 'shell_execution',
            'subprocess.call': 'shell_execution',
            'subprocess.check_output': 'shell_execution',
            'subprocess.check_call': 'shell_execution',
        }
        sink_type = sink_type_map.get(func_name, 'shell_execution')

从代码中,我们可以看出大致的检测逻辑为:

  • 找危险函数:扫描代码,定位 eval/os.system/subprocess 等高危函数
  • 查污点输入:判断这些函数的参数,是否来自用户可控的未过滤输入,用户可控的外部输入(如 URL 参数、表单输入、文件上传内容)
  • 判定漏洞:危险函数 + 未过滤污点输入 = 确认命令注入漏洞

其中污点分析是关键。参考4中,给出了其污点分析的方案:使用 Python 标准库 ast 实现函数级别的污点追踪系统 ,用于检测用户输入是否流向危险函数。污点分析的基本原理是: 标记不可信数据(污点源),追踪其传播路径,检查是否到达危险函数(sink) 。

污点分析关键实现

(1)污点分类 :函数参数被视为潜在污染源(保守假设),环境变量、用户输入调用(如 request.json() )也被标记。

(2)数据流追踪 :通过 AST 访问器记录变量赋值、函数参数传递、f-string 插值、字符串拼接等场景中的数据流向。

(3)BFS 可达性检测 :从每个污染变量开始,沿数据流图广度优先搜索,检查是否到达危险函数( subprocess.run 、 os.system 、 eval 等)。

(4)净化处理 :若污染变量在到达 sink 前经过净化操作(如 shlex.quote() ),则不报告漏洞。

5. 总结

本文讲解三类注入型漏洞(代码注入、命令注入、SQL 注入)的原理,并从agent-audit源码讲解了其检测注入型漏洞的逻辑。

6. 参考

  1. https://github.com/HeadyZhang/agent-audit
  2. https://github.com/HeadyZhang/agent-audit/tree/27c8416b003117f7acf40fd7925c35862d170ba8#what-it-detects
  3. https://github.com/HeadyZhang/agent-audit/blob/27c8416b003117f7acf40fd7925c35862d170ba8/packages/audit/agent_audit/rules/engine.py#L552
  4. https://github.com/HeadyZhang/agent-audit/blob/27c8416b003117f7acf40fd7925c35862d170ba8/packages/audit/agent_audit/analysis/taint_tracker.py
相关推荐
小白跃升坊30 分钟前
PHP2Shell:AI 两天挖出 9.2 分漏洞,让全球 70% 网站连夜打补丁!1Panel 已经把修复版本封装好,推到了你的应用商店里。
php·开源安全·1panel·ai安全·漏洞披露
福建佰胜张工4 小时前
SMC 薄型气爪 MHF2-16D1 深度解析:平行开闭、低剖面结构在自动化装配中的选型与落地
java·服务器·安全·自动化
catoop4 小时前
API Key 设计与安全生成方案:结构拆解、数据库设计与 Java 实现
java·数据库·安全
g3voip7 小时前
工业防水电话到底怎么选?隧道、管廊与码头的需求差异
服务器·网络·信息与通信·ip
珠海西格电力7 小时前
零碳园区管理系统的性能评估体系的行业标准
大数据·网络·人工智能·物联网·机器学习·架构·能源
贾伟康7 小时前
【化学实验室|18】HarmonyOS ArkTS 权限与隐私实战:让 module.json5、功能说明和拒绝路径一致
安全·移动开发·harmonyos·arkts·arkui
wangruofeng8 小时前
黑色十月:AI 找到的漏洞,两小时数十万次利用
人工智能·安全·php
.Bryce.8 小时前
从强化学习到Agentic RL:让Agent在“干活“中自己变聪明
服务器·网络·agent·rag·agentic rl
NetInside_8 小时前
Unknown,不应该是网络分析的终点
网络
码少女8 小时前
Linux——UDP协议和TCP协议
linux·网络·udp·tcp