
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 范畴。
深入参考
- 5 类文件漏洞的危险模式 / 安全模式代码对比 / EVID 证据示例 → references/file-vuln-patterns.md
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
文件读取审计要点
路径穿越是文件读取漏洞的核心,../ 及其变体可跳出预期目录:
