0x00 漏洞概述

2022年1月6日,研究人员公开披露了在 H2 数据库控制台中发现的类似 Log4Shell 的关键 RCE 漏洞,该漏洞追踪为CVE-2021-42392。

0x01 漏洞详情

H2是一个流行的开源Java SQL数据库,它提供了一个轻量级的内存解决方案,不需要将数据存储在磁盘上,这使得它成为各种项目的流行数据存储解决方案。

近日,JFrog 安全研究团队披露了H2 数据库控制台中的远程代码执行漏洞CVE-2021-42392,该漏洞与Apache Log4j RCE漏洞CVE-2021-44228漏洞的根本原因相同,即JNDI 远程类加载。

JNDI是Java Naming and DirectoryInterface的缩写,是指为Java应用程序提供命名和目录功能的API,它可以结合LDAP使用API来定位可能需要的特定资源。

由于H2数据库框架中的几个代码路径将未经过滤的攻击者控制的URL传递给javax.naming.Context.lookup函数,导致远程代码库加载(也称Java代码注入),最终造成未经身份验证的远程代码执行。

该漏洞影响 H2 数据库版本1.1.100(2008-10-14)到2.0.204(2021-12-21),并已在2022 年 1 月 5 日发布的版本 2.0.206 中修复。

H2 数据库被许多第三方框架使用,如Spring Boot、Play Framework 和 JHipster等。虽然CVE-2021-42392不像CVE-2021-44228那样普遍,但如果不及时修复,它仍然会对开发人员和生产系统产生巨大影响。

0x02 风险等级

高危。

0x03 影响范围

1.1.100<=H2 Console<=2.0.204< p="">

0x04 安全建议

目前此漏洞已经修复,建议所有 H2 数据库用户升级到版本 2.0.206,即使不直接使用 H2 控制台。

下载链接:

https://github.com/h2database/h2database/releases/tag/version-2.0.206

缓解措施

对于目前无法升级H2的用户,可以选择使用以下缓解方案:

1.与CVE-2021-44228漏洞类似,较新版本的Java包含trustURLCodebase缓解措施,不允许通过JNDI加载远程代码库。用户可以升级Java(JRE/JDK)版本以启用该缓解措施,在以下 Java 版本(或更高版本)上默认启用此缓解措施(但此方法也可能被绕过):

  • 6u211

  • 7u201

  • 8u191

  • 11.0.1

2.当H2 console Servlet部署在Web 服务器上时(不使用独立的 H2 Web 服务器),可以添加一个安全约束,仅允许特定用户访问控制台页面。

注:H2 Console默认不接受远程连接。如果明确启用了远程访问并且未设置某些保护方法(如安全约束),则攻击者可以加载自己的自定义类并在具有H2 Console的进程( H2 Server process 或具有 H2 Console servlet 的 Web 服务器)中执行其代码。

也可以通过在这些版本中创建链接表来加载它们,但这需要ADMIN权限,并且具有ADMIN权限的用户在设计上可以完全访问 Java 进程。因此这些权限不应授予不受信任的用户。

0x05 参考链接

https://jfrog.com/blog/the-jndi-strikes-back-unauthenticated-rce-in-h2-database-console/

https://thehackernews.com/2022/01/log4shell-like-critical-rce-flaw.html

http://securityaffairs.co/wordpress/126460/security/unauthenticated-rce-h2-database.html

声明:本文来自维他命安全,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。