Javaite jndi注入漏洞分析

Javaite jndi注入漏洞分析

今年三月份挖的,已获得CNVD编号,近期准备跳槽决定拿出来水一下。

项目介绍

JavaLite 是一个完整的框架集合,用于快速应用程序开发的 Java 生态系统。

项目地址

https://github.com/javalite/javalite
https://javalite.io/

漏洞概述

javalite存在JNDI注入漏洞,该漏洞源于javalite的DB类提供了一些方便的方法用于打开/关闭数据库连接、运行各种类型的查询和执行 SQL 语句。DB类中存在open(String jndiName)函数,其功能是根据已注册的名称从 JNDI 打开连接,由于用户传入的 jndiName 未经校验直接被 ctx.lookup 执行,用户可直接传入ldap恶意链接执行命令。

影响版本

Javalite <= javalite-3.4-j11

漏洞分析

源码地址:https://github.com/javalite/javalite

Javalite框架中org.javalite.activejdbc.DB类,功能如下:
在这里插入图片描述

org.javalite.activejdbc.DB存在open(String jndiName)函数,其功能是根据已注册的名称从 JNDI 打开连接。
在这里插入图片描述

函数源代码如下,该函数jndiName可控且并未对用户传入内容进行过滤,用户可以自定义方法调用open函数并传入任意数据。在调用open函数时,程序将调用ctx.lookup(jndiName)打开连接。
在这里插入图片描述

用户传入的 jndiName 未经校验直接被 ctx.lookup 执行。如果用户控制jndi的值并将恶意数据传递到 oepn() 方法,那么这会导致JNDI注入。
在这里插入图片描述

漏洞分析复现

该项目作为一个Java框架,本身无web界面,因此需要在官方提供的Test类进行漏洞复现:
activejdbc\src\test\java\org\javalite\activejdbc\BaseTest2.java#shouldReuseExistingConnection
在这里插入图片描述

该漏洞需要使用 JNDI工具辅助复现,可使用 JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar 工具(注意:需要Java版本小于 JDK 8u191)。
GitHub - welk1n/JNDI-Injection-Exploit: JNDI注入测试工具(A tool which generates JNDI links can start several servers to exploit JNDI Injection vulnerability,like Jackson,Fastjson,etc)
终端开启监听:
在这里插入图片描述

Debug调试代码流程如下:

第72行传入了恶意JndiName的值,第73行调用了activejdbc\src\main\java\org\javalite\activejdbc\DB.java#oepn
在这里插入图片描述

跟进db.open,用户传入的 jndiName 直接被 ctx.lookup 执行
在这里插入图片描述

看一下 lookup 的调用方法,传进 InitialContext#getURLOrDefaultInitCtx
在这里插入图片描述

lookup 拿到 name ,getURLScheme匹配 :和 /;之后获取链接内容,getURLContext 解释包含样例:

For example, if the scheme id is “ldap”, and the Context. URL_PKG_PREFIXES property contains “com.widget:com.wiz. jndi”, the naming manager would attempt to load the following classes until one is successfully instantiated:
· com.widget.ldap.ldapURLContextFactory
· com.wiz.jndi.ldap.ldapURLContextFactory
· com.sun.jndi.url.ldap.ldapURLContextFactory

而我们可以控制 lookup 函数的参数,使客户端访问提前设置好的恶意的 ldap服务链接来加载恶意的对象class 字节码文件来实例化,从而执行代码,完成利用。
该类并不存在任何黑/白名单对用户传入进行过滤,用户可直接传入ldap恶意链接执行命令。确定该处存在 jndi注入,可被利用导致命令执行

单步调试,回到activejdbc\src\main\java\org\javalite\activejdbc\DB.java#oepn,在第145行触发命令执行。
在这里插入图片描述

修复方式

厂商尚未提供漏洞修补方案,请关注厂商主页及时更新: https://javalite.io/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值