6e1f405c8b
As an optimization, platform components like MediaProvider may choose to shortcut past the FUSE daemon and return open file descriptors directly pointing at the underlying storage device. Now that we have a specific label for /mnt/media_rw, we need to grant search access to untrusted apps like MediaProvider. The actual access control is still managed by POSIX permissions on that directory. avc: denied { search } for name="media_rw" dev="tmpfs" ino=4150 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:mnt_media_rw_file:s0 tclass=dir permissive=0 Bug: 21017105 Change-Id: I6d51939668b39b43b91b1f0c24c98bc2205bf511
165 lines
6.8 KiB
Text
165 lines
6.8 KiB
Text
###
|
|
### Untrusted apps.
|
|
###
|
|
### This file defines the rules for untrusted apps.
|
|
### Apps are labeled based on mac_permissions.xml (maps signer and
|
|
### optionally package name to seinfo value) and seapp_contexts (maps UID
|
|
### and optionally seinfo value to domain for process and type for data
|
|
### directory). The untrusted_app domain is the default assignment in
|
|
### seapp_contexts for any app with UID between APP_AID (10000)
|
|
### and AID_ISOLATED_START (99000) if the app has no specific seinfo
|
|
### value as determined from mac_permissions.xml. In current AOSP, this
|
|
### domain is assigned to all non-system apps as well as to any system apps
|
|
### that are not signed by the platform key. To move
|
|
### a system app into a specific domain, add a signer entry for it to
|
|
### mac_permissions.xml and assign it one of the pre-existing seinfo values
|
|
### or define and use a new seinfo value in both mac_permissions.xml and
|
|
### seapp_contexts.
|
|
###
|
|
### untrusted_app includes all the appdomain rules, plus the
|
|
### additional following rules:
|
|
###
|
|
|
|
type untrusted_app, domain;
|
|
app_domain(untrusted_app)
|
|
net_domain(untrusted_app)
|
|
bluetooth_domain(untrusted_app)
|
|
|
|
# Some apps ship with shared libraries and binaries that they write out
|
|
# to their sandbox directory and then execute.
|
|
allow untrusted_app app_data_file:file { rx_file_perms execmod };
|
|
|
|
allow untrusted_app tun_device:chr_file rw_file_perms;
|
|
|
|
# ASEC
|
|
allow untrusted_app asec_apk_file:file r_file_perms;
|
|
# Execute libs in asec containers.
|
|
allow untrusted_app asec_public_file:file { execute execmod };
|
|
|
|
# Allow the allocation and use of ptys
|
|
# Used by: https://play.google.com/store/apps/details?id=jackpal.androidterm
|
|
create_pty(untrusted_app)
|
|
|
|
# Used by Finsky / Android "Verify Apps" functionality when
|
|
# running "adb install foo.apk".
|
|
# TODO: Long term, we don't want apps probing into shell data files.
|
|
# Figure out a way to remove these rules.
|
|
allow untrusted_app shell_data_file:file r_file_perms;
|
|
allow untrusted_app shell_data_file:dir r_dir_perms;
|
|
|
|
# b/18504118: Allow reads from /data/anr/traces.txt
|
|
# TODO: We shouldn't be allowing all untrusted_apps to read
|
|
# this file. This is only needed for the GMS feedback agent.
|
|
# See also b/18340553. GMS runs as untrusted_app, and
|
|
# it's too late to change the domain it runs in.
|
|
# This line needs to be deleted.
|
|
allow untrusted_app anr_data_file:file r_file_perms;
|
|
|
|
# Read and write system app data files passed over Binder.
|
|
# Motivating case was /data/data/com.android.settings/cache/*.jpg for
|
|
# cropping or taking user photos.
|
|
allow untrusted_app system_app_data_file:file { read write getattr };
|
|
|
|
#
|
|
# Rules migrated from old app domains coalesced into untrusted_app.
|
|
# This includes what used to be media_app, shared_app, and release_app.
|
|
#
|
|
|
|
# Access /dev/mtp_usb.
|
|
allow untrusted_app mtp_device:chr_file rw_file_perms;
|
|
|
|
# Access to /data/media.
|
|
allow untrusted_app media_rw_data_file:dir create_dir_perms;
|
|
allow untrusted_app media_rw_data_file:file create_file_perms;
|
|
|
|
# Traverse into /mnt/media_rw for bypassing FUSE daemon
|
|
# TODO: narrow this to just MediaProvider
|
|
allow untrusted_app mnt_media_rw_file:dir search;
|
|
|
|
# Write to /cache.
|
|
allow untrusted_app cache_file:dir create_dir_perms;
|
|
allow untrusted_app cache_file:file create_file_perms;
|
|
|
|
allow untrusted_app drmserver_service:service_manager find;
|
|
allow untrusted_app mediaserver_service:service_manager find;
|
|
allow untrusted_app nfc_service:service_manager find;
|
|
allow untrusted_app radio_service:service_manager find;
|
|
allow untrusted_app surfaceflinger_service:service_manager find;
|
|
allow untrusted_app app_api_service:service_manager find;
|
|
|
|
# TODO: remove this once priv-apps are no longer running in untrusted_app
|
|
allow untrusted_app system_api_service:service_manager find;
|
|
|
|
# TODO: remove and replace with specific package that accesses this
|
|
allow untrusted_app persistent_data_block_service:service_manager find;
|
|
|
|
# Allow verifier to access staged apks.
|
|
allow untrusted_app { apk_tmp_file apk_private_tmp_file }:dir r_dir_perms;
|
|
allow untrusted_app { apk_tmp_file apk_private_tmp_file }:file r_file_perms;
|
|
|
|
# limit untrusted_apps access to MAC address ioctl
|
|
# MAC address is SIOCGIFHWADDR 0x8927
|
|
# from include/uapi/linux/sockios.h
|
|
# #define SIOCGIFHWADDR 0x8927 /* Get hardware address */
|
|
# Other general 0x89** ioctls should continue to be allowed.
|
|
# 0x8B00 from wireless extensions driver and is used by chrome to
|
|
# determine if wifi is present
|
|
# from include/uapi/linux/wireless.h:
|
|
# #define SIOCSIWCOMMIT 0x8B00 /* Commit pending changes to driver */
|
|
allow untrusted_app self:{ rawip_socket tcp_socket udp_socket } { 0x5411 0x5451 0x8900-0x8926 0x8928-0x89ff 0x8b00-0x8bff };
|
|
auditallow untrusted_app self:{ rawip_socket tcp_socket udp_socket } { 0x8b00-0x8bff };
|
|
|
|
# Allow GMS core to access perfprofd output, which is stored
|
|
# in /data/misc/perfprofd/. GMS core will need to list all
|
|
# data stored in that directory to process them one by one.
|
|
userdebug_or_eng(`
|
|
allow untrusted_app perfprofd_data_file:file r_file_perms;
|
|
allow untrusted_app perfprofd_data_file:dir r_dir_perms;
|
|
')
|
|
|
|
# Programs routinely attempt to scan through /system, looking
|
|
# for files. Suppress the denials when they occur.
|
|
dontaudit untrusted_app exec_type:file getattr;
|
|
|
|
###
|
|
### neverallow rules
|
|
###
|
|
|
|
# Receive or send uevent messages.
|
|
neverallow untrusted_app domain:netlink_kobject_uevent_socket *;
|
|
|
|
# Receive or send generic netlink messages
|
|
neverallow untrusted_app domain:netlink_socket *;
|
|
|
|
# Too much leaky information in debugfs. It's a security
|
|
# best practice to ensure these files aren't readable.
|
|
neverallow untrusted_app debugfs:file read;
|
|
|
|
# Do not allow untrusted apps to register services.
|
|
# Only trusted components of Android should be registering
|
|
# services.
|
|
neverallow untrusted_app service_manager_type:service_manager add;
|
|
|
|
# Do not allow untrusted_apps to connect to the property service
|
|
# or set properties. b/10243159
|
|
neverallow untrusted_app property_socket:sock_file write;
|
|
neverallow untrusted_app init:unix_stream_socket connectto;
|
|
neverallow untrusted_app property_type:property_service set;
|
|
|
|
# Do not allow untrusted_app to be assigned mlstrustedsubject.
|
|
# This would undermine the per-user isolation model being
|
|
# enforced via levelFrom=user in seapp_contexts and the mls
|
|
# constraints. As there is no direct way to specify a neverallow
|
|
# on attribute assignment, this relies on the fact that fork
|
|
# permission only makes sense within a domain (hence should
|
|
# never be granted to any other domain within mlstrustedsubject)
|
|
# and untrusted_app is allowed fork permission to itself.
|
|
neverallow untrusted_app mlstrustedsubject:process fork;
|
|
|
|
# Do not allow untrusted_app to hard link to any files.
|
|
# In particular, if untrusted_app links to other app data
|
|
# files, installd will not be able to guarantee the deletion
|
|
# of the linked to file. Hard links also contribute to security
|
|
# bugs, so we want to ensure untrusted_app never has this
|
|
# capability.
|
|
neverallow untrusted_app file_type:file link;
|