うつろい EC のプロフィール更新 API PATCH /api/profile は、リクエストボディの全フィールドをモデルに代入する Mass Assignment 実装。本来は display_name と bio だけを更新するつもりだったが、フィールドホワイトリストが無い。
攻撃者が JSON に "role": "admin" を追加して送ると、自分のロールを管理者に書き換えられる。これが Mass Assignment 脆弱性の典型。
うつろい EC のプロフィール更新 API PATCH /api/profile は、リクエストボディの全フィールドをモデルに代入する Mass Assignment 実装。本来は display_name と bio だけを更新するつもりだったが、フィールドホワイトリストが無い。
攻撃者が JSON に "role": "admin" を追加して送ると、自分のロールを管理者に書き換えられる。これが Mass Assignment 脆弱性の典型。
自分のプロフィールを更新する API リクエストに role フィールドを追加して送信し、自分を管理者に昇格させてください。
下のリクエストボディ(JSON)を編集して送信できます。
(まだ送信していません)
// Rails 風 @user.update(params[:user]) // ↑ params の全フィールドをモデルに代入 // role / is_admin / balance なども含めて // Laravel - $fillable または $guarded を設定し忘れ $user->update($request->all()); // Express + Mongoose User.findByIdAndUpdate(req.user.id, req.body);
JSON に "role": "admin" を追加:
{
"display_name": "美穂のスキンケアブログ",
"bio": "化粧水とクレンジングが好きです",
"role": "admin"
}
送信すると、サーバは role も含めて全フィールドを更新。あなたのロールが admin に変わります。