コンテンツへスキップ
vivisec|WordPressとWebセキュリティの考察ログ
  • Home
  • About
  • Portfolio
  • Contact

vivisec Home › WSAラボ解説(WP視点)

WordPressで考えるPassword reset broken logic|パスワードリセットトークンが検証されない脆弱性

2026-03-282026-03-03 vivisec
WordPressで考えるPassword reset broken logic|パスワードリセットトークンが検証されない脆弱性

今回はWeb Security Academyの「Password reset broken logic」ラボをもとに、パスワードリセット機能の設計ミスについて解説します。

パスワードリセットは、ほとんどのWebサービスにある便利な機能です。

しかし設計を間違えると、

  • 他人のパスワードを勝手に変更できる
  • メール認証をスキップできる

といった非常に危険な状態になります。

この記事ではこのラボをもとに、

  • 何が起きるのか
  • なぜ起きるのか
  • WordPressサイトならどうなるのか

を初心者向けに整理します。


INDEX
  • Password reset broken logicラボの概要
  • Password reset broken logicの攻撃の流れ
  • なぜパスワードリセットトークンが無視されるのか
  • Password reset broken logicの意味
  • なぜこれはビジネスロジック脆弱性なのか
  • WordPressサイトで起きた場合の具体例
  • WordPressでの対策ポイント
  • 設計視点で見ると何が問題だったのか
  • パスワードリセット機能の設計チェックリスト
  • パスワードリセット機能の診断チェックポイント
  • まとめ|パスワードリセット機能の設計ミスは重大な脆弱性
  • よくある疑問

Password reset broken logicラボの概要

このラボでは、パスワードリセット機能にロジックの欠陥があります。

本来パスワードリセットは次の流れになります。

  1. ユーザーが「パスワードを忘れた」をクリック
  2. 登録メールにリセットリンクが送信される
  3. リンクに含まれるトークンを確認
  4. 新しいパスワードを設定

しかしこのサイトでは、リセットトークンの確認が行われていません。

その結果、任意のユーザーのパスワードを変更できてしまいます。


Password reset broken logicの攻撃の流れ

このラボでは次の手順で攻撃が成立します。

  1. 自分のアカウントでパスワードリセットを実行
  2. メールのリセットリンクを確認
  3. Burpでパスワード変更リクエストを確認
  4. リセットトークンを削除
  5. username を carlosに変更
  6. パスワードを変更
  7. Carlosのアカウントにログインできる

【攻撃の流れ】

パスワードリセット申請
↓
メールにリセットリンク送信
↓
新しいパスワード送信リクエスト
↓
トークン未検証
↓
別ユーザーのパスワード変更成功

この図のポイントは、メール認証のはずなのに、実際には確認していないという点です。


なぜパスワードリセットトークンが無視されるのか

この脆弱性の原因はとてもシンプルです。

トークンを検証していないという設計ミスです。

パスワードリセットでは通常、

  • トークン
  • ユーザー
  • 有効期限

などをサーバー側でチェックします。

しかしこのサイトでは、POSTリクエストに含まれる username をそのまま信用しています。

つまり、

  • リセットメール
  • トークン
  • 本人確認

これらが完全に意味を失っている状態です。


Password reset broken logicの意味

ラボ名の「Password reset broken logic」は次の意味です。

  • Password reset:パスワードリセット機能
  • broken logic:ロジック(設計)が壊れている

つまりこのラボは、「パスワードリセット機能の設計ミス」をテーマにしています。


なぜこれはビジネスロジック脆弱性なのか

この問題はSQLインジェクションやXSSのようなプログラムのバグではありません。

原因は、機能の設計ミスです。

システムとしては正常に動いています。

しかし、

  • 誰のパスワードを変更するか
  • トークンを確認するか

という業務ロジック(ビジネスロジック) が壊れています。

そのためこれは、ビジネスロジック脆弱性に分類されます。


WordPressサイトで起きた場合の具体例

WordPressでもパスワードリセット機能があります。

もし同じ設計ミスがあると、次のような状態になります。

【WordPressで起きる攻撃の流れ】

ユーザーが「パスワードを忘れた」をクリック
↓
リセットメール送信
↓
新しいパスワード設定フォーム
↓
usernameを書き換え
↓
他ユーザーのパスワード変更

この場合、攻撃者は、

  • 管理者
  • 編集者
  • 会員サイトのユーザー

などのアカウントを乗っ取れます。

例えば会員サイトなら、

  • 有料会員アカウント乗っ取り
  • 管理者権限の奪取
  • WooCommerce管理画面アクセス

などの被害につながります。


WordPressでの対策ポイント

WordPress本体はこのような設計にはなっていませんが、独自開発の機能やプラグインでは注意が必要です。

重要なポイントは次の通りです。

  • トークンを必ず検証する
  • トークンとユーザーを紐づける
  • トークンの有効期限を設定する
  • POSTのusernameを信用しない

