
cve-2022-34169 から派生した Jdk Xalan のペイロード自動生成ツール。異なる Jdk に応じて対応する xslt ファイルを生成します。
これは、CVE-2022-34169脆弱性を基にした、JDK Xalanオーバーフロー脆弱性のペイロードを自動生成するツールです。JDKのバージョンによって必要なオーバーフローペイロードが異なることが判明したため、この自動生成ツールが誕生しました。異なるバージョンのJDKでこのプロジェクトを実行するだけで、それぞれのバージョンに適したXSLT悪用ファイルを生成できます。
select.bak.xslt を select.xslt にコピーし、実行したいコマンドを編集します。

その後、java -jar AutoGenerateXalanPayload.jar を実行します。実行中にいくつかのエラーが出力されますが、無視して構いません。プログラムが完了すると、select.xslt が、そのJDKバージョンに対応するXalanオーバーフローコマンド実行用ペイロードになります。

https://mp.weixin.qq.com/s/xxAtjFvk9RxWiY-pwGf8Ow
JDKのマイナーバージョンが非常に多いため、二分法を用いてJDK 1.6~1.8のバージョンを比較しました。例として1.7系をテストする場合、まずJDK 1.7の最上位マイナーバージョンをテストしてXSLTを取得し、その内容をタイプAとします。次にJDK 1.7の最下位マイナーバージョンをテストしてXSLTを取得し、それが最上位バージョンと全く同じであれば、JDK 1.7の最下位から最上位まで全て同じタイプAのペイロードが使えることを意味します。もし異なる場合は、次に中間バージョンをテストし、この二分法を繰り返します。これが最も高速なテスト方法であり、全てのバージョンをインストールしなくても全範囲をカバーできます。例えば、以下のテスト結果では、Jdk-8u301がタイプA、Jdk-8u202もタイプAです。では、その中間であるJdk-8u221がタイプBになることは考えにくいでしょう。
以下が私がテストして得た成果で、JDK 1.6から1.8の間に6種類のペイロードが存在することが分かりました。
https://blog.noah.360.net/xalan-j-integer-truncation-reproduce-cve-2022-34169/
| JDKバージョン | xslsタイプ |
|---|
| Jdk-8u301 | A |
| Jdk-8u202 | A |
| Jdk-8u162 | A |
| Jdk8u152 | A |
| Jdk8u151 | B |
| Jdk8u144 | B |
| Jdk8u131 | B |
| Jdk8u121 | C |
| Jdk8u111 | C |
| Jdk8u102 | D |
| Jdk8u101 | D |
| Jdk8u91 | D |
| Jdk8u60 | D |
| Jdk8u20 | D |
| Jdk7u40 | D |
| Jdk7u21 | D |
| Jdk7u10 | D |
| Jdk7u05 | D |
| Jdk7u04 | D |
| Jdk7u03 | E |
| Idk7u02 | E |
| Jdk7u0 | E |
| Jdk6u45 | E |
| Jdk6u20 | E |
| Jdk6u17 | F |
| Jdk6u15 | F |
| Jdk6u10 | F |
| Jdk6u0 | F |