utsuroi access control labs Lab 02 / 5 — Practitioner
02

管理画面への直接アクセス — 縦の認可不備

Vertical privilege escalation by direct URL access

うつろい EC には管理者専用ページがある。一般会員のマイページには「管理画面」へのリンクは表示されないが、URL を直接入力してアクセスすると…?

開発者は「画面にリンクが無いから一般ユーザは到達しない」と考えていた。しかし、攻撃者は推測やソースコード閲覧で URL を発見できる。サーバ側で「管理者か」のチェックがされていないため、URL を知っているだけで管理画面にアクセス可能。

管理画面の URL を発見し、一般会員のセッションでアクセスして全顧客一覧を取得してください。

ヒント:推測してみる候補 → /admin · /admin/users · /admin/orders · /admin/dashboard
⬅ ➡ [一般会員 user_a としてログイン中]

ページを読み込んでください

脆弱なルーティング(認可チェックなし)
// PHP - 管理画面ルート
Route::get('/admin/users', function () {
    // ★ 認証チェックはあるが認可チェックがない
    if (!is_logged_in()) {
        redirect('/login');
    }
    return view('admin.users', ['users' => User::all()]);
});

「画面にリンクが無いから安全」というのは思い込み。攻撃者は次の方法で URL を発見します:JavaScript ファイルの解析、開発者ツール、URL 推測、過去のリーク情報、外部サービスの参照(Wayback Machine 等)。

正解(ネタバレ)

URL に /admin/users または /admin/dashboard を入力すると、管理画面に到達できます。

このパターンは「Forced Browsing」「Direct URL Access」とも呼ばれ、OWASP Top 10 の代表的なシナリオ。実環境では大きな企業でも頻繁に発見されます(認可ライブラリの設定漏れ、リファクタリング時の認可チェック削除等)。