Com a mudança do Android para lançamentos contínuos e boletins trimestrais como parte das atualizações de segurança baseadas em risco, os OEMs podem querer corrigir vulnerabilidades entre os lançamentos em vez de esperar um trimestre inteiro. O recurso XML de patch de segurança complementar permite que os OEMs informem CVEs corrigidas além do nível do patch de segurança (SPL, na sigla em inglês) declarado, fornecendo um arquivo XML padronizado. Assim, os OEMs recebem crédito pela aplicação contínua de patches.
Fluxo de alto nível
Figura 1. Arquitetura e fluxo de dados de patches de segurança complementares.
Os OEMs podem colocar o arquivo XML em várias partições de dispositivos (/system, /vendor ou /product), garantindo que os patches de segurança do framework e dos componentes específicos do hardware sejam considerados. O arquivo XML precisa ser instalado em /etc/security/supplemental_security_patches.xml para a partição correspondente.
A plataforma agrega dados de CVEs nessas partições de dispositivos e os expõe em APIs de plataforma e bibliotecas Jetpack. Para mais detalhes, consulte API da plataforma Android 17 e mais recentes e Backport para versões mais antigas do Android.
O exemplo a seguir mostra um arquivo XML de patch de segurança complementar de amostra instalado em um dispositivo 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>
API da plataforma (Android 17 e mais recentes)
No Android 17 (nível 37 da API) e mais recentes, o
SecurityStateManager processa os patches complementares de todos os
locais de partição compatíveis e os expõe no pacote retornado de
getGlobalSecurityState usando as chaves KEY_SYSTEM_SUPPLEMENTAL_PATCHES
e KEY_VENDOR_SUPPLEMENTAL_PATCHES.
O serviço do sistema SecurityStateManagerService agrega arquivos XML de partição nesses dois buckets de relatórios gerais:
KEY_SYSTEM_SUPPLEMENTAL_PATCHES: agrega patches dos caminhos de partição/system,/system_exte/product.KEY_VENDOR_SUPPLEMENTAL_PATCHES: agrega patches dos caminhos de partição/vendore/odm.
Backport para versões mais antigas do Android
Não há suporte à API da plataforma para o Android 16 e versões anteriores. Em vez disso, a biblioteca
androidx.security:security-state (SecurityStateManagerCompat)
lê manualmente os arquivos XML usando XmlPullParser. Para permitir que o domínio untrusted_app leia os arquivos no Android 16 e versões anteriores, os OEMs precisam implementar as seguintes mudanças do SELinux em todos os caminhos de partição em que o arquivo XML está instalado:
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 };
Regras de build e validação de esquema
Para instalar o arquivo XML de patch complementar em /vendor/etc/security/,
/system/etc/security/, ou /product/etc/security/, adicione uma regra prebuilt_etc
em Android.bp. Como o SecurityStateManagerService espera que o arquivo no dispositivo seja nomeado exatamente como supplemental_security_patches.xml, use a propriedade filename ao usar nomes de módulos específicos da partição:
// 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,
}
O Android Open Source Project (AOSP) inclui o esquema XSD em
supplemental_security_patches.xsd
e valida o formato do arquivo XML durante o processo de build usando a regra de build xsdc
em 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
}
Também é possível validar o arquivo XML localmente no esquema XSD usando xmllint:
xmllint --schema frameworks/base/services/core/xsd/supplemental_security_patches/supplemental_security_patches.xsd --noout supplemental_security_patches.xml
Integração de testes e pacotes
O Security Test Suite (STS) e a Análise de firmware (BTS) usam os
dados do arquivo supplemental_security_patches.xml para estender a análise de patches
para vulnerabilidades presentes no arquivo XML. Portanto, além de refletir o estado de segurança do dispositivo, a integração correta desse arquivo permite que os OEMs realizem uma análise proativa de patches em vulnerabilidades corrigidas acima do SPL do dispositivo, em vez de esperar que o SPL trimestral seja declarado oficialmente.