Apple macOS 26 (Tahoe) Security Technical Implementation Guide
Pick two releases to diff their requirements.
Open a previous version of this STIG.
Digest of Updates +1 −1 ✎ 2
Comparison against the immediately-prior release (V1R1). Rule matching uses the Group Vuln ID. Content-change detection compares the rule’s description, check, and fix text after stripping inline markup — cosmetic-only edits aren’t flagged.
Added rules 1
- V-282964 High The macOS system must be a version supported by the vendor.
Removed rules 1
- V-278915 High The macOS system must be a version supported by the vendor.
Content changes 2
- RMF Control
- AC-11
- Severity
- M
- CCI
- CCI-000056
- Version
- APPL-26-000001
- Vuln IDs
-
- V-277028
- Rule IDs
-
- SV-277028r1148536_rule
Checks: C-81183r1148534_chk
Verify the macOS system is configured to prevent Apple Watch from terminating a session lock with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowAutoUnlock').js EOS If the result is not "false", this is a finding.
Fix: F-81088r1148535_fix
Configure the macOS system to prevent Apple Watch from terminating a session lock by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- AC-11
- Severity
- M
- CCI
- CCI-000056
- Version
- APPL-26-000002
- Vuln IDs
-
- V-277029
- Rule IDs
-
- SV-277029r1148539_rule
Checks: C-81184r1148537_chk
Verify the macOS system is configured to prompt users to enter a password to unlock the screen saver with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.screensaver')\ .objectForKey('askForPassword').js EOS If the result is not "true", this is a finding.
Fix: F-81089r1148538_fix
Configure the macOS system to prompt users to enter a password to unlock the screen saver by installing the "com.apple.screensaver" configuration profile.
- RMF Control
- AC-11
- Severity
- M
- CCI
- CCI-000056
- Version
- APPL-26-000003
- Vuln IDs
-
- V-277030
- Rule IDs
-
- SV-277030r1148542_rule
Checks: C-81185r1148540_chk
Verify the macOS system is configured to initiate a session lock within five seconds of the screen saver starting with the following command: /usr/bin/osascript -l JavaScript << EOS function run() { let delay = ObjC.unwrap($.NSUserDefaults.alloc.initWithSuiteName('com.apple.screensaver')\ .objectForKey('askForPasswordDelay')) if ( delay <= 5 ) { return("true") } else { return("false") } } EOS If the result is not "true", this is a finding.
Fix: F-81090r1148541_fix
Configure the macOS system to initiate a session lock within five seconds of the screen saver starting by installing the "com.apple.screensaver" configuration profile.
- RMF Control
- AC-11
- Severity
- M
- CCI
- CCI-000057
- Version
- APPL-26-000005
- Vuln IDs
-
- V-277031
- Rule IDs
-
- SV-277031r1148545_rule
Checks: C-81186r1148543_chk
Verify the macOS system is configured to lock the user session when a smart token is removed with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.security.smartcard')\ .objectForKey('tokenRemovalAction').js EOS If the result is not "1", this is a finding.
Fix: F-81091r1148544_fix
Configure the macOS system to lock the user session when a smart token is removed by installing the "com.apple.security.smartcard" configuration profile. Note: To ensure continued access to the operating system, consult the supplemental guidance provided with the STIG before applying the configuration profile.
- RMF Control
- AC-11
- Severity
- M
- CCI
- CCI-000060
- Version
- APPL-26-000007
- Vuln IDs
-
- V-277032
- Rule IDs
-
- SV-277032r1148548_rule
Checks: C-81187r1148546_chk
Verify the macOS system is configured to disable hot corners with the following command: /usr/bin/profiles -P -o stdout | /usr/bin/grep -Ec '"wvous-bl-corner" = 0|"wvous-br-corner" = 0|"wvous-tl-corner" = 0|"wvous-tr-corner" = 0' If the result is not "4", this is a finding.
Fix: F-81092r1148547_fix
Configure the macOS system to disable hot corners by installing the "com.apple.ManagedClient.preferences" configuration profile.
- RMF Control
- AC-11
- Severity
- M
- CCI
- CCI-000060
- Version
- APPL-26-000009
- Vuln IDs
-
- V-277033
- Rule IDs
-
- SV-277033r1149397_rule
Checks: C-81188r1149339_chk
Verify the macOS system is configured to prevent AdminHostInfo from being available at LoginWindow with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.loginwindow')\ .integerForKey('AdminHostInfo') EOS If the result is not "-1", this is a finding.
Fix: F-81093r1149340_fix
Configure the macOS system to prevent AdminHostInfo from being available at LoginWindow by installing the "com.apple.ManagedClient.preferences" configuration profile.
- RMF Control
- AC-2
- Severity
- M
- CCI
- CCI-000016
- Version
- APPL-26-000012
- Vuln IDs
-
- V-277034
- Rule IDs
-
- SV-277034r1148554_rule
Checks: C-81189r1148552_chk
Verify that a password policy is enforced by a directory service by asking the system administrator (SA) or information system security officer (ISSO). If no policy is enforced by a directory service, a password policy can be set with the "pwpolicy" utility. The variable names may vary depending on how the policy was set. If no temporary or emergency accounts are defined on the system, this is not applicable. To check if the password policy is configured to disable a temporary or emergency account after 72 hours, run the following command to output the password policy to the screen, substituting the correct user name in place of username: /usr/bin/pwpolicy -u username getaccountpolicies | tail -n +2 If there is no output, and password policy is not controlled by a directory service, this is a finding. Otherwise, look for the line "<key>policyCategoryAuthentication</key>". In the array that follows, there should be a <dict> section that contains a check <string> that allows users to log in if "policyAttributeCurrentTime" is less than the result of adding "policyAttributeCreationTime" to 72 hours (259299 seconds). The check might use a variable defined in its "policyParameters" section. If the check does not exist or if the check adds too great an amount of time to "policyAttributeCreationTime", this is a finding.
Fix: F-81094r1148553_fix
This setting may be enforced using local policy or by a directory service. To set local policy to disable a temporary or emergency user, create a plain text file containing the following: <dict> <key>policyCategoryAuthentication</key> <array> <dict> <key>policyContent</key> <string>policyAttributeCurrentTime < policyAttributeCreationTime+259299</string> <key>policyIdentifier</key> <string>Disable Tmp Accounts </string> </dict> </array> </dict> After saving the file and exiting to the command prompt, run the following command to load the new policy file, substituting the correct user name in place of "username" and the path to the file in place of "/path/to/file". /usr/bin/pwpolicy -u username setaccountpolicies /path/to/file
- RMF Control
- Severity
- M
- CCI
- CCI-004923
- Version
- APPL-26-000014
- Vuln IDs
-
- V-277035
- Rule IDs
-
- SV-277035r1148557_rule
Checks: C-81190r1148555_chk
Verify the macOS system is configured to enforce time synchronization with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.timed')\ .objectForKey('TMAutomaticTimeOnlyEnabled').js EOS If the result is not "true", this is a finding.
Fix: F-81095r1148556_fix
Configure the macOS system to enforce time synchronization by installing the "com.apple.ManagedClient.preferences" configuration profile.
- RMF Control
- AC-7
- Severity
- M
- CCI
- CCI-000044
- Version
- APPL-26-000022
- Vuln IDs
-
- V-277036
- Rule IDs
-
- SV-277036r1149407_rule
Checks: C-81191r1149360_chk
Verify the macOS system is configured to limit consecutive failed login attempts to three with the following command: /usr/bin/pwpolicy -getaccountpolicies 2> /dev/null | /usr/bin/tail +2 | /usr/bin/xmllint --xpath '//dict/key[text()="policyAttributeMaximumFailedAuthentications"]/following-sibling::integer[1]/text()' - | /usr/bin/awk '{ if ($1 <= 3) {print "pass"} else {print "fail"}}' | /usr/bin/uniq If the result is not "pass", this is a finding.
Fix: F-81096r1148559_fix
Configure the macOS system to limit consecutive failed login attempts to three by installing the "com.apple.mobiledevice.passwordpolicy" configuration profile.
- RMF Control
- AC-8
- Severity
- M
- CCI
- CCI-000048
- Version
- APPL-26-000023
- Vuln IDs
-
- V-277037
- Rule IDs
-
- SV-277037r1148563_rule
Checks: C-81192r1148561_chk
Verify the macOS system is configured to display the Standard Mandatory DOD Notice and Consent Banner before granting remote access to the operating system with the following commands: bannerText="You are accessing a U.S. Government (USG) Information System (IS) that is provided for USG-authorized use only. By using this IS (which includes any device attached to this IS), you consent to the following conditions: -The USG routinely intercepts and monitors communications on this IS for purposes including, but not limited to, penetration testing, COMSEC monitoring, network operations and defense, personnel misconduct (PM), law enforcement (LE), and counterintelligence (CI) investigations. -At any time, the USG may inspect and seize data stored on this IS. -Communications using, or data stored on, this IS are not private, are subject to routine monitoring, interception, and search, and may be disclosed or used for any USG-authorized purpose. -This IS includes security measures (e.g., authentication and access controls) to protect USG interests--not for your personal benefit or privacy. -Notwithstanding the above, using this IS does not constitute consent to PM, LE or CI investigative searching or monitoring of the content of privileged communications, or work product, related to personal representation or services by attorneys, psychotherapists, or clergy, and their assistants. Such communications and work product are private and confidential. See User Agreement for details." test "$(cat /etc/banner)" = "$bannerText" && echo "1" || echo "0" If the test does not return a "1", this is a finding.
Fix: F-81097r1148562_fix
Configure the macOS system to display the Standard Mandatory DOD Notice and Consent Banner before granting remote access to the operating system by creating a text file containing the required DOD text with the following commands: bannerText="You are accessing a U.S. Government (USG) Information System (IS) that is provided for USG-authorized use only. By using this IS (which includes any device attached to this IS), you consent to the following conditions: -The USG routinely intercepts and monitors communications on this IS for purposes including, but not limited to, penetration testing, COMSEC monitoring, network operations and defense, personnel misconduct (PM), law enforcement (LE), and counterintelligence (CI) investigations. -At any time, the USG may inspect and seize data stored on this IS. -Communications using, or data stored on, this IS are not private, are subject to routine monitoring, interception, and search, and may be disclosed or used for any USG-authorized purpose. -This IS includes security measures (e.g., authentication and access controls) to protect USG interests--not for your personal benefit or privacy. -Notwithstanding the above, using this IS does not constitute consent to PM, LE or CI investigative searching or monitoring of the content of privileged communications, or work product, related to personal representation or services by attorneys, psychotherapists, or clergy, and their assistants. Such communications and work product are private and confidential. See User Agreement for details." /bin/echo "${bannerText}" > /etc/banner
- RMF Control
- AC-8
- Severity
- M
- CCI
- CCI-000048
- Version
- APPL-26-000024
- Vuln IDs
-
- V-277038
- Rule IDs
-
- SV-277038r1148566_rule
Checks: C-81193r1148564_chk
Verify the macOS system is configured to display the contents of "/etc/banner" before granting access to the system with the following command: /usr/sbin/sshd -G | /usr/bin/grep -c "^banner /etc/banner" If the command does not return "1", this is a finding.
Fix: F-81098r1148565_fix
Configure the macOS system to display the contents of "/etc/banner" before granting access to the system with the following command: include_dir=$(/usr/bin/awk '/^Include/ {print $2}' /etc/ssh/sshd_config | /usr/bin/tr -d '*') if [[ -z $include_dir ]]; then /usr/bin/sed -i.bk "1s/.*/Include \/etc\/ssh\/sshd_config.d\/\*/" /etc/ssh/sshd_config fi /usr/bin/grep -qxF 'banner /etc/banner' "${include_dir}01-mscp-sshd.conf" 2>/dev/null || echo "banner /etc/banner" >> "${include_dir}01-mscp-sshd.conf" for file in $(ls ${include_dir}); do if [[ "$file" == "100-macos.conf" ]]; then continue fi if [[ "$file" == "01-mscp-sshd.conf" ]]; then break fi /bin/mv ${include_dir}${file} ${include_dir}20-${file} done
- RMF Control
- AC-8
- Severity
- M
- CCI
- CCI-000048
- Version
- APPL-26-000025
- Vuln IDs
-
- V-277039
- Rule IDs
-
- SV-277039r1148569_rule
Checks: C-81194r1148567_chk
Verify the macOS system is configured to display a policy banner with the following command: /bin/ls -ld /Library/Security/PolicyBanner.rtf* | /usr/bin/wc -l | /usr/bin/tr -d ' ' If the command does not return "1", this is a finding. The banner text of the document must read: "You are accessing a U.S. Government (USG) Information System (IS) that is provided for USG-authorized use only. By using this IS (which includes any device attached to this IS), you consent to the following conditions: -The USG routinely intercepts and monitors communications on this IS for purposes including, but not limited to, penetration testing, COMSEC monitoring, network operations and defense, personnel misconduct (PM), law enforcement (LE), and counterintelligence (CI) investigations. -At any time, the USG may inspect and seize data stored on this IS. -Communications using, or data stored on, this IS are not private, are subject to routine monitoring, interception, and search, and may be disclosed or used for any USG authorized purpose. -This IS includes security measures (e.g., authentication and access controls) to protect USG interests--not for your personal benefit or privacy. -Notwithstanding the above, using this IS does not constitute consent to PM, LE or CI investigative searching or monitoring of the content of privileged communications, or work product, related to personal representation or services by attorneys, psychotherapists, or clergy, and their assistants. Such communications and work product are private and confidential. See User Agreement for details." If the text is not worded exactly this way, this is a finding.
Fix: F-81099r1148568_fix
Configure the macOS system to display a policy banner by creating an RTF file containing the required text. Name the file "PolicyBanner.rtfd" and place it in "/Library/Security/". Update the permissions of the "/Library/Security/PolicyBanner.rtfd" file with the following command: /usr/bin/sudo /bin/chmod 644 /Library/Security/PolicyBanner.rtfd
- RMF Control
- AU-9
- Severity
- M
- CCI
- CCI-000162
- Version
- APPL-26-000030
- Vuln IDs
-
- V-277040
- Rule IDs
-
- SV-277040r1148572_rule
Checks: C-81195r1148570_chk
Verify the macOS system is configured without ACLs applied to log files with the following command: /bin/ls -le $(/usr/bin/grep '^dir' /etc/security/audit_control | /usr/bin/awk -F: '{print $2}') | /usr/bin/awk '{print $1}' | /usr/bin/grep -c ":" If the result is not "0", this is a finding.
Fix: F-81100r1148571_fix
Configure the macOS system without ACLs applied to log files with the following command: /bin/chmod -RN /var/audit
- RMF Control
- AU-9
- Severity
- M
- CCI
- CCI-000162
- Version
- APPL-26-000031
- Vuln IDs
-
- V-277041
- Rule IDs
-
- SV-277041r1148575_rule
Checks: C-81196r1148573_chk
Verify the macOS system is configured without ACLs applied to log folders with the following command: /bin/ls -lde /var/audit | /usr/bin/awk '{print $1}' | /usr/bin/grep -c ":" If the result is not "0", this is a finding.
Fix: F-81101r1148574_fix
Configure the macOS system without ACLs applied to log folders with the following command: /bin/chmod -N /var/audit
- RMF Control
- AC-3
- Severity
- M
- CCI
- CCI-000213
- Version
- APPL-26-000033
- Vuln IDs
-
- V-277042
- Rule IDs
-
- SV-277042r1148578_rule
Checks: C-81197r1148576_chk
Verify the macOS system is configured to disable FileVault automatic login with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.loginwindow')\ .objectForKey('DisableFDEAutoLogin').js EOS If the result is not "true", this is a finding.
Fix: F-81102r1148577_fix
Configure the macOS system to disable FileVault automatic login by installing the "com.apple.loginwindow" configuration profile. Note: To ensure continued access to the operating system, consult the supplemental guidance provided with the STIG before applying the configuration profile.
- RMF Control
- SC-10
- Severity
- M
- CCI
- CCI-001133
- Version
- APPL-26-000051
- Vuln IDs
-
- V-277043
- Rule IDs
-
- SV-277043r1148581_rule
Checks: C-81198r1148579_chk
Verify the macOS system is configured to set the SSHD ClientAliveInterval to 900 with the following command: /usr/sbin/sshd -G | /usr/bin/awk '/clientaliveinterval/{print $2}' If the result is not "900", this is a finding.
Fix: F-81103r1148580_fix
Configure the macOS system to set the SSHD ClientAliveInterval to 900 with the following command: include_dir=$(/usr/bin/awk '/^Include/ {print $2}' /etc/ssh/sshd_config | /usr/bin/tr -d '*') if [[ -z $include_dir ]]; then /usr/bin/sed -i.bk "1s/.*/Include \/etc\/ssh\/sshd_config.d\/\*/" /etc/ssh/sshd_config fi /usr/bin/grep -qxF 'clientaliveinterval 900' "${include_dir}01-mscp-sshd.conf" 2>/dev/null || echo "clientaliveinterval 900" >> "${include_dir}01-mscp-sshd.conf" for file in $(ls ${include_dir}); do if [[ "$file" == "100-macos.conf" ]]; then continue fi if [[ "$file" == "01-mscp-sshd.conf" ]]; then break fi /bin/mv ${include_dir}${file} ${include_dir}20-${file} done
- RMF Control
- SC-10
- Severity
- M
- CCI
- CCI-001133
- Version
- APPL-26-000052
- Vuln IDs
-
- V-277044
- Rule IDs
-
- SV-277044r1149437_rule
Checks: C-81199r1148582_chk
Verify the macOS system is configured to set the SSHD ClientAliveCountMax to 1 with the following command: /usr/sbin/sshd -G | /usr/bin/awk '/clientalivecountmax/{print $2}' If the result is not "1", this is a finding.
Fix: F-81104r1148583_fix
Configure the macOS system to set the SSHD ClientAliveCountMax to 1 with the following command: include_dir=$(/usr/bin/awk '/^Include/ {print $2}' /etc/ssh/sshd_config | /usr/bin/tr -d '*') if [[ -z $include_dir ]]; then /usr/bin/sed -i.bk "1s/.*/Include \/etc\/ssh\/sshd_config.d\/\*/" /etc/ssh/sshd_config fi /usr/bin/grep -qxF 'clientalivecountmax 1' "${include_dir}01-mscp-sshd.conf" 2>/dev/null || echo "clientalivecountmax 1" >> "${include_dir}01-mscp-sshd.conf" for file in $(ls ${include_dir}); do if [[ "$file" == "100-macos.conf" ]]; then continue fi if [[ "$file" == "01-mscp-sshd.conf" ]]; then break fi /bin/mv ${include_dir}${file} ${include_dir}20-${file} done
- RMF Control
- SC-10
- Severity
- M
- CCI
- CCI-001133
- Version
- APPL-26-000053
- Vuln IDs
-
- V-277045
- Rule IDs
-
- SV-277045r1148587_rule
Checks: C-81200r1148585_chk
Verify the macOS system is configured to set Login Grace Time to 30 with the following command: /usr/sbin/sshd -G | /usr/bin/awk '/logingracetime/{print $2}' If the result is not "30", this is a finding.
Fix: F-81105r1148586_fix
Configure the macOS system to set Login Grace Time to 30 with the following command: include_dir=$(/usr/bin/awk '/^Include/ {print $2}' /etc/ssh/sshd_config | /usr/bin/tr -d '*') if [[ -z $include_dir ]]; then /usr/bin/sed -i.bk "1s/.*/Include \/etc\/ssh\/sshd_config.d\/\*/" /etc/ssh/sshd_config fi /usr/bin/grep -qxF 'logingracetime 30' "${include_dir}01-mscp-sshd.conf" 2>/dev/null || echo "logingracetime 30" >> "${include_dir}01-mscp-sshd.conf" for file in $(ls ${include_dir}); do if [[ "$file" == "100-macos.conf" ]]; then continue fi if [[ "$file" == "01-mscp-sshd.conf" ]]; then break fi /bin/mv ${include_dir}${file} ${include_dir}20-${file} done
- RMF Control
- AC-17
- Severity
- H
- CCI
- CCI-000068
- Version
- APPL-26-000054
- Vuln IDs
-
- V-277046
- Rule IDs
-
- SV-277046r1184568_rule
Checks: C-81201r1148588_chk
Verify the macOS system is configured to limit SSHD to FIPS-compliant connections with the following command: fips_sshd_config=("Ciphers aes128-gcm@openssh.com" "HostbasedAcceptedAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp256-cert-v01@openssh.com" "HostKeyAlgorithms ecdsa-sha2-nistp256-cert-v01@openssh.com,sk-ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp256,sk-ecdsa-sha2-nistp256@openssh.com" "KexAlgorithms ecdh-sha2-nistp256" "MACs hmac-sha2-256-etm@openssh.com,hmac-sha2-256" "PubkeyAcceptedAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp256-cert-v01@openssh.com,sk-ecdsa-sha2-nistp256-cert-v01@openssh.com" "CASignatureAlgorithms ecdsa-sha2-nistp256,sk-ecdsa-sha2-nistp256@openssh.com") total=0 for config in $fips_sshd_config; do total=$(expr $(/usr/sbin/sshd -G | /usr/bin/grep -i -c "$config") + $total) done echo $total If the result is not "7", this is a finding.
Fix: F-81106r1184567_fix
Configure the macOS system to limit SSHD to FIPS-compliant connections with the following command: if [ -f /etc/ssh/crypto.conf ] && /usr/bin/grep -q "Include /etc/ssh/crypto.conf" /etc/ssh/sshd_config.d/100-macos.conf 2>/dev/null; then /bin/ln -fs /etc/ssh/crypto/fips.conf /etc/ssh/crypto.conf fi include_dir=$(/usr/bin/awk '/^Include/ {print $2}' /etc/ssh/sshd_config | /usr/bin/tr -d '*') if [[ -z $include_dir ]]; then /usr/bin/sed -i.bk "1s/.*/Include \/etc\/ssh\/sshd_config.d\/\*/" /etc/ssh/sshd_config fi fips_sshd_config=("Ciphers aes128-gcm@openssh.com" "HostbasedAcceptedAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp256-cert-v01@openssh.com" "HostKeyAlgorithms ecdsa-sha2-nistp256-cert-v01@openssh.com,sk-ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp256,sk-ecdsa-sha2-nistp256@openssh.com" "KexAlgorithms ecdh-sha2-nistp256" "MACs hmac-sha2-256-etm@openssh.com,hmac-sha2-256" "PubkeyAcceptedAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp256-cert-v01@openssh.com,sk-ecdsa-sha2-nistp256-cert-v01@openssh.com" "CASignatureAlgorithms ecdsa-sha2-nistp256,sk-ecdsa-sha2-nistp256@openssh.com") sshd_config=$(/usr/sbin/sshd -G) for config in $fips_sshd_config; do if ! echo $sshd_config | /usr/bin/grep -q -i "$config" 2>/dev/null; then /usr/bin/grep -qxF "$config" "${include_dir}01-mscp-sshd.conf" 2>/dev/null || echo "$config" >> "${include_dir}01-mscp-sshd.conf" fi done for file in $(ls ${include_dir}); do if [[ "$file" == "100-macos.conf" ]]; then continue fi if [[ "$file" == "01-mscp-sshd.conf" ]]; then break fi /bin/mv ${include_dir}${file} ${include_dir}20-${file} done
- RMF Control
- AC-17
- Severity
- H
- CCI
- CCI-000068
- Version
- APPL-26-000057
- Vuln IDs
-
- V-277047
- Rule IDs
-
- SV-277047r1148593_rule
Checks: C-81202r1148591_chk
Verify the macOS system is configured to limit SSH to FIPS-compliant connections with the following command: fips_ssh_config=("Ciphers aes128-gcm@openssh.com" "HostbasedAcceptedAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp256-cert-v01@openssh.com" "HostKeyAlgorithms ecdsa-sha2-nistp256-cert-v01@openssh.com,sk-ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp256,sk-ecdsa-sha2-nistp256@openssh.com" "KexAlgorithms ecdh-sha2-nistp256" "MACs hmac-sha2-256-etm@openssh.com,hmac-sha2-256" "PubkeyAcceptedAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp256-cert-v01@openssh.com,sk-ecdsa-sha2-nistp256-cert-v01@openssh.com" "CASignatureAlgorithms ecdsa-sha2-nistp256,sk-ecdsa-sha2-nistp256@openssh.com") total=0 ret="pass" for config in $fips_ssh_config; do if [[ "$ret" == "fail" ]]; then break fi for u in $(/usr/bin/dscl . list /users shell | /usr/bin/egrep -v '(^_)|(root)|(/usr/bin/false)' | /usr/bin/awk '{print $1}'); do sshCheck=$(/usr/bin/sudo -u $u /usr/bin/ssh -G . | /usr/bin/grep -ci "$config") if [[ "$sshCheck" == "0" ]]; then ret="fail" break fi done done echo $ret If the result is not "pass", this is a finding.
Fix: F-81107r1148592_fix
Configure the macOS system to limit SSH to FIPS-compliant connections with the following command: if [ -f /etc/ssh/crypto.conf ] && /usr/bin/grep -q "Include /etc/ssh/crypto.conf" /etc/ssh/ssh_config.d/100-macos.conf 2>/dev/null; then /bin/ln -fs /etc/ssh/crypto/fips.conf /etc/ssh/crypto.conf fi include_dir=$(/usr/bin/awk '/^Include/ {print $2}' /etc/ssh/ssh_config | /usr/bin/tr -d '*') fips_ssh_config=("Ciphers aes128-gcm@openssh.com" "HostbasedAcceptedAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp256-cert-v01@openssh.com" "HostKeyAlgorithms ecdsa-sha2-nistp256-cert-v01@openssh.com,sk-ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp256,sk-ecdsa-sha2-nistp256@openssh.com" "KexAlgorithms ecdh-sha2-nistp256" "MACs hmac-sha2-256-etm@openssh.com,hmac-sha2-256" "PubkeyAcceptedAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp256-cert-v01@openssh.com,sk-ecdsa-sha2-nistp256-cert-v01@openssh.com" "CASignatureAlgorithms ecdsa-sha2-nistp256,sk-ecdsa-sha2-nistp256@openssh.com") for ssh_config in $fips_ssh_config; do ssh_setting=$(echo $ssh_config | /usr/bin/cut -d " " -f1) /usr/bin/grep -qEi "^$ssh_setting" "${include_dir}01-mscp-ssh.conf" && /usr/bin/sed -i "" "s/^$ssh_setting.*/${ssh_config}/" "${include_dir}01-mscp-ssh.conf" || echo "$ssh_config" >> "${include_dir}01-mscp-ssh.conf" for u in $(/usr/bin/dscl . list /users shell | /usr/bin/egrep -v '(^_)|(root)|(/usr/bin/false)' | /usr/bin/awk '{print $1}'); do config=$(/usr/bin/sudo -u $u /usr/bin/ssh -Gv . 2>&1) configfiles=$(echo "$config" | /usr/bin/awk '/Reading configuration data/ {print $NF}'| /usr/bin/tr -d '\r') configarray=( ${(f)configfiles} ) if ! echo $config | /usr/bin/grep -q -i "$ssh_config" ; then for c in $configarray; do if [[ "$c" == "/etc/ssh/crypto.conf" ]]; then continue fi /usr/bin/sudo -u $u /usr/bin/grep -qEi "^$ssh_setting" "$c" && /usr/bin/sed -i "" "s/^$ssh_setting.*/${ssh_config}/I" "$c" if [[ "$c" =~ ".ssh/config" ]]; then if /usr/bin/grep -qEi "$ssh_setting" "$c" 2> /dev/null; then old_file=$(cat ~$u/.ssh/config) echo "$ssh_config" > ~$u/.ssh/config echo "$old_file" >> ~$u/.ssh/config fi fi done fi done done
- RMF Control
- AC-7
- Severity
- M
- CCI
- CCI-000044
- Version
- APPL-26-000060
- Vuln IDs
-
- V-277048
- Rule IDs
-
- SV-277048r1149408_rule
Checks: C-81203r1149362_chk
Verify the macOS system is configured to set account lockout time to 15 minutes with the following command: /usr/bin/pwpolicy -getaccountpolicies 2> /dev/null | /usr/bin/tail +2 | /usr/bin/xmllint --xpath '//dict/key[text()="autoEnableInSeconds"]/following-sibling::integer[1]/text()' - | /usr/bin/awk '{ if ($1/60 >= 15 ) {print "pass"} else {print "fail"}}' | /usr/bin/uniq If the result is not "pass", this is a finding.
Fix: F-81108r1148595_fix
Configure the macOS system to set account lockout time to 15 minutes by installing the "com.apple.mobiledevice.passwordpolicy" configuration profile.
- RMF Control
- AC-11
- Severity
- M
- CCI
- CCI-000057
- Version
- APPL-26-000070
- Vuln IDs
-
- V-277049
- Rule IDs
-
- SV-277049r1148599_rule
Checks: C-81204r1148597_chk
Verify the macOS system is configured to initiate the screen saver timeout after 15 minutes of inactivity with the following command: /usr/bin/osascript -l JavaScript << EOS function run() { let timeout = ObjC.unwrap($.NSUserDefaults.alloc.initWithSuiteName('com.apple.screensaver')\ .objectForKey('idleTime')) if ( timeout <= 900 ) { return("true") } else { return("false") } } EOS If the result is not "true", this is a finding.
Fix: F-81109r1148598_fix
Configure the macOS system to initiate the screen saver after 15 minutes of inactivity by installing the "com.apple.screensaver" configuration profile.
- RMF Control
- IA-2
- Severity
- M
- CCI
- CCI-000764
- Version
- APPL-26-000090
- Vuln IDs
-
- V-277050
- Rule IDs
-
- SV-277050r1149393_rule
Checks: C-81205r1149330_chk
Verify the macOS system is configured to disable login to other users' active and locked sessions with the following command: RESULT="FAIL" SS_RULE=$(/usr/bin/security -q authorizationdb read system.login.screensaver 2>&1 | /usr/bin/xmllint --xpath "//dict/key[.='rule']/following-sibling::array[1]/string/text()" -) if [[ "${SS_RULE}" == "authenticate-session-owner" ]]; then RESULT="PASS" else PSSO_CHECK=$(/usr/bin/security -q authorizationdb read "$SS_RULE" 2>&1 | /usr/bin/xmllint --xpath '//key[.="rule"]/following-sibling::array[1]/string/text()' -) if /usr/bin/grep -Fxq "authenticate-session-owner" <<<"$PSSO_CHECK"; then RESULT="PASS" fi fi echo $RESULT If the result is not "PASS", this is a finding.
Fix: F-81110r1149331_fix
Configure the macOS system to disable login to other users' active and locked sessions with the following command: SS_RULE=$(/usr/bin/security -q authorizationdb read system.login.screensaver 2>&1 | /usr/bin/xmllint --xpath "//dict/key[.='rule']/following-sibling::array[1]/string/text()" -) if [[ "$SS_RULE" == *psso* ]]; then /usr/bin/security -q authorizationdb read psso-screensaver > "/tmp/psso-screensaver-mscp.plist" /usr/bin/sed -i.bak 's/<string>authenticate-session-owner-or-admin<\/string>/<string>authenticate-session-owner<\/string>/' /tmp/psso-screensaver-mscp.plist /usr/bin/security -q authorizationdb write psso-screensaver-mscp < /tmp/psso-screensaver-mscp.plist /usr/bin/security -q authorizationdb write system.login.screensaver psso-screensaver-mscp 2>&1 else /usr/bin/security -q authorizationdb write system.login.screensaver "authenticate-session-owner" 2>&1 fi
- RMF Control
- IA-2
- Severity
- M
- CCI
- CCI-000764
- Version
- APPL-26-000100
- Vuln IDs
-
- V-277051
- Rule IDs
-
- SV-277051r1148605_rule
Checks: C-81206r1148603_chk
Verify the macOS system is configured to disable root login with the following command: /usr/bin/dscl . -read /Users/root UserShell 2>&1 | /usr/bin/grep -c "/usr/bin/false" If the result is not "1", this is a finding.
Fix: F-81111r1148604_fix
Configure the macOS system to disable root login with the following command: /usr/bin/dscl . -create /Users/root UserShell /usr/bin/false
- RMF Control
- SC-10
- Severity
- M
- CCI
- CCI-001133
- Version
- APPL-26-000110
- Vuln IDs
-
- V-277052
- Rule IDs
-
- SV-277052r1148608_rule
Checks: C-81207r1148606_chk
Verify the macOS system is configured to set the SSH ServerAliveInterval to 900 with the following command: ret="pass" for u in $(/usr/bin/dscl . -list /Users UniqueID | /usr/bin/awk '$2 > 500 {print $1}'); do sshCheck=$(/usr/bin/sudo -u $u /usr/bin/ssh -G . | /usr/bin/grep -c "^serveraliveinterval 900") if [[ "$sshCheck" == "0" ]]; then ret="fail" break fi done /bin/echo $ret If the result is not "pass", this is a finding.
Fix: F-81112r1148607_fix
Configure the macOS system to set the SSH ServerAliveInterval to 900 with the following command: include_dir=$(/usr/bin/awk '/^Include/ {print $2}' /etc/ssh/ssh_config | /usr/bin/tr -d '*') ssh_config_string=("ServerAliveInterval 900") for ssh_config in $ssh_config_string; do ssh_setting=$(echo $ssh_config | /usr/bin/cut -d " " -f1) /usr/bin/grep -qEi "^$ssh_setting" "${include_dir}01-mscp-ssh.conf" && /usr/bin/sed -i "" "s/^$ssh_setting.*/${ssh_config}/" "${include_dir}01-mscp-ssh.conf" || echo "$ssh_config" >> "${include_dir}01-mscp-ssh.conf" for u in $(/usr/bin/dscl . list /users shell | /usr/bin/egrep -v '(^_)|(root)|(/usr/bin/false)' | /usr/bin/awk '{print $1}'); do config=$(/usr/bin/sudo -u $u /usr/bin/ssh -Gv . 2>&1) configfiles=$(echo "$config" | /usr/bin/awk '/Reading configuration data/ {print $NF}'| /usr/bin/tr -d '\r') configarray=( ${(f)configfiles} ) if ! echo $config | /usr/bin/grep -q -i "$ssh_config" ; then for c in $configarray; do if [[ "$c" == "/etc/ssh/crypto.conf" ]]; then continue fi /usr/bin/sudo -u $u /usr/bin/grep -qEi "^$ssh_setting" "$c" && /usr/bin/sed -i "" "s/^$ssh_setting.*/${ssh_config}/I" "$c" if [[ "$c" =~ ".ssh/config" ]]; then if /usr/bin/grep -qEi "$ssh_setting" "$c" 2> /dev/null; then old_file=$(cat ~$u/.ssh/config) echo "$ssh_config" > ~$u/.ssh/config echo "$old_file" >> ~$u/.ssh/config fi fi done fi done done
- RMF Control
- SC-10
- Severity
- M
- CCI
- CCI-001133
- Version
- APPL-26-000120
- Vuln IDs
-
- V-277053
- Rule IDs
-
- SV-277053r1148611_rule
Checks: C-81208r1148609_chk
Verify the macOS system is configured to set the SSHD Channel Timeout to 900 with the following command: /usr/sbin/sshd -G | /usr/bin/awk '/channeltimeout/{print $2}' If the result is not "900", this is a finding.
Fix: F-81113r1148610_fix
Configure the macOS system to set the SSHD ChannelTimeout to 900 with the following command: include_dir=$(/usr/bin/awk '/^Include/ {print $2}' /etc/ssh/sshd_config | /usr/bin/tr -d '*') if [[ -z $include_dir ]]; then /usr/bin/sed -i.bk "1s/.*/Include \/etc\/ssh\/sshd_config.d\/\*/" /etc/ssh/sshd_config fi /usr/bin/grep -qxF 'channeltimeout session:*=900' "${include_dir}01-mscp-sshd.conf" 2>/dev/null || echo "channeltimeout session:*=900" >> "${include_dir}01-mscp-sshd.conf" for file in $(ls ${include_dir}); do if [[ "$file" == "100-macos.conf" ]]; then continue fi if [[ "$file" == "01-mscp-sshd.conf" ]]; then break fi /bin/mv ${include_dir}${file} ${include_dir}20-${file} done
- RMF Control
- SC-10
- Severity
- M
- CCI
- CCI-001133
- Version
- APPL-26-000130
- Vuln IDs
-
- V-277054
- Rule IDs
-
- SV-277054r1148614_rule
Checks: C-81209r1148612_chk
Verify the macOS system is configured to set the SSHD unused connection timeout to 900 with the following command: /usr/sbin/sshd -G | /usr/bin/awk '/unusedconnectiontimeout/{print $2}' If the result is not "900", this is a finding.
Fix: F-81114r1148613_fix
Configure the macOS system to set the SSHD unused connection timeout to 900 with the following command: include_dir=$(/usr/bin/awk '/^Include/ {print $2}' /etc/ssh/sshd_config | /usr/bin/tr -d '*') if [[ -z $include_dir ]]; then /usr/bin/sed -i.bk "1s/.*/Include \/etc\/ssh\/sshd_config.d\/\*/" /etc/ssh/sshd_config fi /usr/bin/grep -qxF 'unusedconnectiontimeout 900' "${include_dir}01-mscp-sshd.conf" 2>/dev/null || echo "unusedconnectiontimeout 900" >> "${include_dir}01-mscp-sshd.conf" for file in $(ls ${include_dir}); do if [[ "$file" == "100-macos.conf" ]]; then continue fi if [[ "$file" == "01-mscp-sshd.conf" ]]; then break fi /bin/mv ${include_dir}${file} ${include_dir}20-${file} done
- RMF Control
- SC-10
- Severity
- M
- CCI
- CCI-001133
- Version
- APPL-26-000140
- Vuln IDs
-
- V-277055
- Rule IDs
-
- SV-277055r1148617_rule
Checks: C-81210r1148615_chk
Verify the macOS system is configured to set SSH Active Server Alive Maximum to 0 with the following command: ret="pass" for u in $(/usr/bin/dscl . -list /Users UniqueID | /usr/bin/awk '$2 > 500 {print $1}'); do sshCheck=$(/usr/bin/sudo -u $u /usr/bin/ssh -G . | /usr/bin/grep -c "^serveralivecountmax 0") if [[ "$sshCheck" == "0" ]]; then ret="fail" break fi done /bin/echo $ret If the result is not "pass", this is a finding.
Fix: F-81115r1148616_fix
Configure the macOS system to set SSH Active Server Alive Maximum to 0 with the following command: include_dir=$(/usr/bin/awk '/^Include/ {print $2}' /etc/ssh/ssh_config | /usr/bin/tr -d '*') ssh_config=("ServerAliveCountMax 0") ssh_setting=$(echo $ssh_config | /usr/bin/cut -d " " -f1) /usr/bin/grep -qEi "^$ssh_setting" "${include_dir}01-mscp-ssh.conf" && /usr/bin/sed -i "" "s/^$ssh_setting.*/${ssh_config}/" "${include_dir}01-mscp-ssh.conf" || echo "$ssh_config" >> "${include_dir}01-mscp-ssh.conf" for u in $(/usr/bin/dscl . list /users shell | /usr/bin/egrep -v '(^_)|(root)|(/usr/bin/false)' | /usr/bin/awk '{print $1}'); do config=$(/usr/bin/sudo -u $u /usr/bin/ssh -Gv . 2>&1) configfiles=$(echo "$config" | /usr/bin/awk '/Reading configuration data/ {print $NF}'| /usr/bin/tr -d '\r') configarray=( ${(f)configfiles} ) if ! echo $config | /usr/bin/grep -q -i "$ssh_config" ; then for c in $configarray; do if [[ "$c" == "/etc/ssh/crypto.conf" ]]; then continue fi /usr/bin/sudo -u $u /usr/bin/grep -qEi "^$ssh_setting" "$c" && /usr/bin/sed -i "" "s/^$ssh_setting.*/${ssh_config}/I" "$c" if [[ "$c" =~ ".ssh/config" ]]; then if /usr/bin/grep -qEi "$ssh_setting" "$c" 2> /dev/null; then old_file=$(cat ~$u/.ssh/config) echo "$ssh_config" > ~$u/.ssh/config echo "$old_file" >> ~$u/.ssh/config fi fi done fi done
- RMF Control
- AC-12
- Severity
- M
- CCI
- CCI-002361
- Version
- APPL-26-000160
- Vuln IDs
-
- V-277056
- Rule IDs
-
- SV-277056r1148620_rule
Checks: C-81211r1148618_chk
Verify the macOS system is configured to enforce auto logout after 86400 seconds of inactivity with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('.GlobalPreferences')\ .objectForKey('com.apple.autologout.AutoLogOutDelay').js EOS If the result is not "86400", this is a finding.
Fix: F-81116r1148619_fix
Configure the macOS system to enforce auto logout after 86400 seconds of inactivity by installing the "com.apple.GlobalPreferences" configuration profile.
- RMF Control
- Severity
- M
- CCI
- CCI-004923
- Version
- APPL-26-000170
- Vuln IDs
-
- V-277057
- Rule IDs
-
- SV-277057r1148623_rule
Checks: C-81212r1148621_chk
Verify the macOS system is configured to use an authorized time server with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.MCX')\ .objectForKey('timeServer').js EOS If the result is not an authoritative time server that is synchronized with redundant USNO time servers as designated for the appropriate DOD network, this is a finding.
Fix: F-81117r1148622_fix
Configure the macOS system to use an authorized time server by installing the "com.apple.MCX" configuration profile.
- RMF Control
- Severity
- M
- CCI
- CCI-004923
- Version
- APPL-26-000180
- Vuln IDs
-
- V-277058
- Rule IDs
-
- SV-277058r1149404_rule
Checks: C-81213r1149354_chk
Verify the macOS system is configured to enable the time synchronization daemon with the following command: /bin/launchctl print system | /usr/bin/grep -c -E '\tcom.apple.timed' If the result is not "1", this is a finding.
Fix: F-81118r1148625_fix
Configure the macOS system to enable the time synchronization daemon with the following command: /bin/launchctl load -w /System/Library/LaunchDaemons/com.apple.timed.plist Note: The service "timed" cannot be unloaded or loaded while System Integrity Protection (SIP) is enabled.
- RMF Control
- AU-12
- Severity
- M
- CCI
- CCI-000172
- Version
- APPL-26-000190
- Vuln IDs
-
- V-277059
- Rule IDs
-
- SV-277059r1148629_rule
Checks: C-81214r1148627_chk
Verify the macOS system is configured to log privilege escalation with the following command: /usr/bin/sudo /usr/bin/sudo -V | /usr/bin/grep -c "Log when a command is allowed by sudoers" If the result is not "1", this is a finding.
Fix: F-81119r1148628_fix
Configure the macOS system to log privilege escalation with the following command: /usr/bin/find /etc/sudoers* -type f -exec sed -i '' '/^Defaults[[:blank:]]*\!log_allowed/s/^/# /' '{}' \; /bin/echo "Defaults log_allowed" >> /etc/sudoers.d/mscp
- RMF Control
- AC-2
- Severity
- M
- CCI
- CCI-000018
- Version
- APPL-26-001001
- Vuln IDs
-
- V-277060
- Rule IDs
-
- SV-277060r1148632_rule
Checks: C-81215r1148630_chk
Verify the macOS system is configured to audit privileged access with the following command: /usr/bin/awk -F':' '/^flags/ { print $NF }' /etc/security/audit_control | /usr/bin/tr ',' '\n' | /usr/bin/grep -Ec 'ad' If the result is not "1", this is a finding.
Fix: F-81120r1148631_fix
Configure the macOS system to audit privileged access with the following command: /usr/bin/grep -qE "^flags.*[^-]ad" /etc/security/audit_control || /usr/bin/sed -i.bak '/^flags/ s/$/,ad/' /etc/security/audit_control; /usr/sbin/audit -s A text editor may also be used to implement the required updates to the "/etc/security/audit_control" file.
- RMF Control
- AC-17
- Severity
- M
- CCI
- CCI-000067
- Version
- APPL-26-001002
- Vuln IDs
-
- V-277061
- Rule IDs
-
- SV-277061r1148635_rule
Checks: C-81216r1148633_chk
Verify the macOS system is configured to audit all login and logout events with the following command: /usr/bin/awk -F':' '/^flags/ { print $NF }' /etc/security/audit_control | /usr/bin/tr ',' '\n' | /usr/bin/grep -Ec '^lo' If the result is not "1", this is a finding.
Fix: F-81121r1148634_fix
Configure the macOS system to audit all login and logout events with the following command: /usr/bin/grep -qE "^flags.*[^-]lo" /etc/security/audit_control || /usr/bin/sed -i.bak '/^flags/ s/$/,lo/' /etc/security/audit_control; /usr/sbin/audit -s A text editor may also be used to implement the required updates to the "/etc/security/audit_control" file.
- RMF Control
- AU-3
- Severity
- M
- CCI
- CCI-000130
- Version
- APPL-26-001003
- Vuln IDs
-
- V-277062
- Rule IDs
-
- SV-277062r1149405_rule
Checks: C-81217r1149356_chk
Verify the macOS system is configured to enable the auditd service with the following command: LAUNCHD_RUNNING=$(/bin/launchctl print system | /usr/bin/grep -c -E '\tcom.apple.auditd') AUDITD_RUNNING=$(/usr/sbin/audit -c | /usr/bin/grep -c "AUC_AUDITING") if [[ $LAUNCHD_RUNNING == 1 ]] && [[ -e /etc/security/audit_control ]] && [[ $AUDITD_RUNNING == 1 ]]; then echo "pass" else echo "fail" fi If the result is not "pass", this is a finding.
Fix: F-81122r1148637_fix
Configure the macOS system to enable the auditd service with the following command: if [[ ! -e /etc/security/audit_control ]] && [[ -e /etc/security/audit_control.example ]];then /bin/cp /etc/security/audit_control.example /etc/security/audit_control fi /bin/launchctl enable system/com.apple.auditd /bin/launchctl bootstrap system /System/Library/LaunchDaemons/com.apple.auditd.plist /usr/sbin/audit -i
- RMF Control
- AU-9
- Severity
- M
- CCI
- CCI-000162
- Version
- APPL-26-001012
- Vuln IDs
-
- V-277063
- Rule IDs
-
- SV-277063r1148641_rule
Checks: C-81218r1148639_chk
Verify the macOS system is configured with audit log files owned by root with the following command: /bin/ls -n $(/usr/bin/grep '^dir' /etc/security/audit_control | /usr/bin/awk -F: '{print $2}') | /usr/bin/awk '{s+=$3} END {print s}' If the result is not "0", this is a finding.
Fix: F-81123r1148640_fix
Configure the macOS system with audit log files owned by root with the following command: /usr/sbin/chown -R root /var/audit/*
- RMF Control
- AU-9
- Severity
- M
- CCI
- CCI-000162
- Version
- APPL-26-001013
- Vuln IDs
-
- V-277064
- Rule IDs
-
- SV-277064r1148644_rule
Checks: C-81219r1148642_chk
Verify the macOS system is configured with audit log folders owned by root with the following command: /bin/ls -dn $(/usr/bin/grep '^dir' /etc/security/audit_control | /usr/bin/awk -F: '{print $2}') | /usr/bin/awk '{print $3}' If the result is not "0", this is a finding.
Fix: F-81124r1148643_fix
Configure the macOS system with audit log folders owned by root with the following command: /usr/sbin/chown root /var/audit
- RMF Control
- AU-9
- Severity
- M
- CCI
- CCI-000162
- Version
- APPL-26-001014
- Vuln IDs
-
- V-277065
- Rule IDs
-
- SV-277065r1148647_rule
Checks: C-81220r1148645_chk
Verify the macOS system is configured with audit log files group-owned by wheel with the following command: /bin/ls -n $(/usr/bin/grep '^dir' /etc/security/audit_control | /usr/bin/awk -F: '{print $2}') | /usr/bin/awk '{s+=$4} END {print s}' If the result is not "0", this is a finding.
Fix: F-81125r1148646_fix
Configure the macOS system with audit log files group-owned by wheel with the following command: /usr/bin/chgrp -R wheel /var/audit/*
- RMF Control
- AU-9
- Severity
- M
- CCI
- CCI-000162
- Version
- APPL-26-001015
- Vuln IDs
-
- V-277066
- Rule IDs
-
- SV-277066r1148650_rule
Checks: C-81221r1148648_chk
Verify the macOS system is configured with audit log folders group-owned by wheel with the following command: /bin/ls -dn $(/usr/bin/grep '^dir' /etc/security/audit_control | /usr/bin/awk -F: '{print $2}') | /usr/bin/awk '{print $4}' If the result is not "0", this is a finding.
Fix: F-81126r1148649_fix
Configure the macOS system with audit log folders group-owned by wheel with the following command: /usr/bin/chgrp wheel /var/audit
- RMF Control
- AU-9
- Severity
- M
- CCI
- CCI-000162
- Version
- APPL-26-001016
- Vuln IDs
-
- V-277067
- Rule IDs
-
- SV-277067r1148653_rule
Checks: C-81222r1148651_chk
Verify the macOS system is configured with audit log files set to mode 440 or less with the following command: /bin/ls -l $(/usr/bin/grep '^dir' /etc/security/audit_control | /usr/bin/awk -F: '{print $2}') | /usr/bin/awk '!/-r--r-----|current|total/{print $1}' | /usr/bin/wc -l | /usr/bin/tr -d ' ' If the result is not "0", this is a finding.
Fix: F-81127r1148652_fix
Configure the macOS system with audit log files set to mode 440 with the following command: /bin/chmod 440 /var/audit/*
- RMF Control
- AU-9
- Severity
- M
- CCI
- CCI-000162
- Version
- APPL-26-001017
- Vuln IDs
-
- V-277068
- Rule IDs
-
- SV-277068r1148656_rule
Checks: C-81223r1148654_chk
Verify the macOS system is configured with audit log folders set to mode 700 or less permissive with the following command: /usr/bin/stat -f %A $(/usr/bin/grep '^dir' /etc/security/audit_control | /usr/bin/awk -F: '{print $2}') If the result is not a mode of 700 or less permissive, this is a finding.
Fix: F-81128r1148655_fix
Configure the macOS system with audit log folders set to mode 700 with the following command: /bin/chmod 700 /var/audit
- RMF Control
- AU-9
- Severity
- M
- CCI
- CCI-000162
- Version
- APPL-26-001020
- Vuln IDs
-
- V-277069
- Rule IDs
-
- SV-277069r1148659_rule
Checks: C-81224r1148657_chk
Verify the macOS system is configured to audit all deletions of object attributes with the following command: /usr/bin/awk -F':' '/^flags/ { print $NF }' /etc/security/audit_control | /usr/bin/tr ',' '\n' | /usr/bin/grep -Ec '\-fd' If the result is not "1", this is a finding.
Fix: F-81129r1148658_fix
Configure the macOS system to audit all deletions of object attributes with the following command: /usr/bin/grep -qE "^flags.*-fd" /etc/security/audit_control || /usr/bin/sed -i.bak '/^flags/ s/$/,-fd/' /etc/security/audit_control;/usr/sbin/audit -s
- RMF Control
- AU-9
- Severity
- M
- CCI
- CCI-000162
- Version
- APPL-26-001021
- Vuln IDs
-
- V-277070
- Rule IDs
-
- SV-277070r1148662_rule
Checks: C-81225r1148660_chk
Verify the macOS system is configured to audit all changes of object attributes with the following command: /usr/bin/awk -F':' '/^flags/ { print $NF }' /etc/security/audit_control | /usr/bin/tr ',' '\n' | /usr/bin/grep -Ec '^fm' If the result is not "1", this is a finding.
Fix: F-81130r1148661_fix
Configure the macOS system to audit all changes of object attributes with the following command: /usr/bin/grep -qE "^flags.*fm" /etc/security/audit_control || /usr/bin/sed -i.bak '/^flags/ s/$/,fm/' /etc/security/audit_control;/usr/sbin/audit -s
- RMF Control
- AU-9
- Severity
- M
- CCI
- CCI-000162
- Version
- APPL-26-001022
- Vuln IDs
-
- V-277071
- Rule IDs
-
- SV-277071r1148665_rule
Checks: C-81226r1148663_chk
Verify the macOS system is configured to audit all failed read actions on the system with the following command: /usr/bin/awk -F':' '/^flags/ { print $NF }' /etc/security/audit_control | /usr/bin/tr ',' '\n' | /usr/bin/grep -Ec '\-fr' If the result is not "1", this is a finding.
Fix: F-81131r1148664_fix
Configure the macOS system to audit all failed read actions on the system with the following command: /usr/bin/grep -qE "^flags.*-fr" /etc/security/audit_control || /usr/bin/sed -i.bak '/^flags/ s/$/,-fr/' /etc/security/audit_control;/usr/sbin/audit -s
- RMF Control
- AU-9
- Severity
- M
- CCI
- CCI-000162
- Version
- APPL-26-001023
- Vuln IDs
-
- V-277072
- Rule IDs
-
- SV-277072r1148668_rule
Checks: C-81227r1148666_chk
Verify the macOS system is configured to audit all failed write actions on the system with the following command: /usr/bin/awk -F':' '/^flags/ { print $NF }' /etc/security/audit_control | /usr/bin/tr ',' '\n' | /usr/bin/grep -Ec '\-fw' If the result is not "1", this is a finding.
Fix: F-81132r1148667_fix
Configure the macOS system to audit all failed write actions on the system with the following command: /usr/bin/grep -qE "^flags.*-fw" /etc/security/audit_control || /usr/bin/sed -i.bak '/^flags/ s/$/,-fw/' /etc/security/audit_control;/usr/sbin/audit -s
- RMF Control
- Severity
- M
- CCI
- CCI-003938
- Version
- APPL-26-001024
- Vuln IDs
-
- V-277073
- Rule IDs
-
- SV-277073r1148671_rule
Checks: C-81228r1148669_chk
Verify the macOS system is configured to audit all failed program execution on the system with the following command: /usr/bin/awk -F':' '/^flags/ { print $NF }' /etc/security/audit_control | /usr/bin/tr ',' '\n' | /usr/bin/grep -Ec '\-ex' If the result is not "1", this is a finding.
Fix: F-81133r1148670_fix
Configure the macOS system to audit all failed program execution on the system with the following command: /usr/bin/grep -qE "^flags.*-ex" /etc/security/audit_control || /usr/bin/sed -i.bak '/^flags/ s/$/,-ex/' /etc/security/audit_control; /usr/sbin/audit -s
- RMF Control
- AU-4
- Severity
- L
- CCI
- CCI-001849
- Version
- APPL-26-001029
- Vuln IDs
-
- V-277074
- Rule IDs
-
- SV-277074r1148674_rule
Checks: C-81229r1148672_chk
Verify the macOS system is configured to set audit retention to seven days with the following command: /usr/bin/awk -F: '/expire-after/{print $2}' /etc/security/audit_control If the result is not "7d", this is a finding.
Fix: F-81134r1148673_fix
Configure the macOS system to set audit retention to seven days with the following command: /usr/bin/sed -i.bak 's/^expire-after.*/expire-after:7d/' /etc/security/audit_control; /usr/sbin/audit -s
- RMF Control
- AU-5
- Severity
- M
- CCI
- CCI-000139
- Version
- APPL-26-001030
- Vuln IDs
-
- V-277075
- Rule IDs
-
- SV-277075r1148677_rule
Checks: C-81230r1148675_chk
Verify the macOS system is configured to require a minimum of 25 percent free disk space for audit record storage with the following command: /usr/bin/awk -F: '/^minfree/{print $2}' /etc/security/audit_control If the result is not "25", this is a finding.
Fix: F-81135r1148676_fix
Configure the macOS system to require a minimum of 25 percent free disk space for audit record storage with the following command: /usr/bin/sed -i.bak 's/.*minfree.*/minfree:25/' /etc/security/audit_control; /usr/sbin/audit -s
- RMF Control
- AU-5
- Severity
- M
- CCI
- CCI-001858
- Version
- APPL-26-001031
- Vuln IDs
-
- V-277076
- Rule IDs
-
- SV-277076r1148680_rule
Checks: C-81231r1148678_chk
Verify the macOS system is configured to produce audit failure notification with the following command: /usr/bin/grep -c "logger -s -p" /etc/security/audit_warn If the result is not "1", this is a finding.
Fix: F-81136r1148679_fix
Configure the macOS system to produce audit failure notification with the following command: /usr/bin/sed -i.bak 's/logger -p/logger -s -p/' /etc/security/audit_warn; /usr/sbin/audit -s
- RMF Control
- Severity
- M
- CCI
- CCI-003938
- Version
- APPL-26-001044
- Vuln IDs
-
- V-277077
- Rule IDs
-
- SV-277077r1148683_rule
Checks: C-81232r1148681_chk
Verify the macOS system is configured to audit login events with the following command: /usr/bin/awk -F':' '/^flags/ { print $NF }' /etc/security/audit_control | /usr/bin/tr ',' '\n' | /usr/bin/grep -Ec 'aa' If the result is not "1", this is a finding.
Fix: F-81137r1148682_fix
Configure the macOS system to audit login events with the following command: /usr/bin/grep -qE "^flags.*[^-]aa" /etc/security/audit_control || /usr/bin/sed -i.bak '/^flags/ s/$/,aa/' /etc/security/audit_control; /usr/sbin/audit -s
- RMF Control
- IA-5
- Severity
- M
- CCI
- CCI-000185
- Version
- APPL-26-001060
- Vuln IDs
-
- V-277078
- Rule IDs
-
- SV-277078r1148686_rule
Checks: C-81233r1148684_chk
Verify the macOS system is configured to check the revocation status of user certificates with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.security.smartcard')\ .objectForKey('checkCertificateTrust').js EOS If the result is not "2", this is a finding.
Fix: F-81138r1148685_fix
Configure the macOS system to check the revocation status of user certificates by installing the "com.apple.security.smartcard" configuration profile. Note: To ensure continued access to the operating system, consult the supplemental guidance provided with the STIG before applying the configuration profile.
- RMF Control
- Severity
- M
- CCI
- CCI-004045
- Version
- APPL-26-001100
- Vuln IDs
-
- V-277079
- Rule IDs
-
- SV-277079r1148689_rule
Checks: C-81234r1148687_chk
Verify the macOS system is configured to disable root login for SSH with the following command: /usr/sbin/sshd -G | /usr/bin/awk '/permitrootlogin/{print $2}' If the result is not "no", this is a finding.
Fix: F-81139r1148688_fix
Configure the macOS system to disable root login for SSH with the following command: include_dir=$(/usr/bin/awk '/^Include/ {print $2}' /etc/ssh/sshd_config | /usr/bin/tr -d '*') if [[ -z $include_dir ]]; then /usr/bin/sed -i.bk "1s/.*/Include \/etc\/ssh\/sshd_config.d\/\*/" /etc/ssh/sshd_config fi /usr/bin/grep -qxF 'permitrootlogin no' "${include_dir}01-mscp-sshd.conf" 2>/dev/null || echo "permitrootlogin no" >> "${include_dir}01-mscp-sshd.conf" for file in $(ls ${include_dir}); do if [[ "$file" == "100-macos.conf" ]]; then continue fi if [[ "$file" == "01-mscp-sshd.conf" ]]; then break fi /bin/mv ${include_dir}${file} ${include_dir}20-${file} done
- RMF Control
- AU-9
- Severity
- M
- CCI
- CCI-000162
- Version
- APPL-26-001110
- Vuln IDs
-
- V-277080
- Rule IDs
-
- SV-277080r1148692_rule
Checks: C-81235r1148690_chk
Verify the macOS system is configured with the audit_control group to wheel with the following command: /bin/ls -dn /etc/security/audit_control | /usr/bin/awk '{print $4}' If the result is not "0", this is a finding.
Fix: F-81140r1148691_fix
Configure the macOS system with the audit_control group to wheel with the following command: /usr/bin/chgrp wheel /etc/security/audit_control
- RMF Control
- AU-9
- Severity
- M
- CCI
- CCI-000162
- Version
- APPL-26-001120
- Vuln IDs
-
- V-277081
- Rule IDs
-
- SV-277081r1148695_rule
Checks: C-81236r1148693_chk
Verify the macOS system is configured with the audit_control owner to root with the following command: /bin/ls -dn /etc/security/audit_control | /usr/bin/awk '{print $3}' If the result is not "0", this is a finding.
Fix: F-81141r1148694_fix
Configure the macOS system with the audit_control owner to root with the following command: /usr/sbin/chown root /etc/security/audit_control
- RMF Control
- AU-9
- Severity
- M
- CCI
- CCI-000162
- Version
- APPL-26-001130
- Vuln IDs
-
- V-277082
- Rule IDs
-
- SV-277082r1148698_rule
Checks: C-81237r1148696_chk
Verify the macOS system is configured with the audit_control to mode 440 or less with the following command: /bin/ls -l /etc/security/audit_control | /usr/bin/awk '!/-r--[r-]-----|current|total/{print $1}' | /usr/bin/wc -l | /usr/bin/xargs If the result is not "0", this is a finding.
Fix: F-81142r1148697_fix
Configure the macOS system with the audit_control to mode 440 with the following command: /bin/chmod 440 /etc/security/audit_control
- RMF Control
- AU-9
- Severity
- M
- CCI
- CCI-000162
- Version
- APPL-26-001140
- Vuln IDs
-
- V-277083
- Rule IDs
-
- SV-277083r1148701_rule
Checks: C-81238r1148699_chk
Verify the macOS system is configured without ACLs applied to audit_control with the following command: /bin/ls -le /etc/security/audit_control | /usr/bin/awk '{print $1}' | /usr/bin/grep -c ":" If the result is not "0", this is a finding.
Fix: F-81143r1148700_fix
Configure the macOS system without ACLs applied to audit_control with the following command: /bin/chmod -N /etc/security/audit_control
- RMF Control
- IA-5
- Severity
- H
- CCI
- CCI-000186
- Version
- APPL-26-001150
- Vuln IDs
-
- V-277084
- Rule IDs
-
- SV-277084r1148704_rule
Checks: C-81239r1148702_chk
Verify the macOS system is configured to disable password authentication for SSH with the following command: /usr/sbin/sshd -G | /usr/bin/grep -Ec '^(passwordauthentication\s+no|kbdinteractiveauthentication\s+no)' If the result is not "2", this is a finding.
Fix: F-81144r1148703_fix
Configure the macOS system to disable password authentication for SSH with the following command: include_dir=$(/usr/bin/awk '/^Include/ {print $2}' /etc/ssh/sshd_config | /usr/bin/tr -d '*') if [[ -z $include_dir ]]; then /usr/bin/sed -i.bk "1s/.*/Include \/etc\/ssh\/sshd_config.d\/\*/" /etc/ssh/sshd_config fi echo "passwordauthentication no" >> "${include_dir}01-mscp-sshd.conf" echo "kbdinteractiveauthentication no" >> "${include_dir}01-mscp-sshd.conf" for file in $(ls ${include_dir}); do if [[ "$file" == "100-macos.conf" ]]; then continue fi if [[ "$file" == "01-mscp-sshd.conf" ]]; then break fi /bin/mv ${include_dir}${file} ${include_dir}20-${file} done
- RMF Control
- AC-3
- Severity
- M
- CCI
- CCI-000213
- Version
- APPL-26-002001
- Vuln IDs
-
- V-277085
- Rule IDs
-
- SV-277085r1148707_rule
Checks: C-81240r1148705_chk
Verify the macOS system is configured to disable SMB sharing with the following command: /bin/launchctl print-disabled system | /usr/bin/grep -c '"com.apple.smbd" => disabled' If the result is not "1", this is a finding.
Fix: F-81145r1148706_fix
Configure the macOS system to disable SMB sharing with the following command: /bin/launchctl disable system/com.apple.smbd The system may need a restart for the update to take effect.
- RMF Control
- AC-3
- Severity
- M
- CCI
- CCI-000213
- Version
- APPL-26-002003
- Vuln IDs
-
- V-277086
- Rule IDs
-
- SV-277086r1148710_rule
Checks: C-81241r1148708_chk
Verify the macOS system is configured to disable NFS service with the following commands: isDisabled=$(/sbin/nfsd status | /usr/bin/awk '/nfsd service/ {print $NF}') if [[ "$isDisabled" == "disabled" ]] && [[ -z $(/usr/bin/pgrep nfsd) ]]; then echo "pass" else echo "fail" fi If the result is not "pass", this is a finding.
Fix: F-81146r1148709_fix
Configure the macOS system to disable NFS service with the following commands: /bin/launchctl disable system/com.apple.nfsd /bin/rm -rf /etc/exports The system may need a restart for the update to take effect.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002004
- Vuln IDs
-
- V-277087
- Rule IDs
-
- SV-277087r1149413_rule
Checks: C-81242r1148711_chk
Verify the macOS system is configured to disable Location Services with the following command: /usr/bin/sudo -u _locationd /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.locationd')\ .objectForKey('LocationServicesEnabled').js EOS If the result is not "false", this is a finding.
Fix: F-81147r1149372_fix
Configure the macOS system to disable Location Services with the following command: /usr/bin/defaults write /var/db/locationd/Library/Preferences/ByHost/com.apple.locationd LocationServicesEnabled -bool false; pid=$(/bin/launchctl print system | /usr/bin/awk '/\tcom.apple.locationd/ {print $1}') kill -9 $pid
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002005
- Vuln IDs
-
- V-277088
- Rule IDs
-
- SV-277088r1148716_rule
Checks: C-81243r1148714_chk
Verify the macOS system is configured to disable Bonjour multicast with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.mDNSResponder')\ .objectForKey('NoMulticastAdvertisements').js EOS If the result is not "true", this is a finding.
Fix: F-81148r1148715_fix
Configure the macOS system to disable Bonjour multicast by installing the "com.apple.mDNSResponder" configuration profile.
- RMF Control
- AC-3
- Severity
- M
- CCI
- CCI-000213
- Version
- APPL-26-002006
- Vuln IDs
-
- V-277089
- Rule IDs
-
- SV-277089r1149391_rule
Checks: C-81244r1149324_chk
Verify the macOS system is configured to disable UUCP service with the following command: result="FAIL" enabled=$(/bin/launchctl print-disabled system | /usr/bin/grep '"com.apple.uucp" => enabled') running=$(/bin/launchctl print system/com.apple.uucp 2>/dev/null) if [[ -z "$running" ]] && [[ -z "$enabled" ]]; then result="PASS" elif [[ -n "$running" ]]; then result=result+" RUNNING" elif [[ -n "$enabled" ]]; then result=result+" ENABLED" fi echo $result If the result is not "PASS", this is a finding.
Fix: F-81149r1149325_fix
Configure the macOS system to disable UUCP service with the following command: /bin/launchctl bootout system/com.apple.uucp /bin/launchctl disable system/com.apple.uucp The system may need a restart for the update to take effect.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002007
- Vuln IDs
-
- V-277090
- Rule IDs
-
- SV-277090r1148722_rule
Checks: C-81245r1148720_chk
Verify the macOS system is configured to disable Internet Sharing with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.MCX')\ .objectForKey('forceInternetSharingOff').js EOS If the result is not "true", this is a finding.
Fix: F-81150r1148721_fix
Configure the macOS system to disable Internet Sharing by installing the "com.apple.MCX" configuration profile.
- RMF Control
- AC-3
- Severity
- M
- CCI
- CCI-000213
- Version
- APPL-26-002008
- Vuln IDs
-
- V-277091
- Rule IDs
-
- SV-277091r1149419_rule
Checks: C-81246r1149384_chk
Verify the macOS system is configured to disable the built-in web server with the following command: result="FAIL" enabled=$(/bin/launchctl print-disabled system | /usr/bin/grep '"org.apache.httpd" => enabled') running=$(/bin/launchctl print system/org.apache.httpd 2>/dev/null) if [[ -z "$running" ]] && [[ -z "$enabled" ]]; then result="PASS" elif [[ -n "$running" ]]; then result=result+" RUNNING" elif [[ -n "$enabled" ]]; then result=result+" ENABLED" fi echo $result If the result is not "PASS", this is a finding.
Fix: F-81151r1149385_fix
Configure the macOS system to disable the built-in web server with the following command: /usr/sbin/apachectl stop 2>/dev/null /bin/launchctl disable system/org.apache.httpd The system may need a restart for the update to take effect.
- RMF Control
- AC-3
- Severity
- M
- CCI
- CCI-000213
- Version
- APPL-26-002009
- Vuln IDs
-
- V-277092
- Rule IDs
-
- SV-277092r1148728_rule
Checks: C-81247r1148726_chk
Verify the macOS system is configured to disable AirDrop with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowAirDrop').js EOS If the result is not "false", this is a finding.
Fix: F-81152r1148727_fix
Configure the macOS system to disable AirDrop by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002010
- Vuln IDs
-
- V-277093
- Rule IDs
-
- SV-277093r1148731_rule
Checks: C-81248r1148729_chk
Verify the macOS system is configured to disable FaceTime.app with the following command: /usr/bin/osascript -l JavaScript << EOS function run() { let pref1 = ObjC.unwrap($.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess.new')\ .objectForKey('familyControlsEnabled')) let pathlist = $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess.new')\ .objectForKey('pathBlackList').js for ( let app in pathlist ) { if ( ObjC.unwrap(pathlist[app]) == "/Applications/FaceTime.app" && pref1 == true ){ return("true") } } return("false") } EOS If the result is not "true", this is a finding.
Fix: F-81153r1148730_fix
Configure the macOS system to disable FaceTime.app by installing the "com.apple.applicationaccess.new" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002012
- Vuln IDs
-
- V-277094
- Rule IDs
-
- SV-277094r1148734_rule
Checks: C-81249r1148732_chk
Verify the macOS system is configured to disable iCloud Calendar services with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowCloudCalendar').js EOS If the result is not "false", this is a finding.
Fix: F-81154r1148733_fix
Configure the macOS system to disable iCloud Calendar services by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002013
- Vuln IDs
-
- V-277095
- Rule IDs
-
- SV-277095r1148737_rule
Checks: C-81250r1148735_chk
Verify the macOS system is configured to disable iCloud Reminders with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowCloudReminders').js EOS If the result is not "false", this is a finding.
Fix: F-81155r1148736_fix
Configure the macOS system to disable iCloud Reminders by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002014
- Vuln IDs
-
- V-277096
- Rule IDs
-
- SV-277096r1148740_rule
Checks: C-81251r1148738_chk
Verify the macOS system is configured to disable iCloud Address Book with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowCloudAddressBook').js EOS If the result is not "false", this is a finding.
Fix: F-81156r1148739_fix
Configure the macOS system to disable iCloud Address Book by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002015
- Vuln IDs
-
- V-277097
- Rule IDs
-
- SV-277097r1148743_rule
Checks: C-81252r1148741_chk
Verify the macOS system is configured to disable iCloud Mail with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowCloudMail').js EOS If the result is not "false", this is a finding.
Fix: F-81157r1148742_fix
Configure the macOS system to disable iCloud Mail by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002016
- Vuln IDs
-
- V-277098
- Rule IDs
-
- SV-277098r1148746_rule
Checks: C-81253r1148744_chk
Verify the macOS system is configured to disable iCloud Notes with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowCloudNotes').js EOS If the result is not "false", this is a finding.
Fix: F-81158r1148745_fix
Configure the macOS system to disable iCloud Notes by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002017
- Vuln IDs
-
- V-277099
- Rule IDs
-
- SV-277099r1148749_rule
Checks: C-81254r1148747_chk
If the device or operating system does not have a camera installed, this requirement is not applicable. This requirement is not applicable to mobile devices (smartphones and tablets), where the use of the camera is a local authorizing official (AO) decision. This requirement is not applicable to dedicated video teleconference (VTC) suites in approved VTC locations that are centrally managed. For an external camera, if there is not a method for the operator to manually disconnect camera at the end of collaborative computing sessions, this is a finding. For a built-in camera, the camera must be protected by a camera cover (e.g., laptop camera cover slide) when not in use. If the built-in camera is not protected with a camera cover or is not physically disabled, this is a finding. If the camera is not disconnected, covered, or physically disabled, verify the macOS system is configured to disable the camera with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowCamera').js EOS If the result is not "false", this is a finding.
Fix: F-81159r1148748_fix
Configure the macOS system to disable the camera by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002020
- Vuln IDs
-
- V-277100
- Rule IDs
-
- SV-277100r1148752_rule
Checks: C-81255r1148750_chk
Verify the macOS system is configured to disable Siri with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowAssistant').js EOS If the result is not "false", this is a finding.
Fix: F-81160r1148751_fix
Configure the macOS system to disable Siri by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- SI-11
- Severity
- M
- CCI
- CCI-001312
- Version
- APPL-26-002021
- Vuln IDs
-
- V-277101
- Rule IDs
-
- SV-277101r1148755_rule
Checks: C-81256r1148753_chk
Verify the macOS system is configured to disable sending diagnostic and usage data to Apple with the following command: /usr/bin/osascript -l JavaScript << EOS function run() { let pref1 = $.NSUserDefaults.alloc.initWithSuiteName('com.apple.SubmitDiagInfo')\ .objectForKey('AutoSubmit').js let pref2 = $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowDiagnosticSubmission').js if ( pref1 == false && pref2 == false ){ return("true") } else { return("false") } } EOS If the result is not "true", this is a finding.
Fix: F-81161r1148754_fix
Configure the macOS system to disable sending diagnostic and usage data to Apple by installing the "com.apple.SubmitDiagInfo" configuration profile.
- RMF Control
- AC-3
- Severity
- M
- CCI
- CCI-000213
- Version
- APPL-26-002022
- Vuln IDs
-
- V-277102
- Rule IDs
-
- SV-277102r1148758_rule
Checks: C-81257r1148756_chk
Verify the macOS system is configured to disable Remote Apple Events with the following command: /bin/launchctl print-disabled system | /usr/bin/grep -c '"com.apple.AEServer" => disabled' If the result is not "1", this is a finding.
Fix: F-81162r1148757_fix
Configure the macOS system to disable Remote Apple Events with the following commands: /usr/sbin/systemsetup -setremoteappleevents off /bin/launchctl disable system/com.apple.AEServer Note: Systemsetup with -setremoteappleevents flag will fail unless Full Disk Access to systemsetup or its parent process is granted. This requires supervision.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002023
- Vuln IDs
-
- V-277103
- Rule IDs
-
- SV-277103r1148761_rule
Checks: C-81258r1148759_chk
Verify the macOS system is configured to disable sending audio recordings and transcripts with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.Accessibility')\ .objectForKey('AXSAudioDonationSiriImprovementEnabled').js EOS If the result is not "false", this is a finding.
Fix: F-81163r1148760_fix
Configure the macOS system to disable sending audio recordings and transcripts by installing the "com.apple.accessibility" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002024
- Vuln IDs
-
- V-277104
- Rule IDs
-
- SV-277104r1148764_rule
Checks: C-81259r1148762_chk
Verify the macOS system is configured to disable sending search data from Spotlight with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.assistant.support')\ .objectForKey('Search Queries Data Sharing Status').js EOS If the result is not "2", this is a finding.
Fix: F-81164r1148763_fix
Configure the macOS system to disable sending search data from Spotlight by installing the "com.apple.assistant.support" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002035
- Vuln IDs
-
- V-277105
- Rule IDs
-
- SV-277105r1149406_rule
Checks: C-81260r1149358_chk
Verify the macOS system is configured to disable Apple ID setup during Setup Assistant with the following command: /usr/bin/osascript -l JavaScript 2>/dev/null << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.SetupAssistant.managed')\ .objectForKey('SkipSetupItems').containsObject("AppleID") EOS If the result is not "true", this is a finding.
Fix: F-81165r1148766_fix
Configure the macOS system to disable Apple ID setup during Setup Assistant by installing the "com.apple.SetupAssistant.managed" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002036
- Vuln IDs
-
- V-277106
- Rule IDs
-
- SV-277106r1149398_rule
Checks: C-81261r1149342_chk
Verify the macOS system is configured to disable Privacy Setup services during Setup Assistant with the following command: /usr/bin/osascript -l JavaScript 2>/dev/null << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.SetupAssistant.managed')\ .objectForKey('SkipSetupItems').containsObject("Privacy") EOS If the result is not "true", this is a finding.
Fix: F-81166r1148769_fix
Configure the macOS system to disable Privacy Setup services during Setup Assistant by installing the "com.apple.SetupAssistant.managed" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002037
- Vuln IDs
-
- V-277107
- Rule IDs
-
- SV-277107r1149418_rule
Checks: C-81262r1149382_chk
Verify the macOS system is configured to disable iCloud storage setup during Setup Assistant with the following command: /usr/bin/osascript -l JavaScript 2>/dev/null << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.SetupAssistant.managed')\ .objectForKey('skipSetupItems').containsObject("iCloudStorage") EOS If the result is not "true", this is a finding.
Fix: F-81167r1148772_fix
Configure the macOS system to disable iCloud storage setup during Setup Assistant by installing the "com.apple.SetupAssistant.managed" configuration profile.
- RMF Control
- IA-5
- Severity
- H
- CCI
- CCI-000197
- Version
- APPL-26-002038
- Vuln IDs
-
- V-277108
- Rule IDs
-
- SV-277108r1149417_rule
Checks: C-81263r1149379_chk
Verify the macOS system is configured to disable TFTP service with the following command: result="FAIL" enabled=$(/bin/launchctl print-disabled system | /usr/bin/grep '"com.apple.tftpd" => enabled') running=$(/bin/launchctl print system/com.apple.tftpd 2>/dev/null) if [[ -z "$running" ]] && [[ -z "$enabled" ]]; then result="PASS" elif [[ -n "$running" ]]; then result=result+" RUNNING" elif [[ -n "$enabled" ]]; then result=result+" ENABLED" fi echo $result If the result is not "PASS", this is a finding.
Fix: F-81168r1149380_fix
Configure the macOS system to disable TFTP service with the following commands: /bin/launchctl bootout system/com.apple.tftpd /bin/launchctl disable system/com.apple.tftpd The system may need a restart for the update to take effect.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002039
- Vuln IDs
-
- V-277109
- Rule IDs
-
- SV-277109r1149399_rule
Checks: C-81264r1149344_chk
Verify the macOS system is configured to disable Siri Setup during Setup Assistant with the following command: /usr/bin/osascript -l JavaScript 2>/dev/null << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.SetupAssistant.managed')\ .objectForKey('SkipSetupItems').containsObject("Siri") EOS If the result is not "true", this is a finding.
Fix: F-81169r1148778_fix
Configure the macOS system to disable Siri Setup during Setup Assistant by installing the "com.apple.SetupAssistant.managed" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002040
- Vuln IDs
-
- V-277110
- Rule IDs
-
- SV-277110r1148782_rule
Checks: C-81265r1148780_chk
Verify the macOS system is configured to disable iCloud Keychain Sync with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowCloudKeychainSync').js EOS If the result is not "false", this is a finding.
Fix: F-81170r1148781_fix
Configure the macOS system to disable iCloud Keychain Sync by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002041
- Vuln IDs
-
- V-277111
- Rule IDs
-
- SV-277111r1148785_rule
Checks: C-81266r1148783_chk
Verify the macOS system is configured to disable iCloud Document Sync with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowCloudDocumentSync').js EOS If the result is not "false", this is a finding.
Fix: F-81171r1148784_fix
Configure the macOS system to disable iCloud Document Sync by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002042
- Vuln IDs
-
- V-277112
- Rule IDs
-
- SV-277112r1148788_rule
Checks: C-81267r1148786_chk
Verify the macOS system is configured to disable iCloud Bookmarks with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowCloudBookmarks').js EOS If the result is not "false", this is a finding.
Fix: F-81172r1148787_fix
Configure the macOS system to disable iCloud Bookmarks by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002043
- Vuln IDs
-
- V-277113
- Rule IDs
-
- SV-277113r1149438_rule
Checks: C-81268r1148789_chk
Verify the macOS system is configured to disable the iCloud Photo Library with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowCloudPhotoLibrary').js EOS If the result is not "false", this is a finding.
Fix: F-81173r1148790_fix
Configure the macOS system to disable the iCloud Photo Library by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- AC-3
- Severity
- M
- CCI
- CCI-000213
- Version
- APPL-26-002050
- Vuln IDs
-
- V-277114
- Rule IDs
-
- SV-277114r1149392_rule
Checks: C-81269r1149327_chk
Verify the macOS system is configured to disable Screen Sharing and Apple Remote Desktop with the following command: result="FAIL" enabled=$(/bin/launchctl print-disabled system | /usr/bin/grep '"com.apple.screensharing" => enabled') running=$(/bin/launchctl print system/com.apple.screensharing 2>/dev/null) if [[ -z "$running" ]] && [[ -z "$enabled" ]]; then result="PASS" elif [[ -n "$running" ]]; then result=result+" RUNNING" elif [[ -n "$enabled" ]]; then result=result+" ENABLED" fi echo $result If the result is not "PASS", this is a finding.
Fix: F-81174r1149328_fix
Configure the macOS system to disable Screen Sharing and Apple Remote Desktop with the following command: /bin/launchctl bootout system/com.apple.screensharing /bin/launchctl disable system/com.apple.screensharing Note: This will apply to the whole system.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002052
- Vuln IDs
-
- V-277115
- Rule IDs
-
- SV-277115r1148797_rule
Checks: C-81270r1148795_chk
Verify the macOS system is configured to disable the System Settings pane for Wallet and Apple Pay with the following command: /usr/bin/profiles show -output stdout-xml | /usr/bin/xmllint --xpath '//key[text()="DisabledSystemSettings"]/following-sibling::*[1]' - | /usr/bin/grep -c "com.apple.WalletSettingsExtension" If the result is not "1", this is a finding.
Fix: F-81175r1148796_fix
Configure the macOS system to disable the System Settings pane for Wallet and Apple Pay by installing the "com.apple.systempreferences" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002053
- Vuln IDs
-
- V-277116
- Rule IDs
-
- SV-277116r1148800_rule
Checks: C-81271r1148798_chk
Verify the macOS system is configured to disable the system settings pane for Siri with the following command: /usr/bin/profiles show -output stdout-xml | /usr/bin/xmllint --xpath '//key[text()="DisabledSystemSettings"]/following-sibling::*[1]' - | /usr/bin/grep -c com.apple.Siri-Settings.extension If the result is not "1", this is a finding.
Fix: F-81176r1148799_fix
Configure the macOS system to disable the system settings pane for Siri by installing the "com.apple.systempreferences" configuration profile.
- RMF Control
- Severity
- H
- CCI
- CCI-003992
- Version
- APPL-26-002060
- Vuln IDs
-
- V-277117
- Rule IDs
-
- SV-277117r1148803_rule
Checks: C-81272r1148801_chk
Verify the macOS system is configured to apply gatekeeper settings to block applications from unidentified developers with the following commands: /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 If the result is not "true", this is a finding.
Fix: F-81177r1148802_fix
Configure the macOS system to apply gatekeeper settings to block applications from unidentified developers by installing the "com.apple.systempolicy.control" configuration profile.
- RMF Control
- SC-8
- Severity
- H
- CCI
- CCI-002418
- Version
- APPL-26-002062
- Vuln IDs
-
- V-277118
- Rule IDs
-
- SV-277118r1148806_rule
Checks: C-81273r1148804_chk
Verify the macOS system is configured to disable Bluetooth with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.MCXBluetooth')\ .objectForKey('DisableBluetooth').js EOS If the result is not "true", this is a finding.
Fix: F-81178r1148805_fix
Configure the macOS system to disable Bluetooth by installing the "com.apple.MCXBluetooth" configuration profile.
- RMF Control
- CM-5
- Severity
- M
- CCI
- CCI-001813
- Version
- APPL-26-002063
- Vuln IDs
-
- V-277119
- Rule IDs
-
- SV-277119r1148809_rule
Checks: C-81274r1148807_chk
Verify the macOS system is configured to disable the guest account with the following command: /usr/bin/osascript -l JavaScript << EOS function run() { let pref1 = ObjC.unwrap($.NSUserDefaults.alloc.initWithSuiteName('com.apple.MCX')\ .objectForKey('DisableGuestAccount')) let pref2 = ObjC.unwrap($.NSUserDefaults.alloc.initWithSuiteName('com.apple.MCX')\ .objectForKey('EnableGuestAccount')) if ( pref1 == true && pref2 == false ) { return("true") } else { return("false") } } EOS If the result is not "true", this is a finding.
Fix: F-81179r1148808_fix
Configure the macOS system to disable the guest account by installing the "com.apple.MCX" configuration profile.
- RMF Control
- Severity
- H
- CCI
- CCI-003992
- Version
- APPL-26-002064
- Vuln IDs
-
- V-277120
- Rule IDs
-
- SV-277120r1148812_rule
Checks: C-81275r1148810_chk
Verify the macOS system is configured to enable gatekeeper with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.systempolicy.control')\ .objectForKey('EnableAssessment').js EOS If the result is not "true", this is a finding.
Fix: F-81180r1148811_fix
Configure the macOS system to enable gatekeeper by installing the "com.apple.systempolicy.control" configuration profile.
- RMF Control
- IA-2
- Severity
- H
- CCI
- CCI-000764
- Version
- APPL-26-002066
- Vuln IDs
-
- V-277121
- Rule IDs
-
- SV-277121r1148815_rule
Checks: C-81276r1148813_chk
Verify the macOS system is configured to disable unattended or automatic login to the system with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.loginwindow')\ .objectForKey('com.apple.login.mcx.DisableAutoLoginClient').js EOS If the result is not "true", this is a finding.
Fix: F-81181r1148814_fix
Configure the macOS system to disable unattended or automatic login to the system by installing the "com.apple.loginwindow" configuration profile.
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- APPL-26-002068
- Vuln IDs
-
- V-277122
- Rule IDs
-
- SV-277122r1148818_rule
Checks: C-81277r1148816_chk
Verify the macOS system is configured so that permissions are set correctly on user home directories with the following command: /usr/bin/find /System/Volumes/Data/Users -mindepth 1 -maxdepth 1 -type d ! \( -perm 700 -o -perm 711 \) | /usr/bin/grep -v "Shared" | /usr/bin/grep -v "Guest" | /usr/bin/wc -l | /usr/bin/xargs If the result is not "0", this is a finding.
Fix: F-81182r1148817_fix
Configure the macOS system to set the appropriate permissions for each user on the system with the following command: IFS=$'\n' for userDirs in $( /usr/bin/find /System/Volumes/Data/Users -mindepth 1 -maxdepth 1 -type d ! \( -perm 700 -o -perm 711 \) | /usr/bin/grep -v "Shared" | /usr/bin/grep -v "Guest" ); do /bin/chmod og-rwx "$userDirs" done unset IFS
- RMF Control
- AC-6
- Severity
- H
- CCI
- CCI-002235
- Version
- APPL-26-002069
- Vuln IDs
-
- V-277123
- Rule IDs
-
- SV-277123r1148821_rule
Checks: C-81278r1148819_chk
Verify the macOS system is configured to require administrator privileges to modify systemwide settings with the following command: authDBs=("system.preferences" "system.preferences.energysaver" "system.preferences.network" "system.preferences.printing" "system.preferences.sharing" "system.preferences.softwareupdate" "system.preferences.startupdisk" "system.preferences.timemachine") result="1" for section in ${authDBs[@]}; do if [[ $(/usr/bin/security -q authorizationdb read "$section" | /usr/bin/xmllint -xpath 'name(//*[contains(text(), "shared")]/following-sibling::*[1])' -) != "false" ]]; then result="0" fi if [[ $(security -q authorizationdb read "$section" | /usr/bin/xmllint -xpath '//*[contains(text(), "group")]/following-sibling::*[1]/text()' - ) != "admin" ]]; then result="0" fi if [[ $(/usr/bin/security -q authorizationdb read "$section" | /usr/bin/xmllint -xpath 'name(//*[contains(text(), "authenticate-user")]/following-sibling::*[1])' -) != "true" ]]; then result="0" fi if [[ $(/usr/bin/security -q authorizationdb read "$section" | /usr/bin/xmllint -xpath 'name(//*[contains(text(), "session-owner")]/following-sibling::*[1])' -) != "false" ]]; then result="0" fi done echo $result If the result is not "1", this is a finding.
Fix: F-81183r1148820_fix
Configure the macOS system to require administrator privileges to modify systemwide settings with the following command: authDBs=("system.preferences" "system.preferences.energysaver" "system.preferences.network" "system.preferences.printing" "system.preferences.sharing" "system.preferences.softwareupdate" "system.preferences.startupdisk" "system.preferences.timemachine") for section in ${authDBs[@]}; do /usr/bin/security -q authorizationdb read "$section" > "/tmp/$section.plist" class_key_value=$(usr/libexec/PlistBuddy -c "Print :class" "/tmp/$section.plist" 2>&1) if [[ "$class_key_value" == *"Does Not Exist"* ]]; then /usr/libexec/PlistBuddy -c "Add :class string user" "/tmp/$section.plist" else /usr/libexec/PlistBuddy -c "Set :class user" "/tmp/$section.plist" fi key_value=$(/usr/libexec/PlistBuddy -c "Print :shared" "/tmp/$section.plist" 2>&1) if [[ "$key_value" == *"Does Not Exist"* ]]; then /usr/libexec/PlistBuddy -c "Add :shared bool false" "/tmp/$section.plist" else /usr/libexec/PlistBuddy -c "Set :shared false" "/tmp/$section.plist" fi auth_user_key=$(/usr/libexec/PlistBuddy -c "Print :authenticate-user" "/tmp/$section.plist" 2>&1) if [[ "$auth_user_key" == *"Does Not Exist"* ]]; then /usr/libexec/PlistBuddy -c "Add :authenticate-user bool true" "/tmp/$section.plist" else /usr/libexec/PlistBuddy -c "Set :authenticate-user true" "/tmp/$section.plist" fi session_owner_key=$(/usr/libexec/PlistBuddy -c "Print :session-owner" "/tmp/$section.plist" 2>&1) if [[ "$session_owner_key" == *"Does Not Exist"* ]]; then /usr/libexec/PlistBuddy -c "Add :session-owner bool false" "/tmp/$section.plist" else /usr/libexec/PlistBuddy -c "Set :session-owner false" "/tmp/$section.plist" fi group_key=$(usr/libexec/PlistBuddy -c "Print :group" "/tmp/$section.plist" 2>&1) if [[ "$group_key" == *"Does Not Exist"* ]]; then /usr/libexec/PlistBuddy -c "Add :group string admin" "/tmp/$section.plist" else /usr/libexec/PlistBuddy -c "Set :group admin" "/tmp/$section.plist" fi /usr/bin/security -q authorizationdb write "$section" < "/tmp/$section.plist" done
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002080
- Vuln IDs
-
- V-277124
- Rule IDs
-
- SV-277124r1148824_rule
Checks: C-81279r1148822_chk
Verify the macOS system is configured to disable Airplay Receiver with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowAirPlayIncomingRequests').js EOS If the result is not "false", this is a finding.
Fix: F-81184r1148823_fix
Configure the macOS system to disable Airplay Receiver by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- AC-11
- Severity
- M
- CCI
- CCI-000056
- Version
- APPL-26-002090
- Vuln IDs
-
- V-277125
- Rule IDs
-
- SV-277125r1148827_rule
Checks: C-81280r1148825_chk
Verify the macOS system is configured to disable TouchID for unlocking the device with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowFingerprintForUnlock').js EOS If the result is not "false", this is a finding.
Fix: F-81185r1148826_fix
Configure the macOS system to disable TouchID for unlocking the device by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- AC-3
- Severity
- M
- CCI
- CCI-000213
- Version
- APPL-26-002100
- Vuln IDs
-
- V-277126
- Rule IDs
-
- SV-277126r1148830_rule
Checks: C-81281r1148828_chk
Verify the macOS system is configured to disable Media Sharing with the following commands: /usr/bin/osascript -l JavaScript << EOS function run() { let pref1 = ObjC.unwrap($.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowMediaSharing')) let pref2 = ObjC.unwrap($.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowMediaSharingModification')) if ( pref1 == false && pref2 == false ) { return("true") } else { return("false") } } EOS If the result is not "true", this is a finding.
Fix: F-81186r1148829_fix
Configure the macOS system to disable Media Sharing by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- AC-3
- Severity
- M
- CCI
- CCI-000213
- Version
- APPL-26-002110
- Vuln IDs
-
- V-277127
- Rule IDs
-
- SV-277127r1149415_rule
Checks: C-81282r1148831_chk
Verify the macOS system is configured to disable Bluetooth sharing with the following commands: CURRENT_USER=$( /usr/sbin/scutil <<< "show State:/Users/ConsoleUser" | /usr/bin/awk '/Name :/ && ! /loginwindow/ { print $3 }' ) /usr/bin/sudo -u "$CURRENT_USER" /usr/bin/defaults -currentHost read com.apple.Bluetooth PrefKeyServicesEnabled If the result is not "0", this is a finding.
Fix: F-81187r1148832_fix
Configure the macOS system to disable Bluetooth sharing with the following commands: CURRENT_USER=$( /usr/sbin/scutil <<< "show State:/Users/ConsoleUser" | /usr/bin/awk '/Name :/ && ! /loginwindow/ { print $3 }' ) /usr/bin/sudo -u "$CURRENT_USER" /usr/bin/defaults -currentHost write com.apple.Bluetooth PrefKeyServicesEnabled -bool false
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002120
- Vuln IDs
-
- V-277128
- Rule IDs
-
- SV-277128r1148836_rule
Checks: C-81283r1148834_chk
Verify the macOS system is configured to disable account modification with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowAccountModification').js EOS If the result is not "false", this is a finding.
Fix: F-81188r1148835_fix
Configure the macOS system to disable Account Modification by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002140
- Vuln IDs
-
- V-277129
- Rule IDs
-
- SV-277129r1148839_rule
Checks: C-81284r1148837_chk
Verify the macOS system is configured to disable Content Caching service with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowContentCaching').js EOS If the result is not "false", this is a finding.
Fix: F-81189r1148838_fix
Configure the macOS system to disable Content Caching service by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002150
- Vuln IDs
-
- V-277130
- Rule IDs
-
- SV-277130r1148842_rule
Checks: C-81285r1148840_chk
Verify the macOS system is configured to disable iCloud Desktop and Document folder synchronization with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowCloudDesktopAndDocuments').js EOS If the result is not "false", this is a finding.
Fix: F-81190r1148841_fix
Configure the macOS system to disable iCloud Desktop and Document folder synchronization by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002160
- Vuln IDs
-
- V-277131
- Rule IDs
-
- SV-277131r1148845_rule
Checks: C-81286r1148843_chk
Verify the macOS system is configured to disable iCloud Game Center with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowGameCenter').js EOS If the result is not "false", this is a finding.
Fix: F-81191r1148844_fix
Configure the macOS system to disable iCloud Game Center by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002170
- Vuln IDs
-
- V-277132
- Rule IDs
-
- SV-277132r1148848_rule
Checks: C-81287r1148846_chk
Verify the macOS system is configured to disable the iCloud Private Relay with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowCloudPrivateRelay').js EOS If the result is not "false", this is a finding.
Fix: F-81192r1148847_fix
Configure the macOS system to disable the iCloud Private Relay by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002180
- Vuln IDs
-
- V-277133
- Rule IDs
-
- SV-277133r1148851_rule
Checks: C-81288r1148849_chk
Verify the macOS system is configured to disable Find My service with the following command: /usr/bin/osascript -l JavaScript << EOS function run() { let pref1 = ObjC.unwrap($.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowFindMyDevice')) let pref2 = ObjC.unwrap($.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowFindMyFriends')) let pref3 = ObjC.unwrap($.NSUserDefaults.alloc.initWithSuiteName('com.apple.icloud.managed')\ .objectForKey('DisableFMMiCloudSetting')) if ( pref1 == false && pref2 == false && pref3 == true ) { return("true") } else { return("false") } } EOS If the result is not "true", this is a finding.
Fix: F-81193r1148850_fix
Configure the macOS system to disable Find My service by installing the "com.apple.applicationaccess" and "com.apple.icloud.managed"configuration profiles.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002200
- Vuln IDs
-
- V-277134
- Rule IDs
-
- SV-277134r1148854_rule
Checks: C-81289r1148852_chk
Verify the macOS system is configured to disable Personalized Advertising with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowApplePersonalizedAdvertising').js EOS If the result is not "false", this is a finding.
Fix: F-81194r1148853_fix
Configure the macOS system to disable Personalized Advertising by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002210
- Vuln IDs
-
- V-277135
- Rule IDs
-
- SV-277135r1148857_rule
Checks: C-81290r1148855_chk
Verify the macOS system is configured to disable sending Siri and Dictation information to Apple with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.assistant.support')\ .objectForKey('Siri Data Sharing Opt-In Status').js EOS If the result is not "2", this is a finding.
Fix: F-81195r1148856_fix
Configure the macOS system to disable sending Siri and Dictation information to Apple by installing the "com.apple.assistant.support" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002220
- Vuln IDs
-
- V-277136
- Rule IDs
-
- SV-277136r1148860_rule
Checks: C-81291r1148858_chk
For Intel-based systems, this is not applicable. Verify the macOS system is configured to enforce On Device Only Dictation with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('forceOnDeviceOnlyDictation').js EOS If the result is not "true", this is a finding.
Fix: F-81196r1148859_fix
Configure the macOS system to enforce On Device Only Dictation by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002230
- Vuln IDs
-
- V-277137
- Rule IDs
-
- SV-277137r1148863_rule
Checks: C-81292r1148861_chk
For Apple Silicon-based systems, this is not applicable. Verify the macOS system is configured to disable Dictation with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowDictation').js EOS If the result is not "false", this is a finding.
Fix: F-81197r1148862_fix
Configure the macOS system to disable Dictation by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002240
- Vuln IDs
-
- V-277138
- Rule IDs
-
- SV-277138r1148866_rule
Checks: C-81293r1148864_chk
Verify the macOS system is configured to disable Printer Sharing with the following command: /usr/sbin/cupsctl | /usr/bin/grep -c "_share_printers=0" If the result is not "1", this is a finding.
Fix: F-81198r1148865_fix
Configure the macOS system to disable Printer Sharing with the following commands: /usr/sbin/cupsctl --no-share-printers /usr/bin/lpstat -p | awk '{print $2}'| /usr/bin/xargs -I{} lpadmin -p {} -o printer-is-shared=false
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002250
- Vuln IDs
-
- V-277139
- Rule IDs
-
- SV-277139r1149403_rule
Checks: C-81294r1149352_chk
Verify the macOS system is configured to disable Remote Management with the following command: /usr/libexec/mdmclient QuerySecurityInfo 2>/dev/null | /usr/bin/grep -c "RemoteDesktopEnabled = 0" If the result is not "1", this is a finding.
Fix: F-81199r1148868_fix
Configure the macOS system to disable Remote Management with the following commands: /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -deactivate -stop
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002260
- Vuln IDs
-
- V-277140
- Rule IDs
-
- SV-277140r1148872_rule
Checks: C-81295r1148870_chk
Verify the macOS system is configured to disable the Bluetooth System Settings pane with the following command: /usr/bin/profiles show -output stdout-xml | /usr/bin/xmllint --xpath '//key[text()="DisabledSystemSettings"]/following-sibling::*[1]' - | /usr/bin/grep -c com.apple.BluetoothSettings If the result is not "1", this is a finding.
Fix: F-81200r1148871_fix
Configure the macOS system to disable the Bluetooth System Settings pane by installing the "com.apple.systempreferences" configuration profiles.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-002270
- Vuln IDs
-
- V-277141
- Rule IDs
-
- SV-277141r1148875_rule
Checks: C-81296r1148873_chk
Verify the macOS system is configured to disable iCloud Freeform services with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowCloudFreeform').js EOS If the result is not "false", this is a finding.
Fix: F-81201r1148874_fix
Configure the macOS system to disable iCloud Freeform services by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- AC-3
- Severity
- M
- CCI
- CCI-000213
- Version
- APPL-26-002271
- Vuln IDs
-
- V-277142
- Rule IDs
-
- SV-277142r1148878_rule
Checks: C-81297r1148876_chk
Verify the macOS system is configured to disable iPhone Mirroring with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowiPhoneMirroring').js EOS If the result is not "false", this is a finding.
Fix: F-81202r1148877_fix
Configure the macOS system to disable iPhone Mirroring by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- SC-23
- Severity
- M
- CCI
- CCI-002470
- Version
- APPL-26-003001
- Vuln IDs
-
- V-277143
- Rule IDs
-
- SV-277143r1148881_rule
Checks: C-81298r1148879_chk
Verify the macOS system is configured to issue or obtain public key certificates from an approved service provider with the following command: /usr/bin/security dump-keychain /Library/Keychains/System.keychain | /usr/bin/awk -F'"' '/labl/ {print $4}' If the result does not contain a list of approved certificate authorities, this is a finding.
Fix: F-81203r1148880_fix
Configure the macOS system to issue or obtain public key certificates from an approved service provider by obtaining the approved certificates from the appropriate authority and install them to the System Keychain.
- RMF Control
- Severity
- M
- CCI
- CCI-004066
- Version
- APPL-26-003007
- Vuln IDs
-
- V-277144
- Rule IDs
-
- SV-277144r1148884_rule
Checks: C-81299r1148882_chk
Verify the macOS system is configured to require that passwords contain a minimum of one numeric character with the following command: /usr/bin/pwpolicy -getaccountpolicies 2> /dev/null | /usr/bin/tail +2 | /usr/bin/xmllint --xpath '//dict/key[text()="policyIdentifier"]/following-sibling::*[1]/text()' - | /usr/bin/grep "requireAlphanumeric" -c If the result is not "1", this is a finding.
Fix: F-81204r1148883_fix
Configure the macOS system to require that passwords contain a minimum of one numeric character by installing the "com.apple.mobiledevice.passwordpolicy" configuration profile.
- RMF Control
- Severity
- M
- CCI
- CCI-004066
- Version
- APPL-26-003008
- Vuln IDs
-
- V-277145
- Rule IDs
-
- SV-277145r1149409_rule
Checks: C-81300r1149364_chk
Verify the macOS system is configured to restrict maximum password lifetime to 60 days with the following command: /usr/bin/pwpolicy -getaccountpolicies 2> /dev/null | /usr/bin/tail +2 | /usr/bin/xmllint --xpath '//dict/key[text()="policyAttributeExpiresEveryNDays"]/following-sibling::*[1]/text()' - | /usr/bin/awk '{ if ($1 <= 60 ) {print "pass"} else {print "fail"}}' | /usr/bin/uniq If the result is not "pass" or fewer, this is a finding.
Fix: F-81205r1148886_fix
Configure the macOS system to restrict maximum password lifetime to 60 days by installing the "com.apple.mobiledevice.passwordpolicy" configuration profile.
- RMF Control
- Severity
- M
- CCI
- CCI-004066
- Version
- APPL-26-003010
- Vuln IDs
-
- V-277146
- Rule IDs
-
- SV-277146r1149410_rule
Checks: C-81301r1149366_chk
Verify the macOS system is configured to enforce a minimum 14-character password length with the following command: /usr/bin/pwpolicy -getaccountpolicies 2>/dev/null | tail +2 | grep -oE "policyAttributePassword matches '.\{[0-9]+," | awk -F'[{,]' -v ODV=14 '{if ($2 > max) max=$2} END {print (max >= ODV) ? "pass" : "fail"}' If the result is not "true", this is a finding.
Fix: F-81206r1148889_fix
Configure the macOS system to enforce a 14-character password length by installing the "com.apple.mobiledevice.passwordpolicy" configuration profile.
- RMF Control
- Severity
- M
- CCI
- CCI-004066
- Version
- APPL-26-003011
- Vuln IDs
-
- V-277147
- Rule IDs
-
- SV-277147r1149411_rule
Checks: C-81302r1149368_chk
Verify the macOS system is configured to require passwords contain a minimum of one special character with the following command: /usr/bin/pwpolicy -getaccountpolicies 2>/dev/null | /usr/bin/tail -n +2 | /usr/bin/xmllint --xpath "//string[contains(text(), \"policyAttributePassword matches '(.*[^a-zA-Z0-9].*){\")]" - 2>/dev/null | /usr/bin/awk -F"{|}" '{if ($2 >= 1) {print "pass"} else {print "fail"}}' If the result is not "pass", this is a finding.
Fix: F-81207r1148892_fix
Configure the macOS system to require that passwords contain a minimum of one special character by installing the "com.apple.mobiledevice.passwordpolicy" configuration profile.
- RMF Control
- IA-6
- Severity
- M
- CCI
- CCI-000206
- Version
- APPL-26-003012
- Vuln IDs
-
- V-277148
- Rule IDs
-
- SV-277148r1148896_rule
Checks: C-81303r1148894_chk
Verify the macOS system is configured to disable password hints with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.loginwindow')\ .objectForKey('RetriesUntilHint').js EOS If the result is not "0", this is a finding.
Fix: F-81208r1148895_fix
Configure the macOS system to disable password hints by installing the "com.apple.loginwindow" configuration profile.
- RMF Control
- IA-6
- Severity
- M
- CCI
- CCI-000206
- Version
- APPL-26-003014
- Vuln IDs
-
- V-277149
- Rule IDs
-
- SV-277149r1148899_rule
Checks: C-81304r1148897_chk
Verify the macOS system is configured to remove password hints from user accounts with the following command: HINT=$(/usr/bin/dscl . -list /Users hint | /usr/bin/awk '{ print $2 }') if [ -z "$HINT" ]; then echo "PASS" else echo "FAIL" fi If the result is not "PASS", this is a finding.
Fix: F-81209r1148898_fix
Configure the macOS system to remove password hints from user accounts with the following command: for u in $(/usr/bin/dscl . -list /Users UniqueID | /usr/bin/awk '$2 > 500 {print $1}'); do /usr/bin/dscl . -delete /Users/$u hint done
- RMF Control
- IA-5
- Severity
- M
- CCI
- CCI-000186
- Version
- APPL-26-003020
- Vuln IDs
-
- V-277150
- Rule IDs
-
- SV-277150r1148902_rule
Checks: C-81305r1148900_chk
Verify the macOS system is configured to enforce multifactor authentication with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.security.smartcard')\ .objectForKey('enforceSmartCard').js EOS If the result is not "true", this is a finding.
Fix: F-81210r1148901_fix
Configure the macOS system to enforce multifactor authentication by installing the "com.apple.security.smartcard" configuration profile. Note: To ensure continued access to the operating system, consult the supplemental guidance provided with the STIG before applying the configuration profile.
- RMF Control
- IA-5
- Severity
- M
- CCI
- CCI-000187
- Version
- APPL-26-003030
- Vuln IDs
-
- V-277151
- Rule IDs
-
- SV-277151r1148905_rule
Checks: C-81306r1148903_chk
Verify the macOS system is configured to allow smart card authentication with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.security.smartcard')\ .objectForKey('allowSmartCard').js EOS If the result is not "true", this is a finding.
Fix: F-81211r1148904_fix
Configure the macOS system to enforce multifactor authentication by installing the "com.apple.security.smartcard" configuration profile. Note: To ensure continued access to the operating system, consult the supplemental guidance provided with the STIG before applying the configuration profile.
- RMF Control
- IA-2
- Severity
- M
- CCI
- CCI-000765
- Version
- APPL-26-003050
- Vuln IDs
-
- V-277152
- Rule IDs
-
- SV-277152r1148908_rule
Checks: C-81307r1148906_chk
Verify the macOS system is configured to enforce multifactor authentication for login with the following command: /usr/bin/grep -Ec '^(auth\s+sufficient\s+pam_smartcard.so|auth\s+required\s+pam_deny.so)' /etc/pam.d/login If the result is not "2", this is a finding.
Fix: F-81212r1148907_fix
Configure the macOS system to enforce multifactor authentication for login with the following commands: /bin/cat > /etc/pam.d/login << LOGIN_END # login: auth account password session auth sufficient pam_smartcard.so auth optional pam_krb5.so use_kcminit auth optional pam_ntlm.so try_first_pass auth optional pam_mount.so try_first_pass auth required pam_opendirectory.so try_first_pass auth required pam_deny.so account required pam_nologin.so account required pam_opendirectory.so password required pam_opendirectory.so session required pam_launchd.so session required pam_uwtmp.so session optional pam_mount.so LOGIN_END /bin/chmod 644 /etc/pam.d/login /usr/sbin/chown root:wheel /etc/pam.d/login
- RMF Control
- IA-2
- Severity
- M
- CCI
- CCI-000765
- Version
- APPL-26-003051
- Vuln IDs
-
- V-277153
- Rule IDs
-
- SV-277153r1148911_rule
Checks: C-81308r1148909_chk
Verify the macOS system is configured to enforce multifactor authentication for the su command with the following command: /usr/bin/grep -Ec '^(auth\s+sufficient\s+pam_smartcard.so|auth\s+required\s+pam_rootok.so)' /etc/pam.d/su If the result is not "2", this is a finding.
Fix: F-81213r1148910_fix
Configure the macOS system to enforce multifactor authentication for the su command with the following commands: /bin/cat > /etc/pam.d/su << SU_END # su: auth account password session auth sufficient pam_smartcard.so auth required pam_rootok.so auth required pam_group.so no_warn group=admin,wheel ruser root_only fail_safe account required pam_permit.so account required pam_opendirectory.so no_check_shell password required pam_opendirectory.so session required pam_launchd.so SU_END # Fix new file ownership and permissions /bin/chmod 644 /etc/pam.d/su /usr/sbin/chown root:wheel /etc/pam.d/su
- RMF Control
- IA-2
- Severity
- M
- CCI
- CCI-000765
- Version
- APPL-26-003052
- Vuln IDs
-
- V-277154
- Rule IDs
-
- SV-277154r1148914_rule
Checks: C-81309r1148912_chk
Verify the macOS system is configured to enforce multifactor authentication for privilege escalation through the sudo command with the following command: /usr/bin/grep -Ec '^(auth\s+sufficient\s+pam_smartcard.so|auth\s+required\s+pam_deny.so)' /etc/pam.d/sudo If the result is not "2", this is a finding.
Fix: F-81214r1148913_fix
Configure the macOS system to enforce multifactor authentication for privilege escalation through the sudo command with the following commands: /bin/cat > /etc/pam.d/sudo << SUDO_END # sudo: auth account password session auth sufficient pam_smartcard.so auth required pam_opendirectory.so auth required pam_deny.so account required pam_permit.so password required pam_deny.so session required pam_permit.so SUDO_END /bin/chmod 444 /etc/pam.d/sudo /usr/sbin/chown root:wheel /etc/pam.d/sudo
- RMF Control
- Severity
- M
- CCI
- CCI-004066
- Version
- APPL-26-003060
- Vuln IDs
-
- V-277155
- Rule IDs
-
- SV-277155r1148917_rule
Checks: C-81310r1148915_chk
Verify the macOS system is configured to require that passwords contain a minimum of one lowercase character and one uppercase character with the following command: /usr/bin/pwpolicy -getaccountpolicies 2> /dev/null | /usr/bin/tail +2 | /usr/bin/xmllint --xpath 'boolean(//*[contains(text(),"policyAttributePassword matches '\''^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).*$'\''")])' - If the result is not "true", this is a finding.
Fix: F-81215r1148916_fix
Configure the macOS system to require at least one lowercase character and one uppercase character in password complexity by installing the "com.apple.mobiledevice.passwordpolicy" configuration profile.
- RMF Control
- Severity
- M
- CCI
- CCI-004066
- Version
- APPL-26-003070
- Vuln IDs
-
- V-277156
- Rule IDs
-
- SV-277156r1149412_rule
Checks: C-81311r1149370_chk
Verify the macOS system is configured to set minimum password lifetime to 24 hours with the following command: /usr/bin/pwpolicy -getaccountpolicies 2> /dev/null | /usr/bin/tail +2 | /usr/bin/xmllint --xpath '//dict/key[text()="policyAttributeMinimumLifetimeHours"]/following-sibling::integer[1]/text()' - | /usr/bin/awk '{ if ($1 >= 24 ) {print "pass"} else {print "fail"}}' If the result is not "pass", this is a finding.
Fix: F-81216r1148919_fix
Configure the macOS system to set minimum password lifetime to 24 hours. This setting may be enforced using local policy. To set local policy to require a minimum password lifetime, edit the current password policy to contain the following <dict> within the "policyCategoryPasswordContent": [source,xml] ---- <dict> <key>policyContent</key> <string>policyAttributeLastPasswordChangeTime < policyAttributeCurrentTime - (policyAttributeMinimumLifetimeHours * 60 * 60)</string> <key>policyIdentifier</key> <string>Minimum Password Lifetime</string> <key>policyParameters</key> <dict> <key>policyAttributeMinimumLifetimeHours</key> <integer>24</integer> </dict> </dict> ---- After saving the file and exiting to the command prompt, run the following command to load the new policy file, substituting the path to the file in place of "$pwpolicy_file". [source,bash] ---- /usr/bin/pwpolicy setaccountpolicies $pwpolicy_file ----
- RMF Control
- Severity
- M
- CCI
- CCI-003627
- Version
- APPL-26-003080
- Vuln IDs
-
- V-277157
- Rule IDs
-
- SV-277157r1148923_rule
Checks: C-81312r1148921_chk
Verify the macOS system is configured to disable accounts after 35 days of inactivity with the following command: /usr/bin/pwpolicy -getaccountpolicies 2> /dev/null | /usr/bin/tail +2 | /usr/bin/xmllint --xpath '//dict/key[text()="policyAttributeInactiveDays"]/following-sibling::integer[1]/text()' - If the result is not "35", this is a finding.
Fix: F-81217r1148922_fix
Configure the macOS system to disable accounts after 35 days of inactivity with the following command: This setting may be enforced using local policy. To set local policy to disable an inactive user after 35 days, edit the current password policy to contain the following <dict> within the "policyCategoryAuthentication": [source,xml] ---- <dict> <key>policyContent</key> <string>policyAttributeLastAuthenticationTime > policyAttributeCurrentTime - (policyAttributeInactiveDays * 24 * 60 * 60)</string> <key>policyIdentifier</key> <string>Inactive Account</string> <key>policyParameters</key> <dict> <key>policyAttributeInactiveDays</key> <integer>35</integer> </dict> </dict> ---- After saving the file and exiting to the command prompt, run the following command to load the new policy file, substituting the path to the file in place of "$pwpolicy_file". [source,bash] ---- /usr/bin/pwpolicy setaccountpolicies $pwpolicy_file ----
- RMF Control
- SI-11
- Severity
- M
- CCI
- CCI-001312
- Version
- APPL-26-004001
- Vuln IDs
-
- V-277158
- Rule IDs
-
- SV-277158r1148926_rule
Checks: C-81313r1148924_chk
Verify the macOS system is configured with ASL files owned by root and group to wheel with the following command: /usr/bin/stat -f '%Su:%Sg:%N' $(/usr/bin/grep -e '^>' /etc/asl.conf /etc/asl/* | /usr/bin/awk '{ print $2 }') 2> /dev/null | /usr/bin/awk '!/^root:wheel:/{print $1}' | /usr/bin/wc -l | /usr/bin/tr -d ' ' If the result is not "0", this is a finding.
Fix: F-81218r1148925_fix
Configure the macOS system with ASL files owned by root and group to wheel with the following command: /usr/sbin/chown root:wheel $(/usr/bin/stat -f '%Su:%Sg:%N' $(/usr/bin/grep -e '^>' /etc/asl.conf /etc/asl/* | /usr/bin/awk '{ print $2 }') 2> /dev/null | /usr/bin/awk '!/^root:wheel:/{print $1}' | /usr/bin/awk -F":" '!/^root:wheel:/{print $3}')
- RMF Control
- SI-11
- Severity
- M
- CCI
- CCI-001312
- Version
- APPL-26-004002
- Vuln IDs
-
- V-277159
- Rule IDs
-
- SV-277159r1148929_rule
Checks: C-81314r1148927_chk
Verify the macOS system is configured with ASL files to mode 640 or less permissive with the following command: /usr/bin/stat -f '%A:%N' $(/usr/bin/grep -e '^>' /etc/asl.conf /etc/asl/* | /usr/bin/awk '{ print $2 }') 2> /dev/null | /usr/bin/awk '!/640/{print $1}' | /usr/bin/wc -l | /usr/bin/tr -d ' ' If the result is not "0", this is a finding.
Fix: F-81219r1148928_fix
Configure the macOS system with ASL files to mode 640 with the following command: /bin/chmod 640 $(/usr/bin/stat -f '%A:%N' $(/usr/bin/grep -e '^>' /etc/asl.conf /etc/asl/* | /usr/bin/awk '{ print $2 }') 2> /dev/null | /usr/bin/awk -F":" '!/640/{print $2}')
- RMF Control
- IA-11
- Severity
- M
- CCI
- CCI-002038
- Version
- APPL-26-004022
- Vuln IDs
-
- V-277160
- Rule IDs
-
- SV-277160r1148932_rule
Checks: C-81315r1148930_chk
Verify the macOS system requires reauthentication when using the "sudo" command to elevate privileges with the following command: /usr/bin/sudo /usr/bin/sudo -V | /usr/bin/grep -c "Authentication timestamp timeout: 0.0 minutes" If the result is not "1", this is a finding.
Fix: F-81220r1148931_fix
Configure the macOS system to require reauthentication when using "sudo" with the following command: /usr/bin/find /etc/sudoers* -type f -exec sed -i '' '/timestamp_timeout/d' '{}' \; /bin/echo "Defaults timestamp_timeout=0" >> /etc/sudoers.d/mscp
- RMF Control
- SI-11
- Severity
- M
- CCI
- CCI-001312
- Version
- APPL-26-004030
- Vuln IDs
-
- V-277161
- Rule IDs
-
- SV-277161r1148935_rule
Checks: C-81316r1148933_chk
Verify the macOS system is configured with system log files owned by root and group to wheel with the following command: /usr/bin/stat -f '%Su:%Sg:%N' $(/usr/bin/grep -v '^#' /etc/newsyslog.conf | /usr/bin/awk '{ print $1 }') 2> /dev/null | /usr/bin/awk '!/^root:wheel:/{print $1}' | /usr/bin/wc -l | /usr/bin/tr -d ' ' If the result is not "0", this is a finding.
Fix: F-81221r1148934_fix
Configure the macOS system with system log files owned by root and group to wheel with the following command: /usr/sbin/chown root:wheel $(/usr/bin/stat -f '%Su:%Sg:%N' $(/usr/bin/grep -v '^#' /etc/newsyslog.conf | /usr/bin/awk '{ print $1 }') 2> /dev/null | /usr/bin/awk -F":" '!/^root:wheel:/{print $3}')
- RMF Control
- SI-11
- Severity
- M
- CCI
- CCI-001312
- Version
- APPL-26-004040
- Vuln IDs
-
- V-277162
- Rule IDs
-
- SV-277162r1148938_rule
Checks: C-81317r1148936_chk
Verify the macOS system is configured with system log files set to mode 640 or less permissive with the following command: /usr/bin/stat -f '%A:%N' $(/usr/bin/grep -v '^#' /etc/newsyslog.conf | /usr/bin/awk '{ print $1 }') 2> /dev/null | /usr/bin/awk '!/640/{print $1}' | /usr/bin/wc -l | /usr/bin/tr -d ' ' If the result is not "0", this is a finding.
Fix: F-81222r1148937_fix
Configure the macOS system with system log files set to mode 640 or less permissive with the following command: /bin/chmod 640 $(/usr/bin/stat -f '%A:%N' $(/usr/bin/grep -v '^#' /etc/newsyslog.conf | /usr/bin/awk '{ print $1 }') 2> /dev/null | /usr/bin/awk '!/640/{print $1}' | awk -F":" '!/640/{print $2}')
- RMF Control
- AU-4
- Severity
- L
- CCI
- CCI-001849
- Version
- APPL-26-004050
- Vuln IDs
-
- V-277163
- Rule IDs
-
- SV-277163r1148941_rule
Checks: C-81318r1148939_chk
Verify the macOS system is configured with install.log retention to 365 with the following command: /usr/sbin/aslmanager -dd 2>&1 | /usr/bin/awk '/\/var\/log\/install.log$/ {count++} /Processing module com.apple.install/,/Finished/ { for (i=1;i<=NR;i++) { if ($i == "TTL" && $(i+2) >= 365) { ttl="True" }; if ($i == "MAX") {max="True"}}} END{if (count > 1) { print "Multiple config files for /var/log/install, manually remove the extra files"} else if (max == "True") { print "all_max setting is configured, must be removed" } if (ttl != "True") { print "TTL not configured" } else { print "Yes" }}' If the result is not "yes", this is a finding.
Fix: F-81223r1148940_fix
Configure the macOS system with install.log retention to 365 with the following command: /usr/bin/sed -i '' "s/\* file \/var\/log\/install.log.*/\* file \/var\/log\/install.log format='\$\(\(Time\)\(JZ\)\) \$Host \$\(Sender\)\[\$\(PID\\)\]: \$Message' rotate=utc compress file_max=50M size_only ttl=365/g" /etc/asl/com.apple.install Note: If multiple configuration files in /etc/asl are set to process the file /var/log/install.log, these files must be manually removed.
- RMF Control
- IA-11
- Severity
- M
- CCI
- CCI-002038
- Version
- APPL-26-004060
- Vuln IDs
-
- V-277164
- Rule IDs
-
- SV-277164r1148944_rule
Checks: C-81319r1148942_chk
Verify the macOS system is configured with sudoers timestamp type with the following command: /usr/bin/sudo /usr/bin/sudo -V | /usr/bin/awk -F": " '/Type of authentication timestamp record/{print $2}' If the result is not "tty", this is a finding.
Fix: F-81224r1148943_fix
Configure the macOS system with sudoers timestamp type with the following command: /usr/bin/find /etc/sudoers* -type f -exec sed -i '' '/timestamp_type/d; /!tty_tickets/d' '{}' \;
- RMF Control
- AU-6
- Severity
- H
- CCI
- CCI-000154
- Version
- APPL-26-005001
- Vuln IDs
-
- V-277165
- Rule IDs
-
- SV-277165r1149180_rule
Checks: C-81320r1149178_chk
Verify the macOS system is configured to enable SIP with the following command: /usr/bin/csrutil status | /usr/bin/grep -c 'System Integrity Protection status: enabled.' If the result is not "1", this is a finding.
Fix: F-81225r1149179_fix
To configure the macOS system to enable SIP, boot into "Recovery" mode, launch "Terminal" from the "Utilities" menu, and run the following command: /usr/bin/csrutil enable
- RMF Control
- SC-28
- Severity
- H
- CCI
- CCI-001199
- Version
- APPL-26-005020
- Vuln IDs
-
- V-277166
- Rule IDs
-
- SV-277166r1148950_rule
Checks: C-81321r1148948_chk
Verify the macOS system is configured to enforce FileVault with the following command: dontAllowDisable=$(/usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.MCX')\ .objectForKey('dontAllowFDEDisable').js EOS ) fileVault=$(/usr/bin/fdesetup status | /usr/bin/grep -c "FileVault is On.") if [[ "$dontAllowDisable" == "true" ]] && [[ "$fileVault" == 1 ]]; then echo "1" else echo "0" fi If the result is not "1", this is a finding.
Fix: F-81226r1148949_fix
Refer to the FileVault supplemental to implement this rule. Configure the macOS system to enforce FileVault by installing the "com.apple.MCX" configuration profile.
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- APPL-26-005050
- Vuln IDs
-
- V-277167
- Rule IDs
-
- SV-277167r1148953_rule
Checks: C-81322r1148951_chk
Verify the macOS system is configured to enable the Application Firewall with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.security.firewall')\ .objectForKey('EnableFirewall').js EOS If the result is not "true", this is a finding.
Fix: F-81227r1148952_fix
Configure the macOS system to enable the Application Firewall by installing the "com.apple.security.firewall" configuration profile.
- RMF Control
- IA-2
- Severity
- M
- CCI
- CCI-000764
- Version
- APPL-26-005052
- Vuln IDs
-
- V-277168
- Rule IDs
-
- SV-277168r1148956_rule
Checks: C-81323r1148954_chk
Verify the macOS system is configured to prompt for username and password at the login window with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.loginwindow')\ .objectForKey('SHOWFULLNAME').js EOS If the result is not "true", this is a finding.
Fix: F-81228r1148955_fix
Configure the macOS system to prompt for username and password at the login window by installing the "com.apple.loginwindow" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-005054
- Vuln IDs
-
- V-277169
- Rule IDs
-
- SV-277169r1149400_rule
Checks: C-81324r1149346_chk
Verify the macOS system is configured to disable the TouchID prompt during Setup Assistant with the following command: /usr/bin/osascript -l JavaScript 2>/dev/null << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.SetupAssistant.managed')\ .objectForKey('SkipSetupItems').containsObject("Biometric") EOS If the result is not "true", this is a finding.
Fix: F-81229r1148958_fix
Configure the macOS system to disable the TouchID prompt during Setup Assistant by installing the "com.apple.SetupAssistant.managed" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-005055
- Vuln IDs
-
- V-277170
- Rule IDs
-
- SV-277170r1149401_rule
Checks: C-81325r1149348_chk
Verify the macOS system is configured to disable the Screen Time prompt during Setup Assistant with the following command: /usr/bin/osascript -l JavaScript 2>/dev/null << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.SetupAssistant.managed')\ .objectForKey('SkipSetupItems').containsObject("ScreenTime") EOS If the result is not "true", this is a finding.
Fix: F-81230r1148961_fix
Configure the macOS system to disable the Screen Time prompt during Setup Assistant by installing the "com.apple.SetupAssistant.managed" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-005056
- Vuln IDs
-
- V-277171
- Rule IDs
-
- SV-277171r1149402_rule
Checks: C-81326r1149350_chk
Verify the macOS system is configured to disable Unlock with Apple Watch during Setup Assistant with the following command: /usr/bin/osascript -l JavaScript 2>/dev/null << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.SetupAssistant.managed')\ .objectForKey('SkipSetupItems').containsObject("WatchMigration") EOS If the result is not "true", this is a finding.
Fix: F-81231r1148964_fix
Configure the macOS system to disable Unlock with Apple Watch during Setup Assistant by installing the "com.apple.SetupAssistant.managed" configuration profile.
- RMF Control
- AC-3
- Severity
- M
- CCI
- CCI-000213
- Version
- APPL-26-005058
- Vuln IDs
-
- V-277172
- Rule IDs
-
- SV-277172r1148968_rule
Checks: C-81327r1148966_chk
Verify the macOS system is configured to disable Handoff with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowActivityContinuation').js EOS If the result is not "false", this is a finding.
Fix: F-81232r1148967_fix
Configure the macOS system to disable Handoff by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-005060
- Vuln IDs
-
- V-277173
- Rule IDs
-
- SV-277173r1148971_rule
Checks: C-81328r1148969_chk
Verify the macOS system is configured to disable proximity-based password sharing requests with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowPasswordProximityRequests').js EOS If the result is not "false", this is a finding.
Fix: F-81233r1148970_fix
Configure the macOS system to disable proximity-based password sharing requests by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-005061
- Vuln IDs
-
- V-277174
- Rule IDs
-
- SV-277174r1148974_rule
Checks: C-81329r1148972_chk
Verify the macOS system is configured to disable Erase Content and Settings with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowEraseContentAndSettings').js EOS If the result is not "false", this is a finding.
Fix: F-81234r1148973_fix
Configure the macOS system to disable Erase Content and Settings by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- AC-3
- Severity
- M
- CCI
- CCI-000213
- Version
- APPL-26-005070
- Vuln IDs
-
- V-277175
- Rule IDs
-
- SV-277175r1149394_rule
Checks: C-81330r1149333_chk
Verify the macOS system is configured to enable authenticated root with the following command: /usr/libexec/mdmclient QuerySecurityInfo 2>/dev/null | /usr/bin/grep -c "AuthenticatedRootVolumeEnabled = 1;" If the result is not "1", this is a finding.
Fix: F-81235r1148976_fix
Configure the macOS system to enable authenticated root with the following command: /usr/bin/csrutil authenticated-root enable Note: To reenable "Authenticated Root", boot the affected system into "Recovery" mode, launch "Terminal" from the "Utilities" menu, and run the command.
- RMF Control
- Severity
- M
- CCI
- CCI-003980
- Version
- APPL-26-005080
- Vuln IDs
-
- V-277176
- Rule IDs
-
- SV-277176r1148980_rule
Checks: C-81331r1148978_chk
Verify the macOS system is configured to prohibit user installation of software into /users/ with the following command: /usr/bin/osascript -l JavaScript << EOS function run() { let pref1 = ObjC.unwrap($.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess.new')\ .objectForKey('familyControlsEnabled')) let pathlist = $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess.new')\ .objectForKey('pathBlackList').js for ( let app in pathlist ) { if ( ObjC.unwrap(pathlist[app]) == "/Users/" && pref1 == true ){ return("true") } } return("false") } EOS If the result is not "true", this is a finding.
Fix: F-81236r1148979_fix
Configure the macOS system to prohibit user installation of software into /users/ by installing the "com.apple.applicationaccess.new" configuration profile.
- RMF Control
- IA-3
- Severity
- M
- CCI
- CCI-001958
- Version
- APPL-26-005090
- Vuln IDs
-
- V-277177
- Rule IDs
-
- SV-277177r1148983_rule
Checks: C-81332r1148981_chk
Verify the macOS system is configured to authorize USB devices before allowing connection with the following command: /usr/bin/osascript -l JavaScript << EOS function run() { let pref1 = ObjC.unwrap($.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowUSBRestrictedMode')) if ( pref1 == false ) { return("false") } else { return("true") } } EOS If the result is not "true", this is a finding.
Fix: F-81237r1148982_fix
Configure the macOS system to authorize USB devices before allowing connection by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- SI-6
- Severity
- M
- CCI
- CCI-002696
- Version
- APPL-26-005100
- Vuln IDs
-
- V-277178
- Rule IDs
-
- SV-277178r1149395_rule
Checks: C-81333r1149335_chk
Verify the macOS system is configured to ensure Secure Boot level is set to "full" using the following command: /usr/libexec/mdmclient QuerySecurityInfo 2>/dev/null | /usr/bin/grep -c "SecureBootLevel = full" If the result is not "1", this is a finding.
Fix: F-81238r1148985_fix
Configure the macOS system to ensure Secure Boot level is set to "full" by booting into Recovery Mode and enabling Full Secure Boot.
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- APPL-26-005110
- Vuln IDs
-
- V-277179
- Rule IDs
-
- SV-277179r1148989_rule
Checks: C-81334r1148987_chk
Verify the macOS system is configured to enforce enrollment in mobile device management with the following command: /usr/bin/profiles status -type enrollment | /usr/bin/awk -F: '/MDM enrollment/ {print $2}' | /usr/bin/grep -c "Yes (User Approved)" If the result is not "1", this is a finding.
Fix: F-81239r1148988_fix
Configure the macOS system by ensuring that the system is enrolled via UAMDM.
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- APPL-26-005120
- Vuln IDs
-
- V-277180
- Rule IDs
-
- SV-277180r1149396_rule
Checks: C-81335r1149337_chk
For non-Apple Silicon systems, this is not applicable. Verify the macOS system is configured with Recovery Lock with the following command: /usr/libexec/mdmclient QuerySecurityInfo 2>/dev/null | /usr/bin/grep -c "IsRecoveryLockEnabled = 1" If the result is not "1", this is a finding.
Fix: F-81240r1148991_fix
Configure the macOS system with Recovery Lock with the SetRecoveryLock command. This can be used to set a Recovery Lock password and must be from the MDM.
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- APPL-26-005130
- Vuln IDs
-
- V-277181
- Rule IDs
-
- SV-277181r1148995_rule
Checks: C-81336r1148993_chk
Verify the macOS system is configured to enforce installation of XProtect Remediator and Gatekeeper updates automatically with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.SoftwareUpdate')\ .objectForKey('ConfigDataInstall').js EOS If the result is not "true", this is a finding.
Fix: F-81241r1148994_fix
Configure the macOS system to enforce installation of XProtect Remediator and Gatekeeper updates automatically by installing the "com.apple.SoftwareUpdate" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-005140
- Vuln IDs
-
- V-277182
- Rule IDs
-
- SV-277182r1149416_rule
Checks: C-81337r1148996_chk
Verify the macOS system is configured to disable Genmoji with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowGenmoji').js EOS If the result is not "false", this is a finding.
Fix: F-81242r1148997_fix
Configure the macOS system to disable Genmoji by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-005150
- Vuln IDs
-
- V-277183
- Rule IDs
-
- SV-277183r1149414_rule
Checks: C-81338r1149374_chk
Verify the macOS system is configured to disable Apple Intelligence Image Playground with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowImagePlayground').js EOS If the result is not "false", this is a finding.
Fix: F-81243r1149375_fix
Configure the macOS system to disable Apple Intelligence Image Playground by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-005160
- Vuln IDs
-
- V-277184
- Rule IDs
-
- SV-277184r1149004_rule
Checks: C-81339r1149002_chk
Verify the macOS system is configured to disable Apple Intelligence Writing Tools with the following command: /usr/bin/osascript -l JavaScript << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.applicationaccess')\ .objectForKey('allowWritingTools').js EOS If the result is not "false", this is a finding.
Fix: F-81244r1149003_fix
Configure the macOS system to disable Apple Intelligence Writing Tools by installing the "com.apple.applicationaccess" configuration profile.
- RMF Control
- SI-2
- Severity
- H
- CCI
- CCI-002605
- Version
- APPL-26-999999
- Vuln IDs
-
- V-277185
- Rule IDs
-
- SV-277185r1186397_rule
Checks: C-81340r1184564_chk
Verify security-relevant software updates are installed on the operating system within 30 days with the following command: softwareupdate_date_epoch=$(/bin/date -j -f "%Y-%m-%d" "$(/usr/bin/defaults read /Library/Preferences/com.apple.SoftwareUpdate.plist LastFullSuccessfulDate | /usr/bin/awk '{print $1}')" "+%s") thirty_days_epoch=$(/bin/date -v -30d "+%s") if [[ $softwareupdate_date_epoch -lt $thirty_days_epoch ]]; then /bin/echo "0" else /bin/echo "1" fi If the result is not "1", this is a finding.
Fix: F-81245r1186396_fix
Install the latest updates within 30 days unless the time period is directed by an authoritative source (e.g., IAVM, CTOs, DTMs, STIGs). https://support.apple.com/en-us/108382 If enrolled in an MDM, consult the MDM's documentation for automated methods.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- APPL-26-005170
- Vuln IDs
-
- V-279329
- Rule IDs
-
- SV-279329r1149390_rule
Checks: C-83880r1149388_chk
Verify the macOS system is configured to skip Apple Intelligence during Setup Assistant with the following command: /usr/bin/osascript -l JavaScript 2>/dev/null << EOS $.NSUserDefaults.alloc.initWithSuiteName('com.apple.SetupAssistant.managed')\ .objectForKey('SkipSetupItems').containsObject("Intelligence") EOS If the result is not "true", this is a finding.
Fix: F-83785r1149389_fix
Configure the macOS system to disable Unlock with Apple Watch during Setup Assistant by installing the "com.apple.SetupAssistant.managed" configuration profile.
- RMF Control
- SA-22
- Severity
- H
- CCI
- CCI-003376
- Version
- APPL-26-006000
- Vuln IDs
-
- V-282964
- Rule IDs
-
- SV-282964r1184571_rule
Checks: C-87526r1184569_chk
Verify the operating system version. Click the Apple icon on the menu at the top left corner of the screen. Select the "About This Mac" option. If the operating system version is no longer supported by the vendor, this is a finding.
Fix: F-87431r1184570_fix
Upgrade to a supported version of the operating system.