基于函数级污点分析的 Java 源代码漏洞审计工具JavaSinkTracer,通过 Model Context Protocol (MCP) 为 AI 助手提供安全分析能力。
1.安装
https://github.com/Zacarx/JavaSinkTracer_MCP
|
|
配置MCP服务器,这里使用字节的Trae
|
|

2.使用
这里使用JavaSecLab靶场进行审计,将项目的Rules文件夹移到项目文件夹下,rules.json是一个静态代码分析规则配置文件
- Sink(污点汇聚点):可能造成安全风险的敏感操作。
- Source(污点源):外部可控输入来源(如 HTTP 请求参数)。
- Sanitizer(净化函数):对数据进行过滤或转义,可中断污点传播

配置完成后即可使用
|
|

生成nuclei poc

以下为输出报告
JavaSecLab 项目安全漏洞报告
1. 项目概述
项目名称:JavaSecLab 分析方法:手动代码审计 分析日期:2024 项目结构:Spring Boot Web应用,包含多个安全漏洞演示模块
2. 安全漏洞摘要
通过对JavaSecLab项目的代码审计,我们发现该项目包含多个典型的Web安全漏洞演示,这些漏洞在实际生产环境中属于高危安全风险。以下是发现的主要漏洞类型:
| 漏洞类型 | 严重程度 | 模块位置 | 状态 |
|---|---|---|---|
| SQL注入 (SQLI) | 高危 | modules/sqli/controller | 已确认 |
| 反射型XSS | 中危 | modules/xss/controller | 已确认 |
| DOM型XSS | 中危 | modules/xss/controller | 已确认 |
| 远程代码执行 (RCE) | 高危 | modules/rce/code | 已确认 |
| 服务器端请求伪造 (SSRF) | 高危 | modules/ssrf/controller | 已确认 |
3. 漏洞详情
3.1 SQL注入漏洞 (SQLI)
模块位置:modules/sqli/controller/JdbcController.java
漏洞描述:该模块演示了多种SQL注入场景,包括原生SQL拼接、预编译拼接错误使用和JdbcTemplate拼接等不安全的SQL查询方式。直接拼接用户输入到SQL语句中会导致攻击者能够篡改SQL查询结构,执行恶意SQL命令。
代码示例(不安全的SQL拼接):
|
|
安全建议:
- 使用参数化查询(PreparedStatement),避免字符串拼接
- 实施输入验证和过滤
- 使用ORM框架的安全特性
- 应用最小权限原则配置数据库账户
3.2 跨站脚本攻击 (XSS)
模块位置:modules/xss/controller/ReflectController.java 和 modules/xss/controller/DomController.java
漏洞描述:
- 反射型XSS:用户输入直接反射到页面响应中,未经任何过滤或编码,允许攻击者注入恶意JavaScript代码。
- DOM型XSS:在客户端JavaScript中处理用户输入时,未进行适当的验证或转义,导致恶意脚本在用户浏览器中执行。
代码示例(反射型XSS):
|
|
安全建议:
- 对所有用户输入进行验证、过滤和转义
- 实施内容安全策略(CSP)
- 使用安全的输出编码库(如OWASP ESAPI)
- 设置HttpOnly标志防止Cookie窃取
3.3 远程代码执行漏洞 (RCE)
模块位置:modules/rce/code/CodeController.java
漏洞描述:该模块通过GroovyShell直接执行用户输入的代码,攻击者可以构造恶意payload执行任意系统命令,获取服务器控制权。
代码示例:
|
|
安全建议:
- 避免直接执行用户输入的代码
- 如必须执行,使用白名单机制严格限制可执行的命令
- 实施权限隔离,限制执行环境权限
- 对输入进行严格的验证和过滤
3.4 服务器端请求伪造漏洞 (SSRF)
模块位置:modules/ssrf/controller/SsrfController.java
漏洞描述:该模块允许用户提供URL参数,服务器直接发起请求并返回结果。攻击者可以利用此漏洞访问内网资源、探测内网服务或读取本地文件。
代码示例:
|
|
安全建议:
- 实施URL白名单策略,只允许访问受信任的外部资源
- 验证URL协议,限制为http/https
- 禁止访问内网IP地址和本地文件系统
- 使用代理机制处理外部请求
4. 安全编码最佳实践
通过分析JavaSecLab项目的代码,我们总结了以下安全编码最佳实践:
- 输入验证和过滤:对所有用户输入进行严格验证,使用白名单而非黑名单方式
- 参数化查询:使用PreparedStatement或ORM框架的参数化查询功能
- 输出编码:对所有输出到页面的内容进行适当编码,防止XSS攻击
- 最小权限原则:应用程序应以最小必要权限运行
- 安全配置:禁用危险的默认配置,启用安全功能(如HttpOnly、CSP等)
- 错误处理:避免在错误响应中泄露敏感信息
- 安全库使用:使用经过安全审查的库和框架,定期更新依赖
5. 总结
JavaSecLab项目作为安全漏洞演示平台,有效地展示了常见的Web安全漏洞和相应的防护措施。在实际生产环境中,应避免使用该项目中的不安全代码示例,并严格遵循安全编码最佳实践。
该项目适合用于安全培训和学习,帮助开发人员理解常见的安全漏洞及其影响,以及如何正确实施安全防护措施。