Featured image of post JavaSinkTracer_MCP

JavaSinkTracer_MCP

基于函数级污点分析的 Java 源代码漏洞审计工具JavaSinkTracer,通过MCP为 AI 助手提供安全分析能力

基于函数级污点分析的 Java 源代码漏洞审计工具JavaSinkTracer,通过 Model Context Protocol (MCP) 为 AI 助手提供安全分析能力。

1.安装

https://github.com/Zacarx/JavaSinkTracer_MCP

1
python -m pip install -r requirements.txt

配置MCP服务器,这里使用字节的Trae

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
{
  "mcpServers": {
    "javasinktracer": {
      "command": "python",
      "args": [
        "/path/to/JavaSinkTracer/mcp_server.py"
      ],
      "description": "Java源代码漏洞审计工具 - 基于函数级污点分析"
    }
  }
}

img

2.使用

这里使用JavaSecLab靶场进行审计,将项目的Rules文件夹移到项目文件夹下,rules.json是一个静态代码分析规则配置文件

  • Sink(污点汇聚点):可能造成安全风险的敏感操作。
  • Source(污点源):外部可控输入来源(如 HTTP 请求参数)。
  • Sanitizer(净化函数):对数据进行过滤或转义,可中断污点传播

img

配置完成后即可使用

1
请帮我扫描 JavaSecLab项目的安全漏洞并输出报告

img

生成nuclei poc

img

以下为输出报告

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拼接):

1
2
3
4
// 原生SQL拼接方式的漏洞场景
String sql = "SELECT * FROM users WHERE username = '" + username + "'";
PreparedStatement stmt = connection.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();

安全建议

  • 使用参数化查询(PreparedStatement),避免字符串拼接
  • 实施输入验证和过滤
  • 使用ORM框架的安全特性
  • 应用最小权限原则配置数据库账户

3.2 跨站脚本攻击 (XSS)

模块位置modules/xss/controller/ReflectController.javamodules/xss/controller/DomController.java

漏洞描述

  • 反射型XSS:用户输入直接反射到页面响应中,未经任何过滤或编码,允许攻击者注入恶意JavaScript代码。
  • DOM型XSS:在客户端JavaScript中处理用户输入时,未进行适当的验证或转义,导致恶意脚本在用户浏览器中执行。

代码示例(反射型XSS):

1
2
3
4
5
@GetMapping("/reflect")
@ResponseBody
public String reflect(String xss) {
    return "反射型XSS示例:" + xss;
}

安全建议

  • 对所有用户输入进行验证、过滤和转义
  • 实施内容安全策略(CSP)
  • 使用安全的输出编码库(如OWASP ESAPI)
  • 设置HttpOnly标志防止Cookie窃取

3.3 远程代码执行漏洞 (RCE)

模块位置modules/rce/code/CodeController.java

漏洞描述:该模块通过GroovyShell直接执行用户输入的代码,攻击者可以构造恶意payload执行任意系统命令,获取服务器控制权。

代码示例

1
2
3
4
5
6
7
@GetMapping("/vulGroovy")
@ResponseBody
public R vulGroovy(String payload) {
    GroovyShell shell = new GroovyShell();
    Object result = shell.evaluate(payload);
    // ...返回执行结果
}

安全建议

  • 避免直接执行用户输入的代码
  • 如必须执行,使用白名单机制严格限制可执行的命令
  • 实施权限隔离,限制执行环境权限
  • 对输入进行严格的验证和过滤

3.4 服务器端请求伪造漏洞 (SSRF)

模块位置modules/ssrf/controller/SsrfController.java

漏洞描述:该模块允许用户提供URL参数,服务器直接发起请求并返回结果。攻击者可以利用此漏洞访问内网资源、探测内网服务或读取本地文件。

代码示例

1
2
3
4
5
6
7
8
@GetMapping("/vul")
@ResponseBody
public String vul(String url) {
    URL u = new URL(url);
    URLConnection conn = u.openConnection();
    BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    // ...读取并返回内容
}

安全建议

  • 实施URL白名单策略,只允许访问受信任的外部资源
  • 验证URL协议,限制为http/https
  • 禁止访问内网IP地址和本地文件系统
  • 使用代理机制处理外部请求

4. 安全编码最佳实践

通过分析JavaSecLab项目的代码,我们总结了以下安全编码最佳实践:

  1. 输入验证和过滤:对所有用户输入进行严格验证,使用白名单而非黑名单方式
  2. 参数化查询:使用PreparedStatement或ORM框架的参数化查询功能
  3. 输出编码:对所有输出到页面的内容进行适当编码,防止XSS攻击
  4. 最小权限原则:应用程序应以最小必要权限运行
  5. 安全配置:禁用危险的默认配置,启用安全功能(如HttpOnly、CSP等)
  6. 错误处理:避免在错误响应中泄露敏感信息
  7. 安全库使用:使用经过安全审查的库和框架,定期更新依赖

5. 总结

JavaSecLab项目作为安全漏洞演示平台,有效地展示了常见的Web安全漏洞和相应的防护措施。在实际生产环境中,应避免使用该项目中的不安全代码示例,并严格遵循安全编码最佳实践。

该项目适合用于安全培训和学习,帮助开发人员理解常见的安全漏洞及其影响,以及如何正确实施安全防护措施。

By Lsec
最后更新于 Dec 01, 2025 15:24 +0800
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计
¹鵵ҳ