Shikata Ga Nai

Private? There is no such things.

安全でないデシリアライゼーションについてかいてみた

Hello there, ('ω')ノ

 

安全でないデシリアライゼーションを勘違いしていたのでまとめておくことに。

 

コンピュータサイエンスでは、オブジェクトはデータ構造で。

つまり、データを構造化する方法で。

いくつかの主要な概念をわかりやすくすると。

 

 シリアル化のプロセスは、オブジェクトをバイト文字列に変換して。

 逆シリアル化のプロセスは、バイト文字列をオブジェクトに変換して。


攻撃シナリオの例は、以下のとおりで。

 

シナリオ#1:

攻撃者は「R00」Javaオブジェクトシグネチャに気づいて。

Java Serial Killerを使って、アプリケーションサーバでリモートコードを実行して。

 

シナリオ#2:

下記のようにPHPオブジェクトのシリアル化を使用して。

ユーザID、ロール、パスワードハッシュなどを含む「super」Cookieを保存して。

 

a:4:{i:0;i:132;i:1;s:7:"Mallory";i:2;s:4:"user";

i:3;s:32:"b6a8b3bea87fe0e05022f8f3c88bc960";}

攻撃者は、下記のようにシリアライズされたオブジェクトを変更して。

管理者権限を付与したりと。

 

a:4:{i:0;i:1;i:1;s:5:"Alice";i:2;s:5:"admin";

i:3;s:32:"b6a8b3bea87fe0e05022f8f3c88bc960";}

 

ということで、脆弱性の有無の確定は難しいので。

とりあえずは、緑文字をリクエストで検索して。

ヒットしたら内容を確認して。

脆弱性の可能性を示唆する程度でよろしいのかと。

 

Burp Suiteの拡張機能で、Java Deserialization Scannerは活用したいなあと。

 

f:id:ThisIsOne:20200924164446p:plain

 

Best regards, (^^ゞ