
JDK 9+ で実行される Spring MVC または Spring WebFlux アプリケーションは、データバインディングを介したリモートコード実行 (RCE) に対して脆弱である可能性があります。この特定のエクスプロイトには、アプリケーションが WAR デプロイメントとして Tomcat 上で実行されている必要があります。アプリケーションが Spring Boot 実行可能 jar としてデプロイされている場合、つまりデフォルトの構成の場合、このエクスプロイトに対して脆弱ではありません。ただし、この脆弱性の性質はより一般的であり、他の方法で悪用される可能性があります。
CVE-2022-22965(Spring4Shell、SpringShell)は、Spring Framework における脆弱性で、データバインディング機能を利用して、HTTP リクエスト内に格納されたデータをアプリケーションが使用する特定のオブジェクトにバインドするものです。このバグは getCachedIntrospectionResults メソッドに存在し、HTTP リクエストを介してクラス名を渡すことで、こうしたオブジェクトへの不正アクセスを可能にします。特殊なオブジェクトクラスが使用された場合、データ漏えいやリモートコード実行のリスクを生み出します。この脆弱性は、長らく修正済みの CVE-2010-1622 に類似しており、その際にはクラス名が classLoader や protectionDomain と一致しないように、クラス名チェックが修正として追加されました。
CVSSv3 システムによると、 CRITICAL の深刻度と評価されます。
以下は CVE-2022-22965 の検出機会であり、脆弱性の特定に使用できます。
脆弱性が発生する現在の条件(Spring による脆弱性の発表に記載されているもの)は次のようにまとめられます:
python3 exploit.py http://10.10.10.10/
注意: 末尾のスラッシュはここでは非常に重要です!
問い合わせフォームの「action」を探します(私たちが利用できる唯一の POST リクエストです)。
<form id="contactForm" action="/" method="post">
action は「/」なので、ターゲット URL は単純に次のようになります: http://10.10.10.10/