untrusted_app_all.te 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. ###
  2. ### Untrusted_app_all.
  3. ###
  4. ### This file defines the rules shared by all untrusted app domains except
  5. ### ephemeral_app for instant apps.
  6. ### Apps are labeled based on mac_permissions.xml (maps signer and
  7. ### optionally package name to seinfo value) and seapp_contexts (maps UID
  8. ### and optionally seinfo value to domain for process and type for data
  9. ### directory). The untrusted_app_all attribute is assigned to all default
  10. ### seapp_contexts for any app with UID between APP_AID (10000)
  11. ### and AID_ISOLATED_START (99000) if the app has no specific seinfo
  12. ### value as determined from mac_permissions.xml. In current AOSP, this
  13. ### attribute is assigned to all non-system apps as well as to any system apps
  14. ### that are not signed by the platform key. To move
  15. ### a system app into a specific domain, add a signer entry for it to
  16. ### mac_permissions.xml and assign it one of the pre-existing seinfo values
  17. ### or define and use a new seinfo value in both mac_permissions.xml and
  18. ### seapp_contexts.
  19. ###
  20. ### Note that rules that should apply to all untrusted apps must be in app.te or also
  21. ### added to ephemeral_app.te.
  22. # Some apps ship with shared libraries and binaries that they write out
  23. # to their sandbox directory and then execute.
  24. allow untrusted_app_all privapp_data_file:file { r_file_perms execute };
  25. allow untrusted_app_all app_data_file:file { r_file_perms execute };
  26. auditallow untrusted_app_all app_data_file:file execute;
  27. # Chrome Crashpad uses the the dynamic linker to load native executables
  28. # from an APK (b/112050209, crbug.com/928422)
  29. allow untrusted_app_all system_linker_exec:file execute_no_trans;
  30. # Follow priv-app symlinks. This is used for dynamite functionality.
  31. allow untrusted_app_all privapp_data_file:lnk_file r_file_perms;
  32. # Allow handling of less common filesystem objects
  33. allow untrusted_app_all app_data_file:{ lnk_file sock_file fifo_file } create_file_perms;
  34. # Allow loading and deleting executable shared libraries
  35. # within an application home directory. Such shared libraries would be
  36. # created by things like renderscript or via other mechanisms.
  37. allow untrusted_app_all app_exec_data_file:file { r_file_perms execute unlink };
  38. # ASEC
  39. allow untrusted_app_all asec_apk_file:file r_file_perms;
  40. allow untrusted_app_all asec_apk_file:dir r_dir_perms;
  41. # Execute libs in asec containers.
  42. allow untrusted_app_all asec_public_file:file { execute };
  43. # Used by Finsky / Android "Verify Apps" functionality when
  44. # running "adb install foo.apk".
  45. # TODO: Long term, we don't want apps probing into shell data files.
  46. # Figure out a way to remove these rules.
  47. allow untrusted_app_all shell_data_file:file r_file_perms;
  48. allow untrusted_app_all shell_data_file:dir r_dir_perms;
  49. # Allow traceur to pass file descriptors through a content provider to untrusted apps
  50. # for the purpose of sharing files through e.g. gmail
  51. allow untrusted_app_all trace_data_file:file { getattr read };
  52. # untrusted apps should not be able to open trace data files, they should depend
  53. # upon traceur to pass a file descriptor
  54. neverallow untrusted_app_all trace_data_file:dir *;
  55. neverallow untrusted_app_all trace_data_file:file { no_w_file_perms open };
  56. # Allow to read staged apks.
  57. allow untrusted_app_all { apk_tmp_file apk_private_tmp_file }:file {read getattr};
  58. # Read and write system app data files passed over Binder.
  59. # Motivating case was /data/data/com.android.settings/cache/*.jpg for
  60. # cropping or taking user photos.
  61. allow untrusted_app_all system_app_data_file:file { read write getattr };
  62. #
  63. # Rules migrated from old app domains coalesced into untrusted_app.
  64. # This includes what used to be media_app, shared_app, and release_app.
  65. #
  66. # Access to /data/media.
  67. allow untrusted_app_all media_rw_data_file:dir create_dir_perms;
  68. allow untrusted_app_all media_rw_data_file:file create_file_perms;
  69. # Traverse into /mnt/media_rw for bypassing FUSE daemon
  70. # TODO: narrow this to just MediaProvider
  71. allow untrusted_app_all mnt_media_rw_file:dir search;
  72. # allow cts to query all services
  73. allow untrusted_app_all servicemanager:service_manager list;
  74. allow untrusted_app_all audioserver_service:service_manager find;
  75. allow untrusted_app_all cameraserver_service:service_manager find;
  76. allow untrusted_app_all drmserver_service:service_manager find;
  77. allow untrusted_app_all mediaserver_service:service_manager find;
  78. allow untrusted_app_all mediaextractor_service:service_manager find;
  79. allow untrusted_app_all mediacodec_service:service_manager find;
  80. allow untrusted_app_all mediametrics_service:service_manager find;
  81. allow untrusted_app_all mediadrmserver_service:service_manager find;
  82. allow untrusted_app_all nfc_service:service_manager find;
  83. allow untrusted_app_all radio_service:service_manager find;
  84. allow untrusted_app_all app_api_service:service_manager find;
  85. allow untrusted_app_all vr_manager_service:service_manager find;
  86. allow untrusted_app_all gpu_service:service_manager find;
  87. # Allow untrusted apps to interact with gpuservice
  88. binder_call(untrusted_app_all, gpuservice)
  89. # Allow GMS core to access perfprofd output, which is stored
  90. # in /data/misc/perfprofd/. GMS core will need to list all
  91. # data stored in that directory to process them one by one.
  92. userdebug_or_eng(`
  93. allow untrusted_app_all perfprofd_data_file:file r_file_perms;
  94. allow untrusted_app_all perfprofd_data_file:dir r_dir_perms;
  95. ')
  96. # gdbserver for ndk-gdb ptrace attaches to app process.
  97. allow untrusted_app_all self:process ptrace;
  98. # Android Studio Instant Run has the application connect to a
  99. # runas_app socket listening in the abstract namespace.
  100. # https://developer.android.com/studio/run/
  101. # b/123297648
  102. allow untrusted_app_all runas_app:unix_stream_socket connectto;
  103. # Untrusted apps need to be able to send a SIGCHLD to runas_app
  104. # when running under a debugger (b/123612207)
  105. allow untrusted_app_all runas_app:process sigchld;
  106. # Cts: HwRngTest
  107. allow untrusted_app_all sysfs_hwrandom:dir search;
  108. allow untrusted_app_all sysfs_hwrandom:file r_file_perms;
  109. # Allow apps to view preloaded media content
  110. allow untrusted_app_all preloads_media_file:dir r_dir_perms;
  111. allow untrusted_app_all preloads_media_file:file r_file_perms;
  112. allow untrusted_app_all preloads_data_file:dir search;
  113. # Allow untrusted apps read / execute access to /vendor/app for there can
  114. # be pre-installed vendor apps that package a library within themselves.
  115. # TODO (b/37784178) Consider creating a special type for /vendor/app installed
  116. # apps.
  117. allow untrusted_app_all vendor_app_file:dir { open getattr read search };
  118. allow untrusted_app_all vendor_app_file:file { r_file_perms execute };
  119. allow untrusted_app_all vendor_app_file:lnk_file { open getattr read };
  120. # Write app-specific trace data to the Perfetto traced damon. This requires
  121. # connecting to its producer socket and obtaining a (per-process) tmpfs fd.
  122. allow untrusted_app_all traced:fd use;
  123. allow untrusted_app_all traced_tmpfs:file { read write getattr map };
  124. unix_socket_connect(untrusted_app_all, traced_producer, traced)
  125. # Allow heap profiling if the app opts in by being marked
  126. # profileable/debuggable.
  127. can_profile_heap(untrusted_app_all)
  128. # allow untrusted apps to use UDP sockets provided by the system server but not
  129. # modify them other than to connect
  130. allow untrusted_app_all system_server:udp_socket {
  131. connect getattr read recvfrom sendto write getopt setopt };
  132. # Allow the renderscript compiler to be run.
  133. domain_auto_trans(untrusted_app_all, rs_exec, rs)
  134. # This is allowed for targetSdkVersion <= 25 but disallowed on newer versions.
  135. dontaudit untrusted_app_all net_dns_prop:file read;
  136. # These have been disallowed since Android O.
  137. # For P, we assume that apps are safely handling the denial.
  138. dontaudit untrusted_app_all proc_stat:file read;
  139. dontaudit untrusted_app_all proc_vmstat:file read;
  140. dontaudit untrusted_app_all proc_uptime:file read;
  141. # Allow the allocation and use of ptys
  142. # Used by: https://play.google.com/store/apps/details?id=jackpal.androidterm
  143. create_pty(untrusted_app_all)
  144. # Attempts to write to system_data_file is generally a sign
  145. # that apps are attempting to access encrypted storage before
  146. # the ACTION_USER_UNLOCKED intent is delivered. Suppress this
  147. # denial to prevent third party apps from spamming the logs.
  148. dontaudit untrusted_app_all system_data_file:dir write;
  149. # Allow access to kcov via its ioctl interface for coverage
  150. # guided kernel fuzzing.
  151. userdebug_or_eng(`
  152. allow untrusted_app_all debugfs_kcov:file rw_file_perms;
  153. allowxperm untrusted_app_all debugfs_kcov:file ioctl { KCOV_INIT_TRACE KCOV_ENABLE KCOV_DISABLE };
  154. ')
  155. # Allow access to ashmemd to request /dev/ashmem fds.
  156. binder_call(untrusted_app_all, ashmemd)
  157. allow untrusted_app_all ashmem_device:chr_file { getattr read ioctl lock map append write };