はじめに
API6:2019 Mass Assignment
脅威の発生元/攻撃経路 | セキュリティ上の弱点 | 影響 |
---|---|---|
本問題を十分に理解するには、使用されるロジックやオブジェクトを広く把握する必要があります。オブジェクトに気付いた際は記録し、アプリの論理も同様にメモを取ることが重要です。特に、オブジェクトのプロパティに注意を払ってください。 | 近年のアプリは、フレームワークを活用してフロントエンドのオブジェクトを自動で変数に結び付けています。これにより開発時間の短縮が図られますが、攻撃者は編集権限のない変数(例:"isAdmin: false > isAdmin:true")を更新するためにこれを利用する可能性があります。 | 影響は編集されたオブジェクトのプロパティに依存します。例えば、利用者自身のisAdminプロパティを変更して管理者権限を取得できれば、製品の在庫数を編集されるよりも深刻な問題となります。この脆弱性は影響範囲が広いことが特徴です。 |
最近のアプリは、オブジェクト(例:ユーザ、プロダクト等)に依存しており、これらのオブジェクトは各プロパティ(例:product.stock)を持っております。利用者は、特定のプロパティの編集や閲覧が許可される一方で、編集や閲覧できないプロパティも存在します(例:ユーザはproduct.stockを閲覧できても、編集はできません)。これらのプロパティはフロントエンドのパラメータと対応付けられており、変換が自動で行われる場合、攻撃者がアクセスすべきではないプロパティにパラメータが変換される可能性があります(例:ユーザがPUTリクエストを送った際、フロントエンドがパラメータ "title" をproduct.titleに変換してしまうことがあります)。
こちらは、利用者が編集してはならないその他のプロパティの例です:
これらの攻撃シナリオは、バグバウンティハンターとしての個人的な経験に基づいております。この問題は見逃しやすく、必要な論理知識が要求されるため自動化して検出することが難しい点が特徴です。
最初の例は、1時間の予約が可能なアプリからのものです。UI上で1時間のタイムスロットが表示され、その中から一つを選択することができます。
リクエストを確認していたものの、最初は気付かず、認識するまでに約1時間を要しました:
{
"startDate":"29/04/2022 11:00",
"endDate":"29/04/2022 12:00",
"userID":"123",
"consultant ID":"123"
}
開始日または終了日を変更することで、希望次第ではコンサルタントの予定を何年も埋め尽くすことが可能です。見逃しやすい点が、この問題の巧妙なところです。
{
"startDate":"29/04/2022 11:00",
"endDate":"29/04/2099 12:00",
"userID":"123",
"consultant ID":"123"
}
次の例は、ハッキングの際にアカウント設定を確認し、APIレスポンス内に本来編集できないプロパティが含まれていないかを探すというものです。例えば、自社の管理者権限を獲得するための手段ですが、これはさらに微妙なバグに該当します。
Request:
{
"endDate":"29/04/2099 12:00",
"userID":"123",
"consultant ID":"123"
}
Response from API:
{
"AccountType":"airport",
"endDate":"29/04/2099 12:00",
"userID":"123",
"consultantID":"123"
}
このレスポンスには、リクエストには含まれていない2種類のアカウントタイプが存在しております。しかし、もしそのパラメータをコピーすれば、APIが自動的にオブジェクトへマッピングするため、変更可能となる恐れがあります。
Request:
{
"endDate":"29/04/2099 12:00",
"userID":"123",
"consultant ID":"123",
"AccountType":"airline",
}
Response from API:
{
"AccountType":"airline",
"endDate":"29/04/2099 12:00",
"userID":"123",
"consultant ID":"123"
}
もう一つの微妙な点は、アカウントタイプの変更自体が深刻な問題であることです。対象外とされる場合でも、公開資産であるウェブサイト(www.FAKEPAGE.com)を確認すると、一方のアカウントタイプは他方に比べてかなり高額なため、影響が大きくなることが判明いたしました。
ご覧の通り、各パラメータの機能について十分に検討し、その意味や選択肢を正しく理解することが重要です。API内の全プロパティを調査し、使用されていないものが本番環境へ送信され悪用されることがないよう注意してください。また、API保護もお忘れなく。Wallarmでは、数百万件のセーフティレポートに基づき2021年OWASP Top 10をまとめておりますので、ぜひご参照ください。
最新情報を購読