Spring 4 shell:リモートのリモートコード実行の脆弱性


クラスローダ操作による認証されていないRCE



Unsplashの上でエミールペロンによる写真
Spring Frameworkにおける重要なゼロ・デイの脆弱性は、春の保守担当者VMwareに最近報告されました.脆弱性は、Spring MVCとSpring Webfluxアプリケーションに影響を及ぼす認証されていないリモートコード実行脆弱性です.ここではCVEを見つけることができます.https://tanzu.vmware.com/security/cve-2022-22965 .

影響は?


Spring 4 shell RCE脆弱性は、攻撃者にJDK 9 +を使用して、5.3.18または5.2.20より前のSpring Frameworkを使用してアプリケーションでコードを実行できます.加えて、アプリケーションは要求されたパラメタを明白な古いJavaオブジェクト(POJO)に写像する必要があります.最後に、現在利用可能なPOCSはApache Tomcatサーバー上での戦争配備にのみ動作します.
これらの緩和要因のため、Spring 4 shellの脆弱性は、我々が12月に遭遇したLog 4 Shellの脆弱性の広範囲にわたる影響を持つと予想されません.しかし、物事は変化することができます、そして、脆弱性を利用するより多くの方法は将来見つかるかもしれません.そして、この脆弱性は春アプリケーションの大部分に影響を与えないかもしれませんが、その影響は脆弱なアプリケーションのために壊滅的です.

どのように、攻撃は働きますか?


Webアプリケーションはしばしばリクエストからユーザーデータを取り込む方法を必要とし、アプリケーションが動作できる形式にマップする.Springの要求マッピング機能は開発者に要求パラメータをマップする簡単な方法を提供します.リクエストパラメータをJavaデータ型にマッピングする方法が異なり、そのうちの1つはリクエストパラメータをJavaオブジェクトにマップすることです.
@Controller 
public class ExampleController {

    @RequestMapping("/signin")
    public String accountHandler(Account account) {
        return "You have signed in!";
    }

}
このコードは、ActiveControllerという名前のコントローラを指定します.エンドポイント/signinへのリクエストを処理し、エンドポイントはリクエストパラメータとしてアカウントと呼ばれるパラメータを取る必要があります.アカウントリクエストパラメータはアカウントオブジェクトにマップされます.さて、リクエストをWebサービスに送信するなら、
http://example.com/signin?name=test
サービスは、リクエストフィールドを、名前フィールドを設定したアカウントオブジェクトにマッピングします.これは便利な機能ですが、セキュリティ問題も紹介します.攻撃者が別のJavaオブジェクトを含んでいるリクエストパラメタを送るならば、春は適切なオブジェクトタイプに写像しようとします.リクエストパラメータがこのようにJavaオブジェクトにバインドされると、攻撃者はリクエストハンドラーを使用してclass object . そして、そこから、攻撃者はクラスの特性を通して他の貴重なオブジェクトタイプにアクセスすることができます.
攻撃者は任意のコマンドの実行につながることができる正しいクラスのオブジェクトにアクセスすることでRCEを達成することができます.そこから、爆発の可能性は無限大です.たとえば、攻撃者はウェブシェルをサーバに書き込み、マシン上でRCEを達成できます.もともと脆弱性は不安定な逆シリアル化であると考えましたが、代わりにこのApache Strutsの脆弱性に似たクラスインジェクション問題です.https://nvd.nist.gov/vuln/detail/cve-2014-0094 .

どのように、私はこの問題を取り直しますか?


春は今問題に影響されない新しいバージョンがあります.ここでリリースを見つけることができます.https://spring.io/blog/category/releases . あなたがアップグレードすることができるならば、あなたのアプリケーションは脆弱性から安全です.Spring Framework 5.3のユーザー.Xは5.3.18 +、5.2のユーザにアップグレードしなければなりません.Xは5.2.20 +にアップグレードします.スプリングブートを使用する場合、バージョン2.5.12と2.6.6は安全なスプリングバージョンに依存します.
あなたが春をアップグレードすることができないならば、あなたは攻撃ベクトルを閉じるでしょう.
  • Tomcatは攻撃ベクトルをシャットダウンした新しいバージョンをリリースしましたので、Tomcatバージョン10.0.20、9.0.62、8.5.78にアップグレードできます.
  • exploitはJDK 9 +を必要とするので、Java 8への格下げもオプションです.
  • しかしながら、この脆弱性を利用する追加の方法が発見されるかもしれないので、スプリングをアップグレードすることは最善の行動方針です.アプリケーションログに目を離さないでください、そして、どんな変わった活動のためにでも彼らをチェックしてください.
    春の公式発表を見てくださいhttps://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement ) 緩和オプションとそれらのトレードオフのより詳細な議論のために.
    このような一般的な依存関係で見つかるゼロ日は、あなたの依存関係を更新して、あなたのソフトウェアサプライチェーンを安全にしておく必要性をハイライトします.ShiftLeftコアを使用できます.https://www.shiftleft.io/ ) あなたが依存関係の脆弱なバージョンを使用しているコードの一部を識別し、影響を受けるライブラリが信頼できないソースから到達可能かどうかを確認するためにIntelligent SCA .