引爆全球的 Log4j2 核弹级漏洞,Jndi 到底是个什么鬼?

背景

前段时间,Log4j2, Logback 日志框架频频爆雷:

炸了!Log4j2 再爆漏洞,v2.17.1 横空出世。。。

Logback 也爆雷了,惊爆了。。。

究其原因,很大一部分就是因为 JNDI 这个玩意。。。

JNDI

JNDI:Java Naming and Directory Interface,即:Java 命名和目录接口,它专为 Java 应用程序提供命名和目录功能。

JNDI 架构图:

如图,JNDI 包含以下两部分:

1)JNDI API:

Java 应用程序即是通过 JNDI API 来访问各种命名和目录服务的。

2)JNDI SPI(服务提供接口)

Java 应用程序通过 JNDI SPI 插入各种命名和目录服务的,然后通过 JNDI API 进行访问。

比如,没用 JNDI 之前,你可能要在 Java 代码中写死一些 JDBC 的数据库配置,有了 JNDI,就可以把数据源定义一种资源,然后通过名称进行查找,示例代码如下:

  1. Connection conn = null;  
  2. try {  
  3.  Context ctx = new InitialContext(); 
  4.  DataSource ds = (Datasource) ctx.lookup("java:MysqlDataSource"); 
  5.  conn = ds.getConnection(); 
  6.  ... 
  7. } catch(Exception e) { 
  8.  ... 
  9. } finally { 
  10.  ... 

当然,数据源及配置现在都是 Spring 进行管理了,这里只是介绍 JNDI 的一种用法。

说白了,JNDI 就是 Java 的一套规范,相当于把某个资源进行注册,再根据资源名称来查找定位资源。

要使用 JNDI,必须要有一个 JDNI 类,以及 1 个或者多个服务提供者(SPI),比如,在 JDK 中就包含以下几个服务提供者:

  • 轻量级目录访问协议 (LDAP)
  • 通用对象请求代理体系结构 (CORBA)
  • 通用对象服务命名服务 (COS)
  • Java 远程方法调用 (RMI)
  • 域名服务 (DNS)

这里的 LDAP 协议正是频频爆漏洞的根源,攻击者屡试不爽。

Log4j2 漏洞回顾

网上很多复现的示例,为了不造成更大影响,这里就不实战演示了,示例代码如下:

  1. /** 
  2.  * 作者:栈长 
  3.  * 来源公众号:Java技术栈 
  4.  */ 
  5. public class Test { 
  6.  
  7.     public static final Logger logger = LogManager.getLogger(); 
  8.      
  9.     public static void main(String[] args) { 
  10.         logger.info("${jndi:ldap://localhost:8080/dangerious}"); 
  11.     } 
  12.      

这就是 Log4j2 核弹级漏洞的主因!

LDAP 协议在上面有提到,它是一个开放的应用协议,也是 JDK JNDI 下面的一个服务提供者,用于提供目录信息访问控制。

漏洞正是利用了 JDNI 中的 ldap 协议,以上代码中的 localhost 如果是攻击者的地址,就会造成远程代码执行漏洞,后果就不堪设想。。

这是因为 Log4j2 有一个 Lookups 功能,它提供了一种向 Log4j 配置中添加值的方法,也就是通过一些方法、协议去读取特定环境中的信息,Jndi Lookup 就是其中一种:

经过一系列的版本修复再调整,从 Log4j v2.17.0 开始,JNDI 操作需要通过以下参数主动开启:

  1. log4j2.enableJndiLookup=true 

现在这种 jndi:ldap 协议查找方式也被 Log4j2 Lookups 干掉了,仅支持 java 协议或者没有协议这种查找方式了。

Log4j2 漏洞的后续进展,栈长也会持续跟进,关注公众号Java技术栈,公众号第一时间推送。

结语

Log4j2 Lookups 引发的漏洞真不少,这阵子一直在爆雷,这还真是个鸡肋功能,有几个人用到了?

当然,这阵子的漏洞不全是因为 JNDI 造成的,JNDI 它只是提供了一套规范,用得不好总不能怪它吧?所以,我们也不能把责任全推到 JNDI 身上,Log4j2 Lookups 功能脱不了干系,既然提供了 Jndi Lookup 功能,但对其影响面考虑的太少了。。

一个日志框架,最主要的目的是记录日志,虽然提供了许多其他丰富的功能,但如果没有考虑到位,反而会引发严重后果,毕竟安全第一,但也没办法,用开源就得接受开源的利弊。

还有人说,自己开发,这可能是气话了。主流开源的有很多公司在用,爆漏洞还有大厂反馈,能第一时间感知,自己开发的,啥时候爆雷了,爆在哪了,怎么死的都不知道,能不能做好一款产品和持续维护还是另外一回事。

参考文档:

https://docs.oracle.com/javase/jndi/tutorial/getStarted/overview/index.html

https://logging.apache.org/log4j/2.x/manual/lookups.html

本文转载自微信公众号「Java技术栈」,可以通过以下二维码关注。转载本文请联系Java技术栈公众号。

 

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/140523.html<

(0)
运维的头像运维
上一篇2025-03-03 23:47
下一篇 2025-03-03 23:48

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注