Skills

Java File Audit

Java 源码文件操作类漏洞审计。当在 Java 白盒审计中需要检测文件相关漏洞时触发。 覆盖 5 类文件风险: 任意文件上传(MultipartFile/Servlet...

Install

npx skills add wgpsec/AboutSecurity --skill java-file-audit -g -a claude-code -y
Repository
wgpsec/AboutSecurity1.8k
Category
Engineering
Updated
11d ago
License
See repository
Context cost
Lightabout 883 tokens
Runs scripts
No, instructions only

What it does

Java 源码文件操作类漏洞审计。当在 Java 白盒审计中需要检测文件相关漏洞时触发。 覆盖 5 类文件风险: 任意文件上传(MultipartFile/Servlet Part/类型绕过)、任意文件读取(NIO/IO流/路径穿越)、 任意文件写入(覆盖配置/WebShell落地)、归档提取漏洞(ZipInputStream/Zip Slip)、文件删除/重命名竞争。 需要 java-audit-pipeline 提供的数据流证据。

Java 文件操作类漏洞源码审计

本 skill 聚焦源码层面判断"文件操作漏洞是否成立",核心是验证路径可控性、文件名可控性和内容可控性。构造上传绕过 payload、目录穿越利用链等运行时利用技术属于对应黑盒 exploit skill 范畴。

深入参考


Sink 分类决策树

根据遇到的 Sink 函数类型,进入不同审计分支:

Sink 函数分支典型严重度
MultipartFile.transferTo() / Part.write()文件上传Critical-High
FileInputStream / Files.readAllBytes() / new File(path) / ClassLoader.getResourceAsStream()文件读取High-Medium
FileOutputStream / Files.write() / FileWriter文件写入Critical-High
ZipInputStream.getNextEntry() / ZipFile.entries()归档提取High
File.delete() / Files.delete()文件删除Medium

文件上传审计要点

上传漏洞本质是三要素同时满足: 可执行扩展名 + Web 可达存储路径 + 未被重命名/内容清洗。

  • MultipartFile: file.transferTo(new File(dir + file.getOriginalFilename())), getOriginalFilename() 返回客户端原始文件名,可含 ../ 路径穿越或恶意扩展名
  • Servlet Part: part.write(uploadPath + fileName), 检查 fileName 是否来自 part.getSubmittedFileName() 且未净化
  • ContentType 校验 vs 扩展名校验: file.getContentType() 来自客户端 HTTP 头,完全可伪造;扩展名白名单更可靠但需 toLowerCase() 处理
  • 存储路径可控性: 文件名中的 ../ 跳出上传目录,Paths.get(dir, fileName).normalize() 后需验证前缀
  • Spring multipart-config: spring.servlet.multipart.location / max-file-size / max-request-size 配置影响上传行为,检查是否限制合理
  • 文件头 Magic bytes 校验: 真实类型检测需读取文件头字节(如 ImageIO.read() 或 Apache Tika),而非信任 Content-Type

文件读取审计要点

路径穿越是文件读取漏洞的核心,../ 及其变体可跳出预期目录:

Read the whole SKILL.md on GitHub

More in Engineering