Skip to content

新チャレンジ: User Enumeration via Error Messages (CWE-204) #10

Description

@exe-dev-github-integration

概要

ログイン失敗時に「メールアドレスが存在しません」と「パスワードが違います」を区別する脆弱版を注入。攻撃者が有効なメールアドレスを特定可能。

詳細

項目
slug enumeration_error
カテゴリ Authentication
難易度 Easy
CWE CWE-204

安全版(現在の実装)

flash.now[:alert] = "メールアドレスまたはパスワードが正しくありません。"

ユーザーが存在しない場合もパスワードが違う場合も同じメッセージ。

脆弱版(注入する実装)

def create
  user = User.find_by(email: params[:email]&.downcase)
  unless user
    flash.now[:alert] = "このメールアドレスは登録されていません。"
    return render :new, status: :unprocessable_entity
  end
  if user.authenticate(params[:password])
    reset_session
    session[:user_id] = user.id
    redirect_to tasks_path
  else
    flash.now[:alert] = "パスワードが正しくありません。"
    render :new, status: :unprocessable_entity
  end
end

テスト方針

  • SAFE: 存在しないメールでもパスワード間違いでも同じエラーメッセージ
  • VULN: 存在しないメール → 「登録されていません」、パスワード間違い → 「パスワードが正しくありません」と区別される

注入方式

Module#prependSessionsController#create を上書き

参考

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions