skills/code-audit/java/java-framework-audit/SKILL.md
Java 框架特定漏洞源码审计。当在 Java 白盒审计中需要检测框架层面的已知漏洞模式时触发。 覆盖 5 大框架/组件: Spring 全家桶(SpEL/Actuator/参数绑定/Spring Cloud Gateway)、 Struts2(OGNL/ActionMapping/Content-Type 解析)、Shiro(RememberMe 反序列化/URI 绕过)、 FastJSON/Jackson/Gson(反序列化 autotype/polymorphic)、MyBatis(${} 注入/动态 SQL)。 这些是 Java 生态中出现频率最高、影响面最广的框架级漏洞。
npx skillsauth add wgpsec/AboutSecurity java-framework-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.
框架漏洞的本质分两类: 框架自身缺陷(已知 CVE,升级即修)和框架误用(开发者对框架安全机制理解不足导致的配置/编码缺陷)。本 skill 关注的核心问题是: 被审计项目的代码如何触发这些已知的框架缺陷模式。
| 框架/组件 | 核心风险 | 首要搜索关键字 | 典型严重度 |
|-----------|---------|---------------|-----------|
| Spring 全家桶 | SpEL 注入 / Actuator 暴露 / Mass Assignment | @Value SpelExpression Actuator management.endpoints | 高-严重 |
| Struts2 | OGNL 注入 / Content-Type 解析 | struts.xml ActionSupport ValueStack ognl | 严重 |
| Shiro | RememberMe 反序列化 / URI 绕过 | setCipherKey rememberMe ShiroFilterChain | 严重 |
| FastJSON/Jackson/Gson | 反序列化 autotype / polymorphic | JSON.parseObject JSON.parse enableDefaultTyping @JsonTypeInfo | 严重 |
| MyBatis | ${} SQL 拼接注入 | ${ 在 Mapper XML / @Select @Update 注解 | 高 |
@ModelAttribute 会自动将请求参数绑定到对象字段。若实体类含 role/isAdmin/price 等敏感字段且未使用 @InitBinder + WebDataBinder.setAllowedFields() 做白名单,攻击者可通过添加额外参数覆写敏感属性management.endpoints.web.exposure.include 配置。高危端点: /actuator/env(泄露配置 + restart RCE)、/actuator/jolokia(JNDI 注入)、/actuator/heapdump(堆转储提取密钥/密码)、/actuator/gateway/routes(Gateway 路由注入)@Value("#{externInput}")、@Cacheable(key="#root.args[0]") 拼接用户输入、@PreAuthorize / @PostAuthorize 表达式拼接、ExpressionParser.parseExpression() 直接解析外部输入、Spring Data @Query 中的 SpEL ?#{...}/gateway/routes 动态注册恶意路由antMatchers 顺序错误(宽松规则在前覆盖严格规则)、.permitAll() 范围过大、路径匹配与 Servlet 路径不一致(如尾部斜杠 /admin vs /admin/)ParametersInterceptor 进入 ValueStack,若 SecurityMemberAccess 限制不严,可执行任意代码method:(调用任意 Action 方法)、redirect:/redirectAction:(OGNL 注入)。检查 struts.enable.DynamicMethodInvocation 和 struts.mapper.alwaysSelectFullNamespacekPH+bIxk5D2deZiIxcaaaA== 加密 RememberMe Cookie。即使升级后,若开发者使用自定义但可预测/泄露的密钥,风险依旧存在/admin/;.js 绕 Shiro 但被 Spring 正常路由、/..;/admin 路径穿越、双重 URL 编码、大小写混合绕 Filter。核心原因是 Shiro 的 URL 匹配与后端框架(Spring/Servlet)的解析规则不一致/toLogin;/../admin 绕过)、CVE-2020-11989(双重编码)、CVE-2021-41303(路径标准化绕过)JSON.parseObject(input) 或 JSON.parse(input) 默认支持 @type 字段指定反序列化类。autotype 黑名单随版本升级不断被绕过(1.2.24→1.2.47→1.2.68→1.2.80)。Feature.SupportNonPublicField 开启时可设置私有字段。1.2.83+ 引入 safeMode 彻底关闭 autotypeObjectMapper.enableDefaultTyping() 或 ObjectMapper.activateDefaultTyping() 开启全局多态反序列化,等同于全局 RCE 入口。字段级 @JsonTypeInfo(use=Id.CLASS) 或 @JsonTypeInfo(use=Id.MINIMAL_CLASS) 同样危险TypeAdapter / JsonDeserializer 中若使用 Class.forName 加载用户指定类名则引入风险JSON.parseObject / JSON.parse(FastJSON)、enableDefaultTyping / activateDefaultTyping / @JsonTypeInfo(Jackson)、自定义 TypeAdapter(Gson)${} vs #{}: ${} 是字符串直接拼接(等同于 String.format),#{} 是预编译参数绑定。Mapper XML 和 @Select/@Update/@Delete/@Insert 注解中的 ${} 均为 SQL 注入入口${}: <if test="sort != null">ORDER BY ${sort}</if>、<where> 和 <foreach> 标签内的 ${} 使用同样危险#{} 预编译,应对列名做白名单校验; LIKE 应改写为 LIKE CONCAT('%', #{keyword}, '%'); IN 应使用 <foreach collection="ids" item="id">#{id}</foreach>*Mapper.xml)和注解模式(@Select("SELECT * FROM ${table}")),两者都需要审计@ModelAttribute 绑定的实体是否有敏感字段未做白名单SecurityMemberAccess 设置setCipherKey 是否使用默认或弱密钥,Filter Chain 的 URI 匹配与实际路由是否一致enableDefaultTyping@Select 注解中的 ${} 使用已标记,不可避免的场景已确认有白名单防护<if> / <where> / <foreach>)中的 ${} 已检查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 伪造的场景都应使用此技能