תיקונים משלימים לפגיעויות באבטחה

במסגרת המעבר של Android לעדכונים רציפים ולפרסום חדשות אבטחה רבעוניות כחלק מעדכוני אבטחה מבוססי-סיכון, יצרני ציוד מקורי (OEM) עשויים לרצות לתקן נקודות חולשה בין פרסום גרסאות, במקום להמתין רבעון שלם. התכונה 'תיקון אבטחה משלים ב-XML' מאפשרת ליצרני ציוד מקורי (OEM) לדווח על פגיעויות נפוצות (CVE) שתוקנו מעבר לרמת תיקון האבטחה (SPL) המוצהרת, על ידי אספקת קובץ XML סטנדרטי. כך יצרני הציוד המקורי מקבלים קרדיט על תיקונים רציפים.

תרשים זרימה ברמה גבוהה

דיאגרמה שבה מוצג זרימת נתונים של תיקוני אבטחה משלימים בפורמט XML ממערכת OEM, ממחיצות של ספקים ומוצרים אל AOSP Framework API

איור 1. ארכיטקטורה של תיקוני אבטחה משלימים וזרימת נתונים.

יצרני ציוד מקורי יכולים למקם את קובץ ה-XML בכמה מחיצות במכשיר (/system,‏ /vendor או /product), כדי לוודא שמתעדכנים תיקוני אבטחה גם מהמסגרת וגם מרכיבים ספציפיים לחומרה. צריך להתקין את קובץ ה-XML בנתיב /etc/security/supplemental_security_patches.xml עבור המחיצה הרלוונטית.

הפלטפורמה צוברת נתוני CVE במחיצות המכשיר האלה ומציגה אותם בממשקי ה-API של הפלטפורמה ובספריות Jetpack. פרטים נוספים זמינים במאמרים בנושא Platform API Android 17 and higher ו-Backport to lower Android versions.

בדוגמה הבאה מוצג קובץ XML לדוגמה של תיקון אבטחה משלים שהותקן במכשיר עם 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>

‫Platform API‏ (Android מגרסה 17 ואילך)

ב-Android 17 (רמת API 37) ומעלה, הפלטפורמה SecurityStateManager מטפלת בניתוח של תיקוני המשנה מכל מיקומי המחיצות הנתמכים, ומציגה אותם בחבילה המוחזרת מ-getGlobalSecurityState באמצעות המפתחות KEY_SYSTEM_SUPPLEMENTAL_PATCHES ו-KEY_VENDOR_SUPPLEMENTAL_PATCHES.

שירות המערכת SecurityStateManagerService מצביר קובצי XML של מחיצות לשני מאגרי דיווח כלליים:

  • KEY_SYSTEM_SUPPLEMENTAL_PATCHES: מצטבר תיקונים מנתיבי המחיצות /system,‏ /system_ext ו-/product.
  • KEY_VENDOR_SUPPLEMENTAL_PATCHES: מסכם תיקונים מנתיבי המחיצות /vendor ו-/odm.

העברה לאחור לגרסאות Android ישנות יותר

בגרסה 16 של Android ובגרסאות קודמות, אין תמיכה ב-API של הפלטפורמה. במקום זאת, ספריית Jetpack‏ androidx.security:security-state (SecurityStateManagerCompat) קוראת את קובצי ה-XML באופן ידני באמצעות XmlPullParser. כדי לאפשר לדומיין untrusted_app לקרוא את הקבצים ב-Android 16 ובגרסאות קודמות, יצרני ציוד מקורי (OEM) צריכים להטמיע את השינויים הבאים ב-SELinux בכל נתיבי המחיצות שבהם מותקן קובץ ה-XML:

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 };

יצירת כללים ואימות סכימה

כדי להתקין את קובץ ה-XML של תיקון התוסף ב-/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‏ (AOSP) כולל את סכימת ה-XSD ב-supplemental_security_patches.xsd ומאמת את פורמט קובץ ה-XML במהלך תהליך build באמצעות כלל ה-build xsdc ב-Android.bp:

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
}

אפשר גם לאמת את קובץ ה-XML באופן מקומי מול סכימת ה-XSD באמצעות xmllint:

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 כדי להרחיב את ניתוח הטלאים עבור נקודות חולשה שקיימות בקובץ ה-XML. לכן, בנוסף לשיקוף מצב האבטחה של המכשיר, שילוב נכון של הקובץ הזה מאפשר ליצרני ציוד מקורי (OEM) לבצע ניתוח יזום של תיקוני אבטחה לנקודות חולשה שתוקנו מעל רמת ה-SPL של המכשיר, במקום לחכות להכרזה הרשמית על ה-SPL הרבעוני.