マス・アサインメント脆弱性は、プログラミング言語の持つ機能である一括代入(マス・アサインメント;Mass Assignment)を濫用することにより起きる脆弱性です。
一括代入(マス・アサインメント;Mass Assignment)というのは、複数のデータを内部に持つ「オブジェクト」の値を一括してコピーする機能です。例えば、「ユーザー」というオブジェクトには「姓」「名」「住所」があるとしたら、ユーザーAをユーザーBに「代入」すると、ユーザーBはユーザーAの「姓」「名」「住所」をそれぞれコピーした値を持つようになります。
この便利な機能は、Webアプリケーションフレームワーク(多くのWebアプリケーションを作成する仕組み)で活用されています。例えば、このユーザー情報を入力するフォームがあったとき、Webブラウザからはサーバー側に、これら3つの値を持つ「POSTリクエスト」が送信されます。WebアプリケーションフレームワークはこのPOSTリクエストを受けて、プログラムで指定されたオブジェクト変数に値を一括代入します。これによって、POSTリクエストから値を取り出して、一つ一つ個別に管理するという手間が省けます。
しかし、「ユーザー」オブジェクトにもう一つ、「管理者かどうか」を示す値が入っている場合はどうでしょう。これが真なら当該のユーザーは管理者機能を利用することができ、偽なら利用できない、という意味の値です。ここで、ユーザー情報を入力するフォームは変わらず「姓」「名」「住所」を入力値として取るようにします。Webアプリケーションフレームワークが提供する一括代入の仕組みでは、入力値に存在しない値は上書きされないため、このフォームによるPOSTリクエストでは「管理者かどうか」の値は書き換わりません。一見、うまくいっているように見えますね。
ところが、悪意のある攻撃者はブラウザの開発者モードなどを用いて、フォームの実装に関わらず、POSTリクエストを改ざんして発行できます。ですので、攻撃者が「管理者かどうか」の値を差し込むことは容易に行えるのです。これによって、管理者権限を持っていない攻撃者が、自分のアカウントを管理者として扱わせることができてしまいます。
これがマス・アサインメント脆弱性です。
マス・アサインメント脆弱性はよく知られた脆弱性であるため、その対策も複数用意されています。二つをご紹介します。
お見積り・ご相談など、お気軽にご相談ください
サイトTOPへ