Anima jndi注入漏洞分析

Anima JNDI注入漏洞分析

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

项目介绍

Anima是一个提供数据库操作功能的组件,例如SQL和Stream。简单的DSL语法,支持多种数据库,与Java8集成良好,支持多种关系映射。

简单的DSL
H2、MySQL、SQLite、PostgreSQL、Oracle、SqlServer
主页支持
配置灵活
连接池支持
支持LocalDate、LocalDateTime
支持lambda表达式
关系 ( hasOne、hasMany、belongsTo)
SQL 性能统计
基于Java8

项目地址

https://github.com/hellokaton/anima

漏洞概述

Anima存在JNDI注入漏洞,该漏洞源于Anima提供一个实例Sql2o负责为数据库或数据源指定 jdbc-url、用户名和密码。并且允许根据用户给定的数据源创建到远程数据库的 jdbc 连接。当用户实例化Sql2o时,未对传入参数进行合法性校验,用户可直接传入ldap恶意链接执行命令。

影响版本

Anima <= v0.3.1

基本用法

Examples
在这里插入图片描述
在这里插入图片描述

漏洞分析

Anima提供一个实例Sql2o(src\main\java\org\sql2o\Sql2o.java)负责为数据库或数据源指定 jdbc-url、用户名和密码。Sql2o实例允许根据用户给定的数据源创建到远程数据库的 jdbc 连接。当用户实例化Sql2o时,未对传入数据源参数进行校验,因此存在JNDI注入漏洞。
在这里插入图片描述

该项目无web界面,因此需要再官方提供的Test类进行漏洞复现:
src\test\java\org\sql2o\QueryTest.java#testCreateQueryWithKeyNames

在这里插入图片描述

该漏洞需要使用 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)
终端开启监听:
在这里插入图片描述

传入dataSource,debug调试代码:
在这里插入图片描述

传入Sql2o
在这里插入图片描述

跟进JndiDataSource.getJndiDatasource(jndiLookup),getJndiDatasource方法获取用户传入的 jndiLookup进行查找,但并未对内容进行校验
在这里插入图片描述

看一下 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注入,可被利用导致命令执行

在这里插入图片描述

修复方式

目前厂商暂未发布修复方案。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值