
مختبر أبحاث أمني يعيد إنتاج CVE-2020-36762 (GHSA-h9gr-83jq-f3xc): حقن أوامر bash عبر github.event.comment.body في سير عمل التعليقات الخاص بـ ONSdigital/ras-collection-instrument
أداة بحث آلية — ليست المشروع الأصلي.
هذا المستودع عبارة عن بيئة مختبرية مؤقتة أُنشئت بواسطة نظام آلي لأطروحة ماجستير في جامعة لافال حول إعادة إنتاج ثغرات سير عمل GitHub Actions المنشورة. وهو لقطة حرفية من
ONSdigital/ras-collection-instrumentعند الالتزام493dc3d7c85f39c44e879941df9d5682865da109(2020-12-03)، أعيد توزيعه بموجب ترخيص المشروع نفسه، الذي يُدرج ملفه دون تغيير في هذه اللقطة.المشروع الأصلي ليس طرفًا معنيًا، ولا يُستهدف أبدًا، والثغرة المدروسة هنا معلنة بالفعل. كل سر ومتغير في هذا المستودع هو قيمة وهمية مولّدة عشوائيًا — لا توجد أي بيانات اعتماد حقيقية. مراجع الإجراءات وصور المشغّل مثبتة على ما حُلّت إليه في 2020-12-03؛ راجع
pinning.mdفي مخرجات النظام الآلي لمعرفة كل تغيير أُجري على اللقطة.أسئلة أو اعتراضات: [email protected]
هذه هي الخدمة المصغّرة لأداة جمع الاستبيانات RAS، المسؤولة عن رفع تمارين وأدوات الجمع. ويمكن استخدامها أيضًا لتنزيل أدوات الجمع كملفات .xlsx، وتتيح البحث عن أدوات الجمع عبر عوامل تصفية البحث. تمتلك هذه الخدمة القدرة على ربط تمارين الجمع بأدوات الجمع وفك ربطها. العلاقة بين التمارين والأدوات هي علاقة واحد-إلى-متعدد، لذا يمكن أن يكون لتمرين الجمع الواحد أدوات جمع متعددة. تحتوي كل أداة جمع في مخطط JSON على مرجع وحدة عينة، ونوع، ومعرّف ملخص، بالإضافة إلى سمات إضافية. تتواصل هذه الخدمة بشكل أساسي مع خدمة تمارين الجمع، بالإضافة إلى خدمات الطرف والحالة والمسح. تُرسل معلومات التسجيل حول أدوات الجمع إلى rabbitmq.
تُخزَّن أدوات الجمع في جدول أدوات بالحقول التالية:
type = نوع تمرين الجمع (أي SEFT، EQ، إلخ) instrument_id = معرّف UUID للأداة stamp = الطابع الزمني الذي يوضح وقت إنشاء أداة الجمع survey_id = معرّف UUID للمسح المرتبط classifiers = مصنّفات المسح survey = المسح نفسه seft_file = ملف seft الخاص بالأداة
توجد ثلاث وجهات نقاط نهاية مختلفة: /collectioninstrument، المستخدمة لمعظم نقاط النهاية، بالإضافة إلى /survey_responses و/info.
عند رفع أداة جمع لتمرين جمع، تكتب رسالة على قائمة انتظار Seft.Instruments لخدمة rm-collection-exercise وعند رفع استجابة مسح SEFT، تكتب رسالة على قائمة انتظار Seft.Responses لخدمة sdx-seft-consumer
يتطلب هذا تثبيت pipenv:
pip install pipenv
لتشغيل الاختبارات، يلزم خادم rabbitmq وخادم قاعدة بيانات. ينشئ سكربت tox هذه التبعيات ويشغّلها داخل حاويات Docker، التي تُدمَّر بعد تشغيل اختبارات الوحدة.
pipenv install --dev
pipenv run tox
لتشغيل الخدمة مع التبعيات المطلوبة:
docker-compose up -d db rabbitmq
pipenv run python run.py
لاختبار أن الخدمة تعمل:
curl http://localhost:8082/info
سيتم إنشاء قاعدة البيانات تلقائيًا عند بدء تشغيل التطبيق.
لتشغيل الخدمة في حاوية Docker، يتضمن سكربت Compose:
docker-compose up -d
متغيرات البيئة المتاحة للإعداد مذكورة أدناه:
| Environment Variable | Description | Default |
|---|---|---|
| MAX_UPLOAD_FILE_NAME_LENGTH | الحد الأقصى لطول أسماء الملفات | 50 |
| LOGGING_LEVEL | مستوى المسجّل | INFO |
| JSON_SECRET_KEYS | تمثيل JSON للمفاتيح | None |
| ONS_CRYPTOKEY | مفتاح يستخدمه المشفّر | None |
| SECURITY_USER_NAME | اسم المستخدم الذي يستخدمه العميل للمصادقة مع واجهات برمجة التطبيقات الأخرى | admin |
| SECURITY_USER_PASSWORD | كلمة المرور التي يستخدمها العميل للمصادقة مع واجهات برمجة التطبيقات الأخرى | secret |
| COLLECTION_EXERCISE_SCHEMA | موقع مخطط أداة الجمع | application/schemas/collection_instrument_schema.json |
| CASE_URL | عنوان URL لخدمة الحالة | 'http://localhost:8171' |
| COLLECTION_EXERCISE_URL | عنوان URL لخدمة تمارين الجمع | 'http://localhost:8145' |
| SURVEY_SERVICE_URL | عنوان URL لخدمة المسح | 'http://localhost:8080' |
| PARTY_URL | عنوان URL لخدمة الطرف | 'http://localhost:8081' |
| RABBITMQ_AMQP_COLLECTION_INSTRUMENT | معرّف URI لـ rabbitmq | None |
| RABBITMQ_AMQP_SURVEY_RESPONSE | معرّف URI لـ rabbitmq | None |
هذه مُعيَّنة في config.py
انتقل إلى /developer_scripts وشغّل import.py، وأجب عن المطالبات في سطر الأوامر
collection_instrument_schema على حقلين للسمات يبدوان متطابقين: formType وformtype.entname1/2/3 وruname1/2/3، وغيرها. يجب إعادة تصميم المخطط، أو تزويده بتوثيق أكثر تحديدًا./collectioninstrument/count هو إرجاع عدد أدوات الجمع. لماذا تحتاج الخدمة إلى القيام بذلك؟ ألا يمكن إنجاز ذلك عبر استعلام قاعدة بيانات؟