特に危険なのは、「hidden input の username をそのまま使う設計」です。

これは多くの自作フォームで起きやすいミスです。


設計視点で見ると何が問題だったのか

このラボの本質は、認証の責任がどこにあるかという問題です。

本来、トークンの確認やユーザーの特定は、サーバー側が管理するべき情報です。

しかしこのサイトでは、クライアント(ブラウザ)の入力を信用しています。

その結果、ユーザーを書き換えるだけで他人のパスワード変更が可能になりました。


パスワードリセット機能の設計チェックリスト

パスワードリセット設計では、次の5点を必ず確認します。

  • トークンはサーバー側で検証しているか
  • トークンとユーザーが紐づいているか
  • トークンの有効期限があるか
  • username をリクエストから信用していないか
  • トークンを使ったあと無効化されるか

パスワードリセット機能の診断チェックポイント

パスワードリセット機能を診断するときは、次を確認します。

  • トークン無しでパスワード変更できないか
  • username を変更すると別ユーザーに影響しないか
  • トークンの有効期限があるか
  • トークンが使い回せないか

このあたりをBurpで確認すると、ロジックミスが見つかることがあります。


まとめ|パスワードリセット機能の設計ミスは重大な脆弱性

Password reset broken logicは、パスワードリセット機能の設計ミスを扱うラボです。

この脆弱性があると、

  • 他人のパスワード変更
  • アカウント乗っ取り
  • 管理者アクセス

など重大な被害につながります。

特に注意すべきポイントは、クライアントの入力を信用してしまう設計です。

パスワードリセットのような重要機能では、必ずサーバー側で本人確認を行うことが重要です。


よくある疑問

Q. パスワードリセットトークンとは何ですか?

メールに送られる 一時的な認証コードです。
本人確認のために使われます。

Q. トークンがなくても変更できることはありますか?

通常はありません。
もし可能なら重大な設計ミスです。

Q. WordPressでも起きますか?

WordPress本体では起きません。
ただし、自作機能やプラグインでは発生する可能性があります。

Q. なぜ username を変更できるのでしょうか?

多くのフォームでは、

<input type=”hidden” name=”username”>

のように送信されるためです。
サーバー側がこれを信用すると、攻撃が成立します。


【WSA × WordPressセキュリティ解説シリーズ】

  • WordPressで考える2段階認証の設計不備|2FA突破が成立する理由
  • WordPressで考えるデュアルユースエンドポイントの分離不備|パスワード変更が乗っ取られる理由
カテゴリー WSAラボ解説(WP視点)、ビジネスロジック脆弱性 タグ Web Security Academy、WordPress、アカウント乗っ取り、セキュリティ、パスワードリセット、ビジネスロジック脆弱性
IPアドレス制限に安心していた私が気づいたこと|WordPress運営の失敗と現実
WordPress公開直後にBotアクセス|favicon取得から分かるスキャンの特徴【Security Log #1】

プロフィール

vivisec

vivisec

営業リスト作成やWordPress記事の入稿代行・CSS等の調整をしています。
サイバーセキュリティ学習記録や実際のサーバーログを発信中。

▷ Aboutページ

おすすめ書籍【PR】

体系的に学ぶ 安全なWebアプリケーションの作り方 第2版(徳丸浩)

[体系的に学ぶ 安全なWebアプリケーションの作り方 第2版]
Webセキュリティを学ぶなら定番の一冊。
▷ Amazonで見る

セキュリティ関連リンク

▷ OWASP
▷ OWASP Top 10
▷ PortSwigger Web Security Academy
▷ TryHackMe
▷ CVE Details
▷ National Vulnerability Database

おすすめセキュリティツール【PR】

PCセキュリティ
▷ ESET公式サイト
VPN
▷ NordVPN

レンタルサーバー
▷ エックスサーバー

カテゴリ

  • WordPress
    • サーバー
  • Webセキュリティ
    • 企業サイト観察ログ
  • WordPressセキュリティ
    • WordPressログ観察
  • WSAラボ解説(WP視点)
    • ビジネスロジック脆弱性
    • SSRF
  • English
    • WordPress Security
      • WordPress Security Log

最近の投稿

  • WordPressエラーがそのまま表示されている企業サイトの実態
  • WordPressで考えるBlind SSRFとShellshock|見えない攻撃が内部サーバーに到達する仕組み
  • Search Consoleに攻撃者っぽい検索クエリが出た話|inurl:wp-adminの意味とリスク
  • エックスサーバー新サーバーに簡単移行したら爆速に|TTFB実測とブラウザキャッシュ無効での検証で分かったこと
  • URLがIPアドレスのまま公開されている企業サイトの実態|営業リスト作成で見つけた例外的なケース
  • プライバシーポリシー
  • 免責事項
© 2026 vivisec|WordPressとWebセキュリティの考察ログ • Built with GeneratePress