skills/code-audit/java/java-frontend-audit/SKILL.md
Java 源码前端安全类漏洞审计。当在 Java 白盒审计中需要检测前端安全漏洞时触发。 覆盖 5 类风险: XSS(JSP/Thymeleaf/FreeMarker 输出转义)、CSRF(Spring Security/自定义 Token)、 开放重定向(sendRedirect/forward)、CRLF 注入(Header/Cookie)、Session 管理(固定/超时/并发)。 需要 java-audit-pipeline 提供的数据流证据。
npx skillsauth add wgpsec/AboutSecurity java-frontend-auditInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
本 skill 聚焦源码层面判断"前端安全漏洞是否成立",核心是验证用户输入在输出到 HTTP 响应(HTML/Header/Cookie/重定向)过程中的过滤与转义是否充分。构造 payload、绕 WAF 等运行时利用技术属于对应黑盒 exploit skill 范畴。
| 类型 | 典型 Sink | 危险模式 | 严重度 |
|------|-----------|----------|--------|
| XSS | JSP <%= %>, th:utext, ${var?no_esc}, out.println() | 用户输入未经转义直接输出到 HTML/JS 上下文 | High-Medium |
| CSRF | 状态变更 POST/PUT/DELETE 接口 | csrf().disable() 或缺少 Token 校验的写操作端点 | High-Medium |
| 开放重定向 | sendRedirect(), return "redirect:" + url | 用户可控 URL 直接传入重定向函数 | Medium |
| CRLF 注入 | setHeader(), addHeader(), addCookie() | 用户输入未过滤 \r\n 直接写入 HTTP 头 | Medium-High |
| Session 管理 | getSession(), Cookie 构造, session-timeout | 登录后未重建 Session / Cookie 缺少安全属性 | Medium-High |
Step 1 -- 确认 EVID 证据点: 从 java-audit-pipeline Phase 3 产出的 EVID_* 证据中,筛选前端安全类条目(EVID_XSS_、EVID_CSRF_、EVID_REDIR_、EVID_CRLF_、EVID_SESSION_*)。没有 EVID 证据的 Sink 只能标"待验证"。
Step 2 -- 判断过滤有效性: 追踪 Source->Sink 路径上每一步过滤/转义操作,评估其对当前漏洞类型是否有效。常见陷阱: <c:out> 安全但 <%= %> 不转义、th:text 安全但 th:utext 不转义、URL 白名单可被 //evil.com 绕过。
Step 3 -- 评估绕过可能性: 过滤存在但不充分时,分析具体绕过路径(上下文切换、编码差异、URL 解析差异等)。能给出绕过思路则标"已确认",否则标"待验证"并记录已知过滤方式。
Step 4 -- 确定严重度: 使用 java-audit-pipeline 的三维度评分公式 Score = R*0.40 + I*0.35 + C*0.25。XSS 存储型 I=2-3,反射型 I=1-2;CSRF 取决于被保护操作的影响。
<%= request.getParameter("x") %> 和 <% out.println(input); %> 均不转义,直接输出到 HTML 即反射型 XSS;安全写法: <c:out value="${param.x}"/> 或 ${fn:escapeXml(param.x)},JSTL 默认转义 HTML 实体th:utext="${userInput}" 不转义(原始 HTML 输出)——危险;th:text="${userInput}" 自动 HTML 转义——安全output_format=HTMLOutputFormat + auto_escaping_policy=ENABLE_IF_SUPPORTED 后默认转义;${var?no_esc} 显式跳过转义——危险;未配置全局转义时所有 ${} 均危险< > & " ' 即可;HTML attribute 需额外处理引号闭合;JavaScript 上下文需 JS 编码而非 HTML 转义;URL 参数需 URL 编码——不同上下文使用错误的转义函数等于无防御innerHTML / document.write() / eval() 渲染,后端审计需确认 JSON 响应的 Content-Type 是否为 application/json 而非 text/htmlPolicyFactory) 或 Jsoup.clean(html, Safelist.basic()).csrf().disable()(旧版)或 http.csrf(csrf -> csrf.disable())(Lambda DSL)——全局关闭后所有状态变更端点均暴露SecureRandom 安全 vs Math.random() 可预测)、是否绑定 Session、校验时机(Controller 层 vs Filter 层)<input type="hidden" name="_csrf" value="..."/>;AJAX 用 X-CSRF-TOKEN 请求头配合 <meta name="_csrf"> 读取——缺失任一传递方式则该场景无防护Access-Control-Allow-Origin: * + Allow-Credentials: true)可被跨域 JS 读取响应中的 CSRF Token,间接绕过 CSRF 防护/deleteUser?id=1)天然无 CSRF 防护——<img src=""> 即可触发response.sendRedirect(request.getParameter("url")) / response.sendRedirect(request.getParameter("next")) ——用户完全可控return "redirect:" + target 或 RedirectView(url) 中 target 来自请求参数//evil.com(协议相对 URL)、/\evil.com(部分解析器视 \ 为路径分隔符)、URL 编码 %2F%2Fevil.com、@ 符号 http://[email protected]、unicode 同形异义字/ 开头且不以 // 开头);使用 UriComponentsBuilder 解析后校验 hostresponse.setHeader("X-Custom", userInput) 或 response.addHeader("Location", "/path?lang=" + input) ——注入 \r\nSet-Cookie: admin=1 可设置任意头\r\n;旧版本或自定义 HTTP 框架(如 Netty 原始 API)可能无此保护——确认容器版本是关键new Cookie("lang", userInput) ——注入 \r\nSet-Cookie: session=evil 可劫持 Session\r、\n、\0 控制字符;升级到较新版本 Servlet 容器request.getSession().invalidate() + request.getSession(true) 重建;Spring Security SessionFixationProtection.migrateSession 默认启用HttpOnly 防 XSS 窃取 Cookie(cookie.setHttpOnly(true));Secure 限制仅 HTTPS 传输(cookie.setSecure(true));SameSite=Lax/Strict 防 CSRF(Servlet 4.0+ 或 Spring server.servlet.session.cookie.same-site)web.xml 中 <session-timeout>30</session-timeout>(分钟);Spring Boot server.servlet.session.timeout=30m;过长超时增加 Session 劫持窗口sessionManagement().maximumSessions(1).maxSessionsPreventsLogin(true) ——未配置时同一账户可多点登录,被盗凭据难以发现<%= %> / out.println() 输出点均已确认是否转义,Thymeleaf th:utext 已全部标记testing
Azure 云环境渗透测试总体方法论。当目标使用 Azure/Microsoft 365/Entra ID、发现 Azure 相关资产(Blob Storage/App Service/Azure VM/Azure Functions)、获取 Azure 凭据(Service Principal/Managed Identity/Access Token)、或需要对 Azure 环境进行安全评估时使用。提供从未授权枚举到 Entra ID 攻击、服务提权、Cloud-to-OnPrem 横向移动的全流程决策树。覆盖 35+ Azure 服务攻击面
tools
Mythic C2 操作方法论。当需要部署 Mythic、选择 Mythic Agent、安装 C2 Profile、配置 HTTP/DNS/WebSocket/SMB/TCP 通信、生成 payload、管理回连任务,或把 Mythic 作为跨平台 C2 框架用于授权红队演练时使用。覆盖 mythic-cli 安装、Agent/Profile 选择、SSL 证书配置、payload 构建和基础 OPSEC 判断
development
Docker 安全测试与容器渗透方法论。当需要评估 Docker 容器、Docker Daemon、Docker Registry、镜像层、构建产物或容器逃逸风险时使用。覆盖容器环境识别、特权容器逃逸、docker.sock/Remote API 利用、procfs/cgroup/capabilities 滥用、Docker 用户组提权、运行时/内核 CVE、Registry 枚举、镜像层 Secret 分析和构建上下文泄露。发现 Docker 容器环境、Registry 暴露、镜像凭据或容器配置错误时应使用此技能
development
使用 PadBuster 进行 Padding Oracle 攻击。当发现 Web 应用使用 CBC 模式加密且存在 Padding Oracle 漏洞时使用。PadBuster 可自动解密密文和伪造任意明文对应的合法密文,适用于加密 Cookie/Token/URL 参数。任何涉及 Padding Oracle 攻击、CBC 密文解密、Cookie 伪造的场景都应使用此技能