
CVE-2026-77818 - نظام أتمتة المكتبات Yordam - حقن HTML منعكس في ثلاث نقاط منفصلة، والاستيلاء على إجراء النموذج وسرقة بيانات الاعتماد (CWE-79)
CVE-2026-77818 · CVSS 3.1 6.1 (متوسط) · رئاسة الأمن السيبراني · النشر 2026-09-04 · TR-26-1011
الحالة: تم إصلاح الثغرات في الإصدار v22.2. يجب ترقية التثبيتات المتأثرة إلى v22.2 أو أحدث.
نظام أتمتة المكتبات يوردام هو برنامج تجاري لأتمتة المكتبات والفهرس المفتوح عبر الإنترنت (OPAC)، يُستخدم على نطاق واسع في مكتبات الجامعات والعامة والمؤسسات في تركيا. التثبيت محلي (on-premise)؛ حيث يعمل لكل عميل نسخة منفصلة داخل مؤسسته.
في الإصدار v22.1 من المنتج، توجد ثغرات حقن HTML منعكسة في ثلاث نقاط منفصلة ومستقلة. جميعها لا تتطلب مصادقة، وجميعها تُستغل عبر رابط واحد.
| # | النقطة | السبب الجذري |
|---|
| 1 | صفحة تسجيل الدخول، معامل devam | لا يتم تطبيق أي تهريب (escaping) |
| 2 | خاصية value لحقل النموذج المخفي | فك ترميز URL للمرة الثانية بعد التهريب |
| 3 | خاصية name لحقل النموذج المخفي | التهريب يُطبق على القيمة فقط، وليس على الاسم |
نظرًا لأن النقاط الثلاث تقع في نفس الإصدار من نفس المنتج ومن نفس فئة الثغرات، فقد تم جمعها تحت إشعار واحد ونشرها تحت معرّف CVE واحد. من حيث التأثير، النقطة رقم 1 هي الأشد خطورة.
devamهذه هي النقطة الأكثر حرجًا. نقطة الحقن تقع مباشرة في وسم HTML الخاص بنموذج المصادقة نفسه.
يحمل معامل devam العنوان الذي سيعود إليه المستخدم بعد تسجيل الدخول، ويصل مشفرًا بالنظام الست عشري (hex) — القيمة 2f796f7264616d2f تعني /yordam/. يقوم التطبيق بفك ترميز هذه القيمة من النظام الست عشري ويكتبها في وسم افتتاح نموذج الدخول. لا توجد أي عملية تهريب بينهما:
<form class='girisForm collapse show ikiAdimliGiris' method='post'
action='inc/islem.fm.inc.php'
data-url='<مدخلات المستخدم بعد فك الترميز الست عشري>'
autocomplete="off">
في المخرجات، تظهر رموز < و > وعلامات الاقتباس بشكل خام. الشيء الوحيد الذي يحتجز الحمولة هو أن خاصية data-url محاطة بعلامات اقتباس مفردة. عند إدخال علامة اقتباس مفردة داخل المدخلات، ينتهي الأمر: تُغلق الخاصية، ويُغلق وسم <form>، ويحل HTML الذي كتبه المهاجم محل نموذج المصادقة في الصفحة.
الاستيلاء على إجراء النموذج (form action). لا يتم هنا رسم نموذج مزيف — بل يتم إفراغ نموذج التطبيق الأصلي وإغلاقه، ثم فتح <form> جديد يحمل نفس فئات CSS مباشرة بعده. نظرًا لأن حقول اسم المستخدم وكلمة المرور ورمز التحقق في الصفحة كلها من HTML الأصلي للتطبيق، فإنها تبقى داخل هذا النموذج الجديد. يرى المستخدم النموذج الحقيقي، ويملأ النموذج الحقيقي؛ وتذهب المعلومات التي أدخلها إلى خادم المهاجم. لا يوجد أي فرق يمكن تمييزه بصريًا.
النقطة الحرجة: لا يحدث الحقن في صفحة عشوائية، بل في الصفحة التي يُتوقع فيها بالفعل أن يدخل المستخدم كلمة المرور الخاصة به. في حقن الانعكاس العادي، يحتاج المهاجم إلى إقناع الضحية؛ هنا تقوم واجهة التطبيق نفسها بمهمة الإقناع.
value لحقل النموذج المخفي — فك ترميز URL المزدوجفي صفحة البحث، تُكتب قيم معاملات GET في حقول نموذج مخفية. في هذه النقطة يتم تطبيق التهريب — ولكن بالترتيب الخاطئ.
تُستخدم نفس قيمة q في ثلاثة سياقات منفصلة داخل استجابة واحدة، ولكل سياق عمق مختلف لفك الترميز:
| السياق | فك الترميز | الحالة |
|---|---|---|
سلسلة JS داخل كتلة <script> | مرة واحدة | آمن |
مربع البحث الرئيسي <input value="…"> | مرة واحدة | آمن |
حقول النموذج المخفية <input type='hidden' value="…"> | مرتين | ثغرة |
تسلسل العملية كالتالي:
مدخلات العميل : %2522
↓ تحليل $_GET
متغير PHP : %22
↓ مرشح الإدخال → لا يرى محتوى ضارًا، لا توجد علامات اقتباس
↓ htmlspecialchars → لا توجد أحرف للتهريب، لا تغيير
↓ urldecode → يتم فك ترميز %22
المُطبوع في الصفحة : " ← علامة اقتباس خام، خروج من الخاصية
بينما يعمل مرشح الإدخال والتهريب على الطبقة الأولى من فك الترميز، فإن المخرجات تُغذى من الطبقة الثانية. عند مقارنة الحمولة نفسها في حالتي الترميز المفرد والمزدوج، يظهر الفرق بوضوح:
| المُرسل | الاستجابة | مخرجات الحقل المخفي |
|---|---|---|
q=foo%22… (ترميز مفرد) | 302 Found | value="foo"…" — المرشح يلتقطها |
q=foo%2522… (ترميز مزدوج) | 200 OK | value="foo"><…>" — HTML خام |
الثغرة ليست خاصة بمعامل q. الكتلة التي تولّد الحقول المخفية تمر على جميع معاملات GET في الطلب؛ وقد تم التحقق منها أيضًا على tip و alan.
name لحقل النموذج المخفي — حقن في اسم المعاملتولّد الكتلة نفسها البنية التالية لكل معامل GET:
<input type='hidden' name="<اسم المعامل>" value="<قيمة المعامل>"/>
يُطبق التهريب على جانب value فقط. ولا يُطبق إطلاقًا على جانب name. في هذه النقطة لا حاجة حتى للترميز المزدوج — فالترميز المفرد كافٍ، لأنه لا يوجد تهريب أصلاً يمكن تجاوزه.
يُكتب اسم معامل مختلق مباشرة بشكل خام في خاصية name، ويمكن الخروج من الخاصية. نظرًا لأن اسم المعامل تحت سيطرة المهاجم، فلا حاجة لأن يكون معاملًا معروفًا لدى التطبيق.
النقطتان 2 و3 من هذه النقاط الثلاث تنبعان من نفس كتلة الكود، وتتكرر هذه الكتلة في ستة نماذج منفصلة: dilForm و adetForm و siralaForm و tkForm و ekForm و tmForm. أي أن الحقن يحدث ست مرات في طلب واحد.
تم التحقق من ديناميكية الكتلة بمقارنة مخرجات طلبين:
الطلب أ: ?p=1&dil=0&alan=&tip=basit&gorunum=liste&q=…
المخرج أ: name="p" · name="alan" · name="tip" · name="gorunum" · name="q"
الطلب ب: ?p=2&dil=0&devam=…
المخرج ب: name="p" · name="devam"
الحقول المُولَّدة لا تأتي من قائمة ثابتة، بل تُشتق مباشرة من المعاملات الموجودة في الطلب. وبالتالي، فإن المحتوى المكتوب في كل من الخاصيتين name و value يخضع لسيطرة المهاجم.
كل ما يحتاجه المهاجم هو رابط سيفتحه الضحية. لا يحتاج إلى تسجيل الدخول أو امتلاك حساب.
action لنموذج الدخول إلى المهاجم. تم التحقق من ذلك.نظرًا لأن المنصة المتأثرة تحتوي على بيانات اعتماد وبيانات شخصية لأعضاء المكتبة، فمن الممكن الوصول إلى سجلات الأعضاء عبر الحسابات المخترقة.
يستخدم التطبيق CSP مع script-src و object-src قائمين على nonce؛ أي أن XSS الكلاسيكي القائم على السكربت لا يعمل في هذه الصفحات. للوهلة الأولى، يبدو أن هذا يخفض النتيجة إلى مستوى "تلاعب بالمحتوى فقط".
السياسة الكاملة هي:
Content-Security-Policy: script-src 'nonce-...'; object-src 'nonce-...'; frame-ancestors 'self'
لا يوجد form-action. ولا يوجد default-src أيضًا — وبالتالي لا يوجد افتراضي يمكن الرجوع إليه للتوجيهات غير المعرّفة. النتيجة: إرسال النموذج عبر POST إلى خادم المهاجم لا يتم منعه بأي شكل من الأشكال من قبل المتصفح.
لا يتطلب سرقة بيانات الاعتماد تشغيل JavaScript. يكفي HTML عادي، وCSP لا يوقف HTML العادي.
الأساسية
ذات الصلة
في سجل CVE، صُنفت نقطة الضعف الأساسية على أنها CWE-79. على مستوى السبب الجذري، فإن CWE-116 أكثر وصفًا: سبب النقاط الثلاث هو إما عدم تطبيق تهريب المخرجات إطلاقًا أو تطبيقه بالترتيب الخاطئ.
وتجدر الإشارة إلى أنه لا يتم تنفيذ سكربتات في هذا المنتج — فسياسة script-src القائمة على nonce التي يرسلها المنتج نفسه لا تسمح بذلك، ولا يمكن قراءة قيمة nonce عبر النطاقات المختلفة (cross-origin). التأثير الفعلي ليس تنفيذ سكربت، بل حقن HTML والاستيلاء على نموذج الدخول. ولهذا السبب تم أيضًا إجراء مطابقة CAPEC-148 (انتحال المحتوى).
CWE-174 تنطبق تحديدًا على النقطة رقم 2 — فك ترميز نفس البيانات للمرة الثانية بعد التهريب.
متوسط — CVSS 3.1 النتيجة الأساسية 6.1 (AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N)
لا يحتاج المهاجم إلى أي صلاحيات؛ وبما أن الضحية يجب أن تفتح الرابط المُجهز، فإن تفاعل المستخدم مطلوب. تم اعتبار النطاق (Scope) متغيرًا (Changed) لأن المحتوى المحقون يُعالج في السياق الأمني للمتصفح.
النقاط الثلاث جميعها تقابل نفس النتيجة. من حيث التأثير، النقطة رقم 1 هي الأشد خطورة: نظرًا لأن الحقن يحدث مباشرة في وسم نموذج المصادقة نفسه، يصبح الاستيلاء على هدف action للنموذج وسرقة بيانات الاعتماد ممكنًا.
نظام أتمتة المكتبات يوردام
المتأثر : v22.1 والإصدارات الأقدم
المُصلَح : v22.2
تم التحقق على الإصدار v22.1. الثغرات ليست ناتجة عن خطأ في التكوين خاص بمؤسسة معينة، بل تنبع من مكونات واجهة مشتركة في المنتج؛ فهي تؤثر على جميع التثبيتات في نفس عائلة الإصدارات. يجب على الشركة المصنعة تقييم حالة الإصدارات الأقدم.
نظرًا لأن التثبيتات محلية (on-premise)، فحتى لو نشرت الشركة المصنعة الإصلاح، فإن التثبيتات التي لم تطبق التحديث ستظل متأثرة.
| # | نقطة النهاية | نقطة المخرجات |
|---|---|---|
| 1 | GET /yordam/?p=2&dil=<n>&devam=<hex> | خاصية data-url لنموذج الدخول |
| 2 | GET /yordam/?p=1&…&<parametre>=<payload> | خاصية value لحقل النموذج المخفي |
| 3 | GET /yordam/?p=1&…&<payload>=1 | خاصية name لحقل النموذج المخفي |
تنبع النقطتان 2 و3 من نفس كتلة توليد الحقول المخفية؛ وتتكرر الكتلة في النماذج dilForm و adetForm و siralaForm و tkForm و ekForm و tmForm.
تم إصلاح الثغرات من قبل الشركة المصنعة. يجب ترقية التطبيق إلى v22.2 أو إصدار أحدث.
| معرّف CVE | CVE-2026-77818 |
| الجهة المُعيِّنة (CNA) | TR-CERT (USOM) — رئاسة الأمن السيبراني لجمهورية تركيا |
| الحالة | PUBLISHED |
| الحجز | 2026-08-21 |
| النشر | 2026-09-04 |
| الإشعار الأمني | TR-26-1011 |
| عنوان سجل CVE | Reflected HTML Injection via Form Hijacking in Yordam Informatics's Library Automation System |
| CAPEC | CAPEC-148 — انتحال المحتوى |
الشركة المصنعة: Yordam Bilgi Teknolojileri Danışmanlık Eğitim ve Elektronik Sistemler Sanayi ve Ticaret A.Ş.
Alkım Coşkun – Netlore Security
| التاريخ | الحدث |
|---|---|
| 2026-08-20 | تم اكتشاف الثغرات والتحقق منها |
| 2026-08-21 | تم الإبلاغ إلى رئاسة الأمن السيبراني؛ تم حجز معرّف CVE |
| 2026-09-04 | تم نشر CVE-2026-77818، وتم الإعلان عن الإشعار الأمني TR-26-1011 |