
إثبات المفهوم لـ CVE-2018-1000529: ثغرة XSS مخزنة في المكون الإضافي Grails Fields ≤2.2.7. يوضح الثغرة من خلال تطبيق Grails قابل للتشغيل ويتضمن جدولًا زمنيًا للإفصاح.
NVD CVE-2018-1000529: https://nvd.nist.gov/vuln/detail/CVE-2018-1000529
MITRE CVE-2018-1000529: https://cve.mitre.org/cgi-bin/cvename.cgi?name=2018-1000529
تم استخدام هذا المستودع لإثبات مفهوم الثغرة للإفصاح المسؤول لفريق Grails.
توجد ثغرة XSS في جميع المشاريع التي تستخدم Grails v3.3.5 وما دونه، لأنها جميعًا تتضمن إضافة Grails Fields المتأثرة v2.2.7 وما دونه. تم إصلاحها في إضافة Grails Fields v2.2.8، والتي تُستخدم في Grails v3.3.6.
يُنصح جميع المشاريع التي تستخدم Grails v3.3.5 أو أقل بالترقية إلى v3.3.6 على الأقل أو تعريف إصدار تبعية إضافة Grails Fields في build.gradle ليكون v2.2.8 أو أعلى.
نظرًا لأن إضافة Grails Fields تُستخدم على نطاق واسع في Grails Scaffolding، فإن جميع التطبيقات المُسقّفة التي تستخدم Grails v3.3.5 وما دونه معرضة للخطر. على الرغم من أن Grails لديه إجراءات مضادة جيدة لـ XSS بشكل افتراضي، إلا أن أي كائنات مجال يتم عرضها بواسطة علامات إضافة Grails Fields والتي تحتوي على كود HTML أو JavaScript لا يتم ترميزها أو التحقق منها ويتم تنفيذها بواسطة المتصفح.
استنسخ هذا المشروع ثم ابدأ التطبيق محليًا عن طريق تشغيل:
في موجه الأوامر / powershell:
grailsw.bat run-app
في نافذة طرفية:
./grailsw run-app
عندما يتم تهيئة تطبيق Grails بالكامل، سيعرض:
Grails application running at http://localhost:8080 in environment: development
myapp.TestControllerXSS.يتم إنشاء كائن المجال Test1 أثناء التهيئة ويتم تعريفه في ملف grails-app/init/myapp/BootStrap.groovy.
لا تقتصر الثغرة على وجودها عند إنشاء الكائن أثناء BootStrap، بل أيضًا عند إنشائه في واجهة المستخدم المُسقّفة عن طريق إدخال المستخدم.
يمكن اختبار ذلك عن طريق إزالة كائن Test1 وإضافة كائن Test جديد يحتوي على الاسم: Test1<script>alert('XSS');</script>
شكر جزيل لفريق Grails على سرعة حل هذه الثغرة، بما في ذلك: