सप्लिमेंटल सिक्योरिटी पैच

Android के लगातार रिलीज़ होने और जोखिम के आधार पर सुरक्षा अपडेट के तहत, हर तीन महीने में बुलेटिन जारी करने की नीति अपनाने के बाद, ओईएम हर तीन महीने के बजाय, रिलीज़ के बीच में ही सुरक्षा से जुड़ी कमज़ोरियों को ठीक कर सकते हैं. सुरक्षा पैच से जुड़ी सप्लीमेंटल एक्सएमएल फ़ाइल की सुविधा की मदद से, ओईएम, सुरक्षा पैच के तय किए गए लेवल (एसपीएल) से ज़्यादा लेवल पर ठीक की गई सीवीई की रिपोर्ट कर सकते हैं. इसके लिए, उन्हें स्टैंडर्ड एक्सएमएल फ़ाइल सबमिट करनी होगी. इससे ओईएम को लगातार पैचिंग करने का क्रेडिट मिलता है.

हाई लेवल फ़्लो

इस डायग्राम में, ओईएम सिस्टम, वेंडर, और प्रॉडक्ट पार्टीशन से AOSP फ़्रेमवर्क एपीआई तक, सुरक्षा से जुड़े अतिरिक्त पैच के एक्सएमएल डेटा फ़्लो को दिखाया गया है

पहली इमेज. सुरक्षा पैच से जुड़ी सप्लीमेंटल एक्सएमएल फ़ाइल का आर्किटेक्चर और डेटा फ़्लो.

ओईएम, एक्सएमएल फ़ाइल को डिवाइस के कई पार्टीशन (/system, /vendor या /product) में रख सकते हैं. इससे फ़्रेमवर्क और हार्डवेयर से जुड़े कॉम्पोनेंट, दोनों के सुरक्षा पैच का हिसाब रखा जा सकता है. एक्सएमएल फ़ाइल को, संबंधित पार्टीशन के लिए /etc/security/supplemental_security_patches.xml में इंस्टॉल किया जाना चाहिए.

प्लैटफ़ॉर्म, डिवाइस के इन पार्टीशन में सीवीई का डेटा इकट्ठा करता है और इसे प्लैटफ़ॉर्म के एपीआई और Jetpack लाइब्रेरी में दिखाता है. ज़्यादा जानकारी के लिए, प्लैटफ़ॉर्म एपीआई Android 17 और इसके बाद के वर्शन और Android के पुराने वर्शन पर वापस ले जाना लेख पढ़ें.

यहां सुरक्षा पैच से जुड़ी सप्लीमेंटल एक्सएमएल फ़ाइल का एक उदाहरण दिया गया है. इसे Android पर चलने वाले डिवाइस पर इंस्टॉल किया गया है:

<?xml version="1.0" encoding="utf-8"?>
<security-patches xmlns="http://schemas.android.com/security/patches/1.0">
    <patch><id>CVE-2026-12345</id></patch>
</security-patches>

प्लैटफ़ॉर्म एपीआई (Android 17 और इसके बाद के वर्शन)

Android 17 (एपीआई लेवल 37) और इसके बाद के वर्शन के लिए, प्लैटफ़ॉर्म का SecurityStateManager काम करने वाले सभी पार्टीशन की जगहों से सप्लीमेंटल पैच को पार्स करता है. साथ ही, KEY_SYSTEM_SUPPLEMENTAL_PATCHES और KEY_VENDOR_SUPPLEMENTAL_PATCHES कुंजियों का इस्तेमाल करके, getGlobalSecurityState से मिले बंडल में उन्हें दिखाता है.

SecurityStateManagerService सिस्टम सेवा, पार्टीशन की एक्सएमएल फ़ाइलों को इन दो मुख्य रिपोर्टिंग बकेट में इकट्ठा करती है:

  • KEY_SYSTEM_SUPPLEMENTAL_PATCHES: /system, /system_ext और /product पार्टीशन पाथ से पैच इकट्ठा करता है.
  • KEY_VENDOR_SUPPLEMENTAL_PATCHES: /vendor और /odm पार्टीशन पाथ से पैच इकट्ठा करता है.

Android के पुराने वर्शन पर वापस ले जाना

Android 16 और इससे पुराने वर्शन के लिए, प्लैटफ़ॉर्म एपीआई की सुविधा उपलब्ध नहीं है. इसके बजाय, Jetpack की androidx.security:security-state लाइब्रेरी (SecurityStateManagerCompat) , XmlPullParser का इस्तेमाल करके, एक्सएमएल फ़ाइलों को मैन्युअल तरीके से पढ़ती है. Android 16 और इससे पुराने वर्शन पर, untrusted_app डोमेन को फ़ाइलें पढ़ने की अनुमति देने के लिए, ओईएम को सभी पार्टीशन पाथ पर SELinux में ये बदलाव करने होंगे, जहां एक्सएमएल फ़ाइल इंस्टॉल की गई है:

file_contexts:

/(system|vendor|product|system_ext|odm)/etc/security/supplemental_security_patches\.xml u:object_r:supplemental_security_patches:s0

supplemental_security_patches.te:

allow untrusted_app supplemental_security_patches:file { getattr open read };

बिल्ड के नियम और स्कीमा की पुष्टि करना

सुरक्षा पैच से जुड़ी सप्लीमेंटल एक्सएमएल फ़ाइल को /vendor/etc/security/, /system/etc/security/, या /product/etc/security/ में इंस्टॉल करने के लिए, prebuilt_etc नियम जोड़ें Android.bp. SecurityStateManagerService को डिवाइस पर मौजूद फ़ाइल का नाम, supplemental_security_patches.xml चाहिए. इसलिए, पार्टीशन के हिसाब से मॉड्यूल के नाम इस्तेमाल करते समय, filename प्रॉपर्टी का इस्तेमाल करें:

// For vendor partition (/vendor/etc/security/supplemental_security_patches.xml)
prebuilt_etc {
    name: "vendor_supplemental_security_patches.xml",
    src: "supplemental_security_patches.xml",
    filename: "supplemental_security_patches.xml",
    sub_dir: "security",
    vendor: true,
}
// For system partition (/system/etc/security/supplemental_security_patches.xml)
prebuilt_etc {
    name: "system_supplemental_security_patches.xml",
    src: "supplemental_security_patches.xml",
    filename: "supplemental_security_patches.xml",
    sub_dir: "security",
}
// For product partition (/product/etc/security/supplemental_security_patches.xml)
prebuilt_etc {
    name: "product_supplemental_security_patches.xml",
    src: "supplemental_security_patches.xml",
    filename: "supplemental_security_patches.xml",
    sub_dir: "security",
    product_specific: true,
}

Android Open Source Project (AOSP) में, supplemental_security_patches.xsd में XSD स्कीमा शामिल होता है. साथ ही, बिल्ड की प्रोसेस के दौरान, Android.bp में xsdc बिल्ड नियम का इस्तेमाल करके, एक्सएमएल फ़ाइल के फ़ॉर्मैट की पुष्टि की जाती है:

xsdc {
    name: "supplemental_security_patches_xsd",
    srcs: ["supplemental_security_patches/supplemental_security_patches.xsd"],
    package_name: "android.security.patches", // Java package name for generated code
}

xmllint का इस्तेमाल करके, एक्सएमएल फ़ाइल की पुष्टि स्थानीय तौर पर XSD स्कीमा के ख़िलाफ़ भी की जा सकती है:

xmllint --schema frameworks/base/services/core/xsd/supplemental_security_patches/supplemental_security_patches.xsd --noout supplemental_security_patches.xml

टेस्ट और सुइट इंटिग्रेशन

Security Test Suite (STS) और Firmware Analysis (BTS), supplemental_security_patches.xml फ़ाइल के डेटा का इस्तेमाल करके, एक्सएमएल फ़ाइल में मौजूद कमज़ोरियों के लिए पैच के विश्लेषण को बढ़ाते हैं. इसलिए, डिवाइस की सुरक्षा की स्थिति दिखाने के अलावा, इस फ़ाइल को सही तरीके से इंटिग्रेट करने से, ओईएम, डिवाइस के एसपीएल से ज़्यादा लेवल पर ठीक की गई कमज़ोरियों के लिए, पैच का पहले से विश्लेषण कर सकते हैं. इसके लिए, उन्हें हर तीन महीने में एसपीएल के आधिकारिक तौर पर एलान होने का इंतज़ार नहीं करना होगा.