id: system_settings_gatekeeper_identified_developers_allowed
title: Apply Gatekeeper Settings to Block Applications from Unidentified Developers
discussion: |
  The information system implements cryptographic mechanisms to authenticate software prior to installation.

  Gatekeeper settings must be configured correctly to only allow the system to run applications downloaded from the Mac App Store or applications signed with a valid Apple Developer ID code. Administrator users will still have the option to override these settings on a per-app basis. Gatekeeper is a security feature that ensures that applications must be digitally signed by an Apple-issued certificate in order to run. Digital signatures allow the macOS to verify that the application has not been modified by a malicious third party.
references:
  nist:
    cce:
      macos_27:
        - CCE-XXXXX-X
      macos_26:
        - CCE-95371-1
      macos_15:
        - CCE-94364-7
      macos_14:
        - CCE-92961-2
    800-53r5:
      - CM-14
      - CM-5
      - SI-7(15)
      - SI-7(1)
    800-171r3:
      - 03.14.02
  disa:
    cci:
      - CCI-001749
      - CCI-003992
    srg:
      - SRG-OS-000366-GPOS-00153
      - SRG-OS-000480-GPOS-00228
    disa_stig:
      macos_26:
        - APPL-26-002060
      macos_15:
        - APPL-15-002060
      macos_14:
        - APPL-14-002060
    cmmc:
      - CM.L2-3.4.5
  bzk:
    bio:
      - 8.19
      - 8.19.01
platforms:
  macOS:
    '27.0': {}
    '26.0':
      benchmarks:
        - name: disa_stig
          severity: high
        - name: nlmapgov_plus
        - name: nlmapgov_base
    '15.0':
      benchmarks:
        - name: disa_stig
          severity: high
        - name: nlmapgov_plus
        - name: nlmapgov_base
    enforcement_info:
      check:
        shell: |-
          /usr/bin/osascript -l JavaScript << EOS
          function run() {
            let pref1 = ObjC.unwrap($.NSUserDefaults.alloc.initWithSuiteName('com.apple.systempolicy.control')\
          .objectForKey('AllowIdentifiedDevelopers'))
            let pref2 = ObjC.unwrap($.NSUserDefaults.alloc.initWithSuiteName('com.apple.systempolicy.control')\
          .objectForKey('EnableAssessment'))
            if ( pref1 == true && pref2 == true ) {
              return("true")
            } else {
              return("false")
            }
          }
          EOS
        result:
          string: 'true'
      fix:
        shell: /usr/sbin/spctl --global-enable; /usr/sbin/spctl --enable
    introduced: '10.8'
tags:
  - 800-53r5_low
  - 800-53r5_moderate
  - 800-53r5_high
  - 800-171
  - cnssi-1253_low
  - cnssi-1253_high
  - cmmc_lvl2
  - cnssi-1253_moderate
mobileconfig_info:
  - PayloadType: com.apple.systempolicy.control
    PayloadContent:
      - AllowIdentifiedDevelopers: true
      - EnableAssessment: true
