
Log4Shell/CVE-2021-44228を探してここに来た場合は、攻撃ベクトルと影響を受けるJavaランタイムバージョンについて読むとよいでしょう: https://mbechler.github.io/2021/12/10/PSA_Log4Shell_JNDI_Injection/
Chris Frohoff氏とGarbriel Lawrence氏がJavaオブジェクトデシリアライゼーションの脆弱性に関する研究を発表してから2年以上が経過しました。この研究は、最終的にJavaの歴史における最大のリモートコード実行バグの波と評されるものをもたらしました。
この問題に関する調査は、これらの脆弱性がJavaシリアライゼーションやXStreamほど表現力豊かなメカニズムに限ったものではなく、他のメカニズムにも適用できる可能性があることを示しました。
本論文は、攻撃者が提供する任意の型のアンマーシャリングを可能にする(または可能にしていた)さまざまなJavaオープンソースマーシャリングライブラリの分析と、その悪用の詳細を提示し、このプロセスがどのように実行され、どのような暗黙の制約があるかにかかわらず、同様の悪用手法に対して脆弱であることを示します。
完全な論文は marshalsec.pdf にあります。
すべての情報とコードは、教育目的および/またはこれらの脆弱性について自身のシステムをテストする目的でのみ提供されています。
Java 8が必要です。Mavenを使用してビルドします mvn clean package -DskipTests。次のように実行します。
java -cp target/marshalsec-[VERSION]-SNAPSHOT-all.jar marshalsec.<Marshaller> [-a] [-v] [-t] [<gadget_type> [<arguments...>]]
ここで
以下のマーシャラー向けのペイロードジェネレータが含まれています:
前提条件はありません。
前提条件:
ロードするサービスは、現在 javax.script.ScriptEngineFactory にハードコードされています。
前提条件:
前提条件:
java -cp target/marshalsec-[VERSION]-SNAPSHOT-all.jar marshalsec.jndi.(LDAP|RMI)RefServer <codebase>#<class> [<port>]
テストを実行する際の引数を制御するシステムプロパティがいくつかあります(maven経由または -a 使用時)。
テストは、システムコマンドの実行とリモートコードベースからのコード実行をチェックするSecurityManagerをインストールした状態で実行されます。 これが機能するには、使用中のロード済みクラスが何らかのセキュリティマネージャチェックをトリガーする必要があります。
| Marshaller | Gadget Impact |
|---|
| BlazeDSAMF(0|3|X) | JDKのみでJavaシリアライゼーションへ昇格 さまざまなサードパーティライブラリのRCE |
| Hessian|Burlap | さまざまなサードパーティのRCE |
| Castor | 依存ライブラリのRCE |
| Jackson | JDKのみでRCEの可能性、さまざまなサードパーティのRCE |
| Java | また別のサードパーティのRCE |
| JsonIO | JDKのみのRCE |
| JYAML | JDKのみのRCE |
| Kryo | サードパーティのRCE |
| KryoAltStrategy | JDKのみのRCE |
| Red5AMF(0|3) | JDKのみのRCE |
| SnakeYAML | JDKのみのRCE |
| XStream | JDKのみのRCE |
| YAMLBeans | サードパーティのRCE |