xref: /aosp_15_r20/system/sepolicy/private/app_zygote.te (revision e4a36f4174b17bbab9dc043f4a65dc8d87377290)
1*e4a36f41SAndroid Build Coastguard Workertypeattribute app_zygote coredomain;
2*e4a36f41SAndroid Build Coastguard Worker
3*e4a36f41SAndroid Build Coastguard Worker######
4*e4a36f41SAndroid Build Coastguard Worker###### Policy below is different from regular zygote-spawned apps
5*e4a36f41SAndroid Build Coastguard Worker######
6*e4a36f41SAndroid Build Coastguard Worker
7*e4a36f41SAndroid Build Coastguard Worker# Allow access to temporary files, which is normally permitted through
8*e4a36f41SAndroid Build Coastguard Worker# a domain macro.
9*e4a36f41SAndroid Build Coastguard Workertmpfs_domain(app_zygote);
10*e4a36f41SAndroid Build Coastguard Worker
11*e4a36f41SAndroid Build Coastguard Worker# Set the UID/GID of the process.
12*e4a36f41SAndroid Build Coastguard Worker# This will be further limited to a range of isolated UIDs with seccomp.
13*e4a36f41SAndroid Build Coastguard Workerallow app_zygote self:global_capability_class_set { setgid setuid };
14*e4a36f41SAndroid Build Coastguard Worker# Drop capabilities from bounding set.
15*e4a36f41SAndroid Build Coastguard Workerallow app_zygote self:global_capability_class_set setpcap;
16*e4a36f41SAndroid Build Coastguard Worker# Switch SELinux context to isolated app domain.
17*e4a36f41SAndroid Build Coastguard Workerallow app_zygote self:process setcurrent;
18*e4a36f41SAndroid Build Coastguard Workerallow app_zygote isolated_app:process dyntransition;
19*e4a36f41SAndroid Build Coastguard Worker
20*e4a36f41SAndroid Build Coastguard Worker# For JIT
21*e4a36f41SAndroid Build Coastguard Workerallow app_zygote self:process execmem;
22*e4a36f41SAndroid Build Coastguard Worker
23*e4a36f41SAndroid Build Coastguard Worker# Allow exec mapping from tmpfs (memfds) for binary translation
24*e4a36f41SAndroid Build Coastguard Workerallow app_zygote app_zygote_tmpfs:file execute;
25*e4a36f41SAndroid Build Coastguard Worker
26*e4a36f41SAndroid Build Coastguard Worker# Allow app_zygote to stat the files that it opens. It must
27*e4a36f41SAndroid Build Coastguard Worker# be able to inspect them so that it can reopen them on fork
28*e4a36f41SAndroid Build Coastguard Worker# if necessary: b/30963384.
29*e4a36f41SAndroid Build Coastguard Workerallow app_zygote debugfs_trace_marker:file getattr;
30*e4a36f41SAndroid Build Coastguard Worker
31*e4a36f41SAndroid Build Coastguard Worker# get system_server process group
32*e4a36f41SAndroid Build Coastguard Workerallow app_zygote system_server:process getpgid;
33*e4a36f41SAndroid Build Coastguard Worker
34*e4a36f41SAndroid Build Coastguard Worker# Interaction between the app_zygote and its children.
35*e4a36f41SAndroid Build Coastguard Workerallow app_zygote isolated_app:process setpgid;
36*e4a36f41SAndroid Build Coastguard Worker
37*e4a36f41SAndroid Build Coastguard Worker# TODO (b/63631799) fix this access
38*e4a36f41SAndroid Build Coastguard Workerdontaudit app_zygote mnt_expand_file:dir getattr;
39*e4a36f41SAndroid Build Coastguard Worker
40*e4a36f41SAndroid Build Coastguard Worker# Get seapp_contexts
41*e4a36f41SAndroid Build Coastguard Workerallow app_zygote seapp_contexts_file:file r_file_perms;
42*e4a36f41SAndroid Build Coastguard Worker# Check validity of SELinux context before use.
43*e4a36f41SAndroid Build Coastguard Workerselinux_check_context(app_zygote)
44*e4a36f41SAndroid Build Coastguard Worker# Check SELinux permissions.
45*e4a36f41SAndroid Build Coastguard Workerselinux_check_access(app_zygote)
46*e4a36f41SAndroid Build Coastguard Worker
47*e4a36f41SAndroid Build Coastguard Worker# Read and inspect temporary files managed by zygote.
48*e4a36f41SAndroid Build Coastguard Workerallow app_zygote zygote_tmpfs:file { read getattr };
49*e4a36f41SAndroid Build Coastguard Worker
50*e4a36f41SAndroid Build Coastguard Worker######
51*e4a36f41SAndroid Build Coastguard Worker###### Policy below is shared with regular zygote-spawned apps
52*e4a36f41SAndroid Build Coastguard Worker######
53*e4a36f41SAndroid Build Coastguard Worker
54*e4a36f41SAndroid Build Coastguard Worker# Child of zygote.
55*e4a36f41SAndroid Build Coastguard Workerallow app_zygote zygote:fd use;
56*e4a36f41SAndroid Build Coastguard Workerallow app_zygote zygote:process sigchld;
57*e4a36f41SAndroid Build Coastguard Worker
58*e4a36f41SAndroid Build Coastguard Worker# For ART (read /data/dalvik-cache).
59*e4a36f41SAndroid Build Coastguard Workerr_dir_file(app_zygote, dalvikcache_data_file);
60*e4a36f41SAndroid Build Coastguard Workerallow app_zygote dalvikcache_data_file:file execute;
61*e4a36f41SAndroid Build Coastguard Worker
62*e4a36f41SAndroid Build Coastguard Worker# For ART (allow userfaultfd and related ioctls)
63*e4a36f41SAndroid Build Coastguard Workeruserfaultfd_use(app_zygote)
64*e4a36f41SAndroid Build Coastguard Worker
65*e4a36f41SAndroid Build Coastguard Worker# Read /data/misc/apexdata/ to (get to com.android.art/dalvik-cache).
66*e4a36f41SAndroid Build Coastguard Workerallow app_zygote apex_module_data_file:dir search;
67*e4a36f41SAndroid Build Coastguard Worker# For ART APEX (read /data/misc/apexdata/com.android.art/dalvik-cache).
68*e4a36f41SAndroid Build Coastguard Workerr_dir_file(app_zygote, apex_art_data_file)
69*e4a36f41SAndroid Build Coastguard Worker
70*e4a36f41SAndroid Build Coastguard Worker# Allow reading/executing installed binaries to enable preloading
71*e4a36f41SAndroid Build Coastguard Worker# application data
72*e4a36f41SAndroid Build Coastguard Workerallow app_zygote apk_data_file:dir r_dir_perms;
73*e4a36f41SAndroid Build Coastguard Workerallow app_zygote apk_data_file:file { r_file_perms execute };
74*e4a36f41SAndroid Build Coastguard Worker
75*e4a36f41SAndroid Build Coastguard Worker# /oem accesses.
76*e4a36f41SAndroid Build Coastguard Workerallow app_zygote oemfs:dir search;
77*e4a36f41SAndroid Build Coastguard Worker
78*e4a36f41SAndroid Build Coastguard Worker# Allow app_zygote access to /vendor/overlay
79*e4a36f41SAndroid Build Coastguard Workerr_dir_file(app_zygote, vendor_overlay_file)
80*e4a36f41SAndroid Build Coastguard Worker# Allow app_zygote to read vendor_overlay_file from vendor apex as well
81*e4a36f41SAndroid Build Coastguard Workerallow app_zygote vendor_apex_metadata_file:dir { getattr search };
82*e4a36f41SAndroid Build Coastguard Worker
83*e4a36f41SAndroid Build Coastguard Workerallow app_zygote system_data_file:lnk_file r_file_perms;
84*e4a36f41SAndroid Build Coastguard Workerallow app_zygote system_data_file:file { getattr read map };
85*e4a36f41SAndroid Build Coastguard Worker
86*e4a36f41SAndroid Build Coastguard Worker# Send unsolicited message to system_server
87*e4a36f41SAndroid Build Coastguard Workerunix_socket_send(app_zygote, system_unsolzygote, system_server)
88*e4a36f41SAndroid Build Coastguard Worker
89*e4a36f41SAndroid Build Coastguard Worker# Allow the app_zygote to access the runtime feature flag properties.
90*e4a36f41SAndroid Build Coastguard Workerget_prop(app_zygote, device_config_runtime_native_prop)
91*e4a36f41SAndroid Build Coastguard Workerget_prop(app_zygote, device_config_runtime_native_boot_prop)
92*e4a36f41SAndroid Build Coastguard Worker
93*e4a36f41SAndroid Build Coastguard Worker# Allow app_zygote to access odsign verification status
94*e4a36f41SAndroid Build Coastguard Workerget_prop(app_zygote, odsign_prop)
95*e4a36f41SAndroid Build Coastguard Worker
96*e4a36f41SAndroid Build Coastguard Worker# /data/resource-cache
97*e4a36f41SAndroid Build Coastguard Workerallow app_zygote resourcecache_data_file:file r_file_perms;
98*e4a36f41SAndroid Build Coastguard Workerallow app_zygote resourcecache_data_file:dir r_dir_perms;
99*e4a36f41SAndroid Build Coastguard Worker
100*e4a36f41SAndroid Build Coastguard Worker#####
101*e4a36f41SAndroid Build Coastguard Worker##### Neverallow
102*e4a36f41SAndroid Build Coastguard Worker#####
103*e4a36f41SAndroid Build Coastguard Worker
104*e4a36f41SAndroid Build Coastguard Worker# Only permit transition to isolated_app.
105*e4a36f41SAndroid Build Coastguard Workerneverallow app_zygote { domain -isolated_app }:process dyntransition;
106*e4a36f41SAndroid Build Coastguard Worker
107*e4a36f41SAndroid Build Coastguard Worker# Only setcon() transitions, no exec() based transitions, except for crash_dump.
108*e4a36f41SAndroid Build Coastguard Workerneverallow app_zygote { domain -crash_dump }:process transition;
109*e4a36f41SAndroid Build Coastguard Worker
110*e4a36f41SAndroid Build Coastguard Worker# Must not exec() a program without changing domains.
111*e4a36f41SAndroid Build Coastguard Worker# Having said that, exec() above is not allowed.
112*e4a36f41SAndroid Build Coastguard Workerneverallow app_zygote *:file execute_no_trans;
113*e4a36f41SAndroid Build Coastguard Worker
114*e4a36f41SAndroid Build Coastguard Worker# The only way to enter this domain is for the zygote to fork a new
115*e4a36f41SAndroid Build Coastguard Worker# app_zygote child.
116*e4a36f41SAndroid Build Coastguard Workerneverallow { domain -zygote } app_zygote:process dyntransition;
117*e4a36f41SAndroid Build Coastguard Worker
118*e4a36f41SAndroid Build Coastguard Worker# Disallow write access to properties.
119*e4a36f41SAndroid Build Coastguard Workerneverallow app_zygote property_socket:sock_file write;
120*e4a36f41SAndroid Build Coastguard Workerneverallow app_zygote property_type:property_service set;
121*e4a36f41SAndroid Build Coastguard Worker
122*e4a36f41SAndroid Build Coastguard Worker# Should not have any access to data files.
123*e4a36f41SAndroid Build Coastguard Workerneverallow app_zygote app_data_file_type:file { rwx_file_perms };
124*e4a36f41SAndroid Build Coastguard Worker
125*e4a36f41SAndroid Build Coastguard Workerneverallow app_zygote {
126*e4a36f41SAndroid Build Coastguard Worker    service_manager_type
127*e4a36f41SAndroid Build Coastguard Worker    -activity_service
128*e4a36f41SAndroid Build Coastguard Worker    -webviewupdate_service
129*e4a36f41SAndroid Build Coastguard Worker}:service_manager find;
130*e4a36f41SAndroid Build Coastguard Worker
131*e4a36f41SAndroid Build Coastguard Worker# Isolated apps should not be able to access the driver directly.
132*e4a36f41SAndroid Build Coastguard Workerneverallow app_zygote gpu_device:chr_file { rwx_file_perms };
133*e4a36f41SAndroid Build Coastguard Worker
134*e4a36f41SAndroid Build Coastguard Worker# Do not allow app_zygote access to /cache.
135*e4a36f41SAndroid Build Coastguard Workerneverallow app_zygote cache_file:dir ~{ r_dir_perms };
136*e4a36f41SAndroid Build Coastguard Workerneverallow app_zygote cache_file:file ~{ read getattr };
137*e4a36f41SAndroid Build Coastguard Worker
138*e4a36f41SAndroid Build Coastguard Worker# Do not allow most socket access. This is socket_class_set, excluding unix_dgram_socket,
139*e4a36f41SAndroid Build Coastguard Worker# unix_stream_socket, and netlink_selinux_socket.
140*e4a36f41SAndroid Build Coastguard Workerneverallow app_zygote domain:{
141*e4a36f41SAndroid Build Coastguard Worker  socket tcp_socket udp_socket rawip_socket netlink_socket packet_socket key_socket
142*e4a36f41SAndroid Build Coastguard Worker  appletalk_socket netlink_route_socket netlink_tcpdiag_socket
143*e4a36f41SAndroid Build Coastguard Worker  netlink_nflog_socket netlink_xfrm_socket netlink_audit_socket
144*e4a36f41SAndroid Build Coastguard Worker  netlink_dnrt_socket netlink_kobject_uevent_socket tun_socket netlink_iscsi_socket
145*e4a36f41SAndroid Build Coastguard Worker  netlink_fib_lookup_socket netlink_connector_socket netlink_netfilter_socket
146*e4a36f41SAndroid Build Coastguard Worker  netlink_generic_socket netlink_scsitransport_socket netlink_rdma_socket netlink_crypto_socket
147*e4a36f41SAndroid Build Coastguard Worker  sctp_socket icmp_socket ax25_socket ipx_socket netrom_socket atmpvc_socket
148*e4a36f41SAndroid Build Coastguard Worker  x25_socket rose_socket decnet_socket atmsvc_socket rds_socket irda_socket
149*e4a36f41SAndroid Build Coastguard Worker  pppox_socket llc_socket can_socket tipc_socket bluetooth_socket iucv_socket
150*e4a36f41SAndroid Build Coastguard Worker  rxrpc_socket isdn_socket phonet_socket ieee802154_socket caif_socket
151*e4a36f41SAndroid Build Coastguard Worker  alg_socket nfc_socket vsock_socket kcm_socket qipcrtr_socket smc_socket
152*e4a36f41SAndroid Build Coastguard Worker} *;
153*e4a36f41SAndroid Build Coastguard Worker
154*e4a36f41SAndroid Build Coastguard Worker# Only allow app_zygote to talk to the logd socket, and su on eng/userdebug.
155*e4a36f41SAndroid Build Coastguard Worker# This is because cap_setuid/cap_setgid allow to forge uid/gid in
156*e4a36f41SAndroid Build Coastguard Worker# SCM_CREDENTIALS. Think twice before changing.
157*e4a36f41SAndroid Build Coastguard Workerneverallow app_zygote {
158*e4a36f41SAndroid Build Coastguard Worker  domain
159*e4a36f41SAndroid Build Coastguard Worker  -app_zygote
160*e4a36f41SAndroid Build Coastguard Worker  -logd
161*e4a36f41SAndroid Build Coastguard Worker  -system_server
162*e4a36f41SAndroid Build Coastguard Worker  userdebug_or_eng(`-su')
163*e4a36f41SAndroid Build Coastguard Worker}:unix_dgram_socket *;
164*e4a36f41SAndroid Build Coastguard Worker
165*e4a36f41SAndroid Build Coastguard Workerneverallow app_zygote {
166*e4a36f41SAndroid Build Coastguard Worker  domain
167*e4a36f41SAndroid Build Coastguard Worker  -app_zygote
168*e4a36f41SAndroid Build Coastguard Worker  -prng_seeder
169*e4a36f41SAndroid Build Coastguard Worker  userdebug_or_eng(`-su')
170*e4a36f41SAndroid Build Coastguard Worker}:unix_stream_socket *;
171*e4a36f41SAndroid Build Coastguard Worker
172*e4a36f41SAndroid Build Coastguard Worker# Never allow ptrace
173*e4a36f41SAndroid Build Coastguard Workerneverallow app_zygote *:process ptrace;
174*e4a36f41SAndroid Build Coastguard Worker
175*e4a36f41SAndroid Build Coastguard Worker# Do not allow access to Bluetooth-related system properties.
176*e4a36f41SAndroid Build Coastguard Worker# neverallow rules for Bluetooth-related data files are listed above.
177*e4a36f41SAndroid Build Coastguard Workerneverallow app_zygote {
178*e4a36f41SAndroid Build Coastguard Worker  bluetooth_a2dp_offload_prop
179*e4a36f41SAndroid Build Coastguard Worker  bluetooth_audio_hal_prop
180*e4a36f41SAndroid Build Coastguard Worker  bluetooth_prop
181*e4a36f41SAndroid Build Coastguard Worker  exported_bluetooth_prop
182*e4a36f41SAndroid Build Coastguard Worker}:file create_file_perms;
183