
सुरक्षा-अनुसंधान प्रयोगशाला जो CVE-2020-36762 (GHSA-h9gr-83jq-f3xc) को पुनरुत्पादित करती है: ONSdigital/ras-collection-instrument की टिप्पणी वर्कफ़्लो में github.event.comment.body के माध्यम से bash कमांड इंजेक्शन
स्वचालित शोध आर्टिफैक्ट — अपस्ट्रीम प्रोजेक्ट नहीं।
यह रिपोर्टरी एक डिस्पोज़ेबल लैब है जिसे Université Laval में मास्टर की थीसिस के लिए एक स्वचालित हार्नेस द्वारा बनाया गया है, जिसका उद्देश्य प्रकाशित GitHub Actions वर्कफ़्लो कमज़ोरियों को पुनः प्रस्तुत करना है। यह
ONSdigital/ras-collection-instrumentका एक शब्दशः स्नैपशॉट है जो कमिट493dc3d7c85f39c44e879941df9d5682865da109(2020-12-03) पर है, जिसे उस प्रोजेक्ट के अपने लाइसेंस के तहत पुनर्वितरित किया गया है, जिसकी फ़ाइल इस स्नैपशॉट में अपरिवर्तित शामिल है।अपस्ट्रीम प्रोजेक्ट शामिल नहीं है, उसे कभी लक्षित नहीं किया जाता है, और यहाँ अध्ययन की गई कमज़ोरी पहले से ही सार्वजनिक है। इस रिपोर्टरी में हर सीक्रेट और वेरिएबल एक यादृच्छिक रूप से उत्पन्न डमी मान है — कोई वास्तविक क्रेडेंशियल मौजूद नहीं है। एक्शन संदर्भ और रनर इमेज उसी पर पिन किए गए हैं जो 2020-12-03 पर हल हुए थे; स्नैपशॉट में किए गए हर बदलाव के लिए हार्नेस आउटपुट में
pinning.mdदेखें।प्रश्न या आपत्तियाँ: [email protected]
यह RAS Collection Instrument माइक्रो-सर्विस है, जो संग्रह अभ्यासों और उपकरणों को अपलोड करने के लिए ज़िम्मेदार है। इसका उपयोग संग्रह उपकरणों को .xlsx फ़ाइलों के रूप में डाउनलोड करने के लिए भी किया जा सकता है, और यह खोज फ़िल्टर के माध्यम से संग्रह उपकरणों की खोज की अनुमति देता है। इस सर्विस में संग्रह अभ्यासों को संग्रह उपकरणों के साथ जोड़ने और अलग करने की क्षमता है। अभ्यासों और उपकरणों के बीच संबंध एक-से-अनेक है, इसलिए एक संग्रह अभ्यास में कई संग्रह उपकरण हो सकते हैं। JSON स्कीमा में प्रत्येक संग्रह उपकरण में एक नमूना इकाई संदर्भ, प्रकार और सारांश ID, साथ ही अतिरिक्त विशेषताएँ होती हैं। यह सर्विस मुख्य रूप से संग्रह अभ्यास सर्विस के साथ-साथ party, case और survey सर्विसेज़ के साथ संचार करती है। संग्रह उपकरणों के बारे में लॉगिंग जानकारी rabbitmq को भेजी जाती है।
संग्रह उपकरण निम्नलिखित फ़ील्ड्स के साथ एक instrument तालिका में संग्रहीत होते हैं:
type = संग्रह अभ्यास का प्रकार (जैसे SEFT, EQ, आदि) instrument_id = उपकरण के लिए UUID stamp = वह टाइमस्टैम्प जो दिखाता है कि संग्रह उपकरण कब बनाया गया था survey_id = संबंधित सर्वे का UUID classifiers = सर्वे क्लासिफायर survey = सर्वे स्वयं seft_file = उपकरण की seft फ़ाइल
तीन अलग-अलग एंडपॉइंट दृश्य मौजूद हैं: /collectioninstrument, जिसका उपयोग अधिकांश एंडपॉइंट्स के लिए किया जाता है, साथ ही /survey_responses और /info।
जब किसी संग्रह अभ्यास के लिए एक संग्रह उपकरण अपलोड किया जाता है, तो यह rm-collection-exercise सर्विस के लिए Seft.Instruments कतार पर एक संदेश लिखता है। जब एक SEFT सर्वे प्रतिक्रिया अपलोड की जाती है, तो यह sdx-seft-consumer सर्विस के लिए Seft.Responses कतार पर एक संदेश लिखता है।
इसके लिए 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 | Cryptographer द्वारा उपयोग की जाने वाली एक कुंजी | None |
| SECURITY_USER_NAME | क्लाइंट द्वारा अन्य apis के साथ प्रमाणित करने के लिए उपयोग किया जाने वाला उपयोगकर्ता नाम | admin |
| SECURITY_USER_PASSWORD | क्लाइंट द्वारा अन्य apis के साथ प्रमाणित करने के लिए उपयोग किया जाने वाला पासवर्ड | secret |
| COLLECTION_EXERCISE_SCHEMA | संग्रह उपकरण स्कीमा का स्थान | application/schemas/collection_instrument_schema.json |
| CASE_URL | case सर्विस के लिए URL | 'http://localhost:8171' |
| COLLECTION_EXERCISE_URL | संग्रह अभ्यास सर्विस के लिए URL | 'http://localhost:8145' |
| SURVEY_SERVICE_URL | survey सर्विस के लिए URL | 'http://localhost:8080' |
| PARTY_URL | party सर्विस के लिए URL | 'http://localhost:8081' |
| RABBITMQ_AMQP_COLLECTION_INSTRUMENT | rabbitmq के लिए URI | None |
| RABBITMQ_AMQP_SURVEY_RESPONSE | rabbitmq के लिए URI | None |
ये config.py में सेट किए गए हैं।
/developer_scripts पर जाएँ और import.py चलाएँ, कमांड लाइन पर संकेतों का उत्तर दें।
collection_instrument_schema में दो प्रतीत होने वाले समान विशेषता फ़ील्ड हैं: formType और formtype।entname1/2/3 और runame1/2/3, अन्य के बीच। स्कीमा को फिर से डिज़ाइन किया जाना चाहिए, या अधिक विशिष्ट दस्तावेज़ीकरण होना चाहिए।/collectioninstrument/count एंडपॉइंट केवल संग्रह उपकरणों की संख्या लौटाता है। यह सर्विस के लिए क्यों आवश्यक है? क्या यह डेटाबेस क्वेरी द्वारा पूरा नहीं किया जा सकता है?