ApacheShiroの逆シリアル化の脆弱性[org.apache.shiro.web.mgt.CookieRememberMeManager]

ApacheShiroの逆シリアル化の脆弱性

2021-02-06 02:34:09,886 [http-bio-8000-exec-18]警告[org.apache.shiro.mgt.DefaultSecurityManager]-タイプ[org.apache.shiro.web.mgtのRememberMeManagerインスタンスを委任します。 CookieRememberMeManager]はgetRememberedPrincipals()中に例外をスローしました。
org.apache.shiro.io.SerializationException:引数バイト配列を逆シリアル化できません。
    org.apache.shiro.io.DefaultSerializer.deserialize(DefaultSerializer.java:82)
    でorg.apache.shiro.mgt.AbstractRememberMeManager.deserialize(AbstractRememberMeManager.java:514)で

 

1)Apache Shiroフレームワークはrememberme機能(RememberMe)を提供します。ユーザーが正常にログインすると、暗号化およびエンコードされたCookieが生成されます。CookieのキーはRememberMeであり、Cookieの値は、関連情報をシリアル化し、aesを使用して暗号化し、最後にbase64エンコーディングを使用することによって形成されます。
サーバーでCookie値を受信すると、次の手順に従って分析および処理され
ます。1。RememberMeCookieの値を取得します
。2。Base64デコード
3.AES復号化を使用します(暗号化キーはハードコーディングされています)
4。シリアル化します(フィルタリングなし)対処)

デシリアライズを呼び出すときにフィルタリングは実行されないため、リモートでコードが実行される脆弱性が発生する可能性があります。

これは、shiroがデフォルトでCookieRememberMeManagerを使用することを意味し、Cookieを処理するプロセスは次のとおりです。rememberMe>>> Base64デコード>>> AES復号化>>>逆シリアル化のCookie値を取得します。ただし、AESキーはハードコードされているため、RCEの脆弱性が発生し、攻撃者が悪意のあるデータを作成して逆シリアル化を引き起こす可能性があります。

2)Apache Shiroは公開AESキーを使用して送信を暗号化します。デフォルトのAESキーを使用するサーバーは逆シリアル化攻撃に対して脆弱であり、攻撃者はサーバー上で任意のコードを実行できます。Apache Shiroは、深刻な逆シリアル化の脆弱性がある1.2.4より前のバージョンでAESハードコードされた秘密鍵を使用します。攻撃者はリモートホストで任意のコマンドを実行できます。Shiroのバージョン情報を確認することをお勧めします。<= 1.2.4の場合は1.2.5以降にアップグレードします。

3)、キーをカスタマイズしてデフォルトを置き換えて回避することもできます。生成されるキーコードは次のとおりです。

 
  1. //密钥生成java代码(直接拷贝到main允许即可)

  2. KeyGenerator keygen = KeyGenerator.getInstance("AES");

  3. SecretKey deskey = keygen.generateKey();

  4. System.out.println(Base64.encodeToString(deskey.getEncoded()));

おすすめ

転載: blog.csdn.net/zhaofuqiangmycomm/article/details/113710254