FlawOpen

flawopen.com/Incidents/xz-utils-backdoor-march-2024

● Xz · CVE-2024-3094 · March 2024 · CVSS 10.0 · अति गंभीर
सुरक्षा अनुसंधान · FlawOpen

XZ Utils आपूर्ति-श्रृंखला हमला (CVE-2024-3094)

CVE-2024-3094 ने XZ Utils 5.6.0/5.6.1 को प्रभावित किया। जोखिम वितरण के बिल्ड पर निर्भर था; प्रभावित पैकेज पहचानें और बदलें।[1], [3], [4], [5], [6]

CVSS वेक्टरCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H[9]
💡 आसान भाषा में (ELI5)

सोर्स रिपॉज़िटरी को सार्वजनिक व्यंजन और रिलीज़ आर्काइव को बंद सामग्री-पेटी समझिए। व्यंजन सही दिखे तब भी रसोई पेटी की सील और रसीद जांचती है; केवल उसी पकवान का नाम लिखा होने से पेटी को सीधे उत्पादन में नहीं भेजना चाहिए। अलग विश्वसनीय चैनल से प्रमाणित मैनिफ़ेस्ट बदली हुई पेटी पकड़ सकता है, लेकिन विक्रेता का वैध हस्ताक्षर भी यह साबित नहीं करता कि अधिकृत पेटी सुरक्षित है: XZ की समझौता की गई पेटियाँ आधिकारिक रिलीज़ थीं। वितरण-विक्रेता के निर्देशों के अनुसार प्रभावित पैकेज बदलें; मैनिफ़ेस्ट जांच को केवल अदला-बदली रोकने के अलग नियंत्रण के रूप में रखें।[5], [6]

इस पेज के मुख्य शब्द

रिलीज़ आर्काइव
स्थापना या पैकेज बनाने के लिए प्रकाशित सोर्स कोड का आर्काइव। यह रिपॉज़िटरी से निकाली गई फाइलों से अलग हो सकता है, इसलिए इसे अलग आर्टिफैक्ट की तरह सत्यापित किया जाता है।[3], [4], [6]
बिल्ड प्रॉवेनेंस
वह रिकॉर्ड जो बताता है कि आर्टिफैक्ट किस समीक्षा किए हुए सोर्स, बिल्ड चरण और प्रकाशक से आया। इससे टीम डाउनलोड की विश्वसनीयता तय कर सकती है।[5], [6]
आर्टिफैक्ट सत्यापन
आर्टिफैक्ट को बिल्ड या रिलीज़ में लेने से पहले उसके हैश या हस्ताक्षर को स्वतंत्र विश्वसनीय माध्यम से मिले अपेक्षित मान से मिलाना।

फ्रेमवर्क मैपिंग

  • इस गाइड में बताई गई कमजोरी के लिए CWE संदर्भ: CWE-506

घटना का समयक्रम (Timeline)

24 फ़रवरी 2024

XZ 5.6.0 जारी हुआ; परियोजना के बाद के बयान में कहा गया कि उसके रिलीज़ आर्काइव में बैकडोर था।[3], [6]

9 मार्च 2024

XZ 5.6.1 जारी हुआ; उसी बयान में कहा गया कि उसके रिलीज़ आर्काइव में बैकडोर था।[4], [6]

29 मार्च 2024 से पहले

असामान्य SSH CPU उपयोग और Valgrind त्रुटियों के बाद जांच शुरू हुई, और Freund ने वितरित आर्काइव में ऐसा इंजेक्ट किया हुआ बिल्ड स्क्रिप्ट बताया जो संबंधित अपस्ट्रीम सोर्स फाइल में नहीं था।[5], [6]

29 मार्च 2024

Andres Freund ने समस्या को सार्वजनिक रूप से रिपोर्ट किया।[5]

हमले का चरण-दर-चरण प्रवाह

चरण 1

रिपॉज़िटरी और आर्काइव एक ही चीज़ नहीं हैं

सार्वजनिक विश्लेषण बताता है कि वितरित आर्काइव में ऐसे बिल्ड-स्क्रिप्ट बदलाव थे जो संबंधित अपस्ट्रीम रिपॉज़िटरी फाइलों में नहीं थे। केवल कमिट की समीक्षा आर्काइव की सुरक्षा सिद्ध नहीं करती।[5], [6]

चरण 2

प्रभाव बिल्ड पथ पर निर्भर था

यह समस्या विशेष पैकेजिंग और बिल्ड शर्तों में उभरी। आधिकारिक रिपोर्ट कहती है कि Git से बिल्ड करने पर संबंधित कोड नहीं जुड़ता; इसे सभी XZ या Linux इंस्टॉलेशन पर लागू नहीं करना चाहिए।[5], [6]

चरण 3

असामान्य व्यवहार से जांच शुरू हुई

Andres Freund ने SSH प्रक्रिया में असामान्य CPU उपयोग और Valgrind त्रुटियां बताईं। इन्हीं देखे जा सकने वाले संकेतों से जांच और सार्वजनिक खुलासा आगे बढ़ा।[5]

चरण 4

प्रतिक्रिया में बदलना और सत्यापित करना शामिल है

इसे प्रभावित पैकेज और बिल्ड-प्रोवेनेंस की घटना मानें। वितरण-विक्रेता के निर्देशों का पालन करके प्रभावित पैकेज बदलें। भविष्य के artifacts के लिए provenance और signatures जांचें: इससे अदला-बदली पकड़ी जा सकती है, लेकिन अधिकृत रिलीज़ के सुरक्षित होने का प्रमाण नहीं मिलता।[1], [6]

सोर्स कोड: कमज़ोर बनाम सुरक्षित कार्यान्वयन

कमज़ोर कार्यान्वयन
# डाउनलोड किया हुआ बिल्ड इनपुट उसकी पहचान सिद्ध किए बिना स्वीकार किया जाता है।
from pathlib import Path

def stage_release(artifact: Path, build_inputs: Path) -> None:
    build_inputs.joinpath(artifact.name).write_bytes(artifact.read_bytes())

# सफल कॉपी यह सिद्ध नहीं करती कि आर्काइव समीक्षा किए हुए
# रिलीज़ या विश्वसनीय मैनिफेस्ट के अनुरूप है।
सुरक्षित और सुदृढ़ फ़िक्स
# शिक्षण हेतु गेट: विश्वसनीय मैनिफेस्ट के अपेक्षित SHA-256 को जांचें।
import hashlib
import hmac
from pathlib import Path

def verify_release(artifact: Path, expected_sha256: str) -> None:
    digest = hashlib.sha256(artifact.read_bytes()).hexdigest()
    if not hmac.compare_digest(digest, expected_sha256.lower()):
        raise ValueError("रिलीज़ आर्टिफैक्ट विश्वसनीय मैनिफेस्ट से मेल नहीं खाता")

# expected_sha256 अलग से प्रमाणित प्रकाशन माध्यम से लें और
# आर्काइव को बिल्ड इनपुट बनाने से पहले verify_release चलाएं।

# यह अदला-बदली पकड़ता है, अधिकृत लेकिन दुर्भावनापूर्ण रिलीज़ को नहीं; प्रभावित पैकेजों के लिए विक्रेता के निर्देश मानें।

इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट

स्रोत