**Related issue:** Resolves #35173 # macOS 26 Tahoe CIS benchmark v1.0.0 (new benchmark) Adds a brand-new policy set covering the **CIS Apple macOS 26 Tahoe Benchmark, v1.0.0** under `ee/cis/macos-26/`. Follows the same layout as `macos-13`/`-14`/`-15` (`cis-policy-queries.yml`, `README.md`, `test/scripts/`, `test/profiles/`). ## Coverage | Section | Title | Status | |---|---|---| | 1 | Install Updates, Patches and Additional Security Software | complete (6/6 automated) | | 2 | System Settings | complete (all automated across §2.1–§2.18) | | 3 | Logging and Auditing | complete (5/5 automated) | | 4 | Network Configurations | complete (3/3 automated) | | 5 | System Access, Authentication and Authorization | complete (19/19 automated) | | 6 | Applications | complete (7/7 automated) | | 7 | Supplemental | skipped (per Fleet convention) | Total automated policies shipped: **89**. Manual-assessment recommendations are documented in `ee/cis/macos-26/README.md` under **Limitations**. ## Notable query/format choices - **Combined-key profiles per CIS instructions.** §2.2.1+§2.2.2 (Firewall + Stealth Mode) are shipped as a single `2.2.1-and-2.2.2.mobileconfig` because CIS explicitly requires both keys in the same profile. §2.6.5 (Gatekeeper) and §2.11.2 (screensaver wake-password + delay) follow the same pattern. - **§2.5.2.1 (Siri)** uses the new `allowAssistant=false` key on `com.apple.applicationaccess`, replacing the deprecated `com.apple.ironwood.support` payload from earlier benchmarks. - **§2.6.3.2** uses the spaced literal key `Siri Data Sharing Opt-In Status` (integer 2) on `com.apple.assistant.support` — the v1.0.0 PayloadType move from `com.apple.applicationaccess`. - **§5.1.6, §5.1.7, §3.1, §5.7** use fleetd-only osquery tables (`find_cmd`, `authdb`, `pwd_policy`, `dscl`, etc.) and are flagged `(Fleetd Required)` in the policy descriptions. - **§2.10.1.2** (Apple Silicon sleep ≤15 min) default-passes on Intel hosts via a `system_info.cpu_type` check. ## Test artifacts added | Type | Count | Location | |---|---|---| | Pass scripts | 48 | `ee/cis/macos-26/test/scripts/CIS_*_pass.sh` | | Fail scripts | 46 | `ee/cis/macos-26/test/scripts/CIS_*_fail.sh` | | Pass-only scripts | 2 | `CIS_1.1.sh`, `CIS_5.1.6.sh` | | MDM profiles | 37 | `ee/cis/macos-26/test/profiles/*.mobileconfig` | Profile-only recommendations (§2.3.1.x AirDrop/AirPlay, §2.5.x Apple Intelligence, §2.6.3.x Analytics, §6.x Safari/Terminal) ship with a `.mobileconfig` only and no script counterpart, since CIS marks them as configurable solely via profile. ## Documentation updates | File | Change | |---|---| | `ee/cis/macos-26/README.md` | New file — coverage table, limitations, per-section notes (query patterns, fleetd dependencies, FDA requirements). | | `ee/cis/CIS-BENCHMARKS.md` | Added `macos-26/` to the directory layout; updated **Query patterns** doc to include the `EXISTS`/`NOT EXISTS` user-vs-system-scope guidance and `username = ''` notes. | | `ee/cis/prompt.md` | Refreshed authoring prompts with macOS-26 conventions (combined-key profiles, fleetd-table flagging). | | `tools/cis/cis-test-runner.py` | Minor adjustments to support the new benchmark directory. | | `changes/35173-cis-macos-26-v1` | User-visible change note. | <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added macOS 26 CIS Benchmark v1.0.0 with comprehensive configuration profiles to enforce recommended system and app settings (updates, firewall/stealth, privacy, backups, FileVault, Safari, Terminal, etc.). * **Tests** * Added extensive pass/fail remediation and validation scripts for CIS controls across macOS subsystems; test runner updated to include macOS 26 support and mark an SSH-related control as manual. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|---|---|---|
| .. | ||
| test | ||
| cis-policy-queries.yml | ||
| README.md | ||
macOS 26 Tahoe — CIS benchmark
Fleet policies for the CIS Apple macOS 26 Tahoe Benchmark, v1.0.0.
Status
Generation complete. All automated recommendations across §1–§6 of the CIS Apple macOS 26 Tahoe Benchmark v1.0.0 are covered. §7 (Supplemental) is skipped per Fleet convention. Manual-only recommendations are documented in Limitations.
Sections covered
| Section | Title | Status |
|---|---|---|
| 1 | Install Updates, Patches and Additional Security Software | complete (6/6 automated) |
| 2 | System Settings | complete (all automated — §2.1–§2.18) |
| 3 | Logging and Auditing | complete (5/5 automated) |
| 4 | Network Configurations | complete (3/3 automated) |
| 5 | System Access, Authentication and Authorization | complete (19/19 automated) |
| 6 | Applications | complete (7/7 automated) |
| 7 | Supplemental | skipped (per convention) |
Limitations
Manual-assessment recommendations cannot be automated as Fleet policies. They are listed here for reference so auditors know where to perform out-of-band checks.
- 2.3.3.11 Ensure Computer Name Does Not Contain PII or Protected Organizational Information (Level 2). Requires inspection of the hostname against organizational naming policy — not a mechanically checkable condition.
- 2.3.4.2 Ensure Time Machine Volumes Are Encrypted (Level 1, Automated). The query detects an unencrypted backup destination, but remediation is GUI-only (drive must be re-added with "Encrypt Backup" checked). No shippable script/profile.
- 2.5.2.2 Ensure Listen for (Siri) Is Disabled (Level 1, Manual). Per CIS, Hey Siri cannot be disabled via profile or plist — only through the GUI — so the recommendation was explicitly moved to Manual in this benchmark. Disabling Siri entirely (policy 2.5.2.1) is the proxy control.
- 2.6.1.3 Audit Location Services Access (Level 2, Manual). Requires per-application review of which apps hold location permission — policy-driven, not mechanical.
- 2.6.2.1 Audit Full Disk Access for Applications (Level 2, Manual). Requires per-application review of the Full Disk Access list against organizational policy.
- 2.6.3.5 Ensure Share iCloud Analytics Is Disabled (Level 1, Manual). Setting is per-user and only appears when the user is signed into a personal Apple Account — there is no profile key or systemwide plist.
- 2.6.7 Audit Lockdown Mode (Level 2, Manual). Lockdown Mode
is per-user (
.GlobalPreferences.plistkeyLDMGlobalEnabled) and CIS does not prescribe a required value — organizations must decide per user/device. - 2.1.1.1, 2.1.1.2, 2.1.1.4, 2.1.1.5, 2.1.1.6, 2.1.2 All iCloud / Apple Account audits in §2.1 are Manual — require per-user review of iCloud Passwords & Keychain, iCloud Drive, security keys, Freeform sync, Find My Mac, App Store password settings against organizational policy.
- 2.4.1 Audit Menu Bar and Control Center Icons (Level 2, Manual). Per-user review of menu bar configuration.
- 2.7.2 Audit iPhone Mirroring (Level 2, Manual). Organization-defined allow/deny decision.
- 2.8.1 Audit Universal Control Settings (Level 2, Manual). Organization-defined decision.
- 2.10.1.1 Ensure the OS Is Not Active When Resuming from Standby (Intel) (Level 2, Manual). The audit requires the tester to pick between different remediation paths depending on whether the Mac is Intel vs Apple Silicon.
- 2.12.2 Audit Touch ID (Level 1, Manual). Per-user verification of enrollment and use against organizational policy.
- 2.14.1 Audit Game Center Settings (Level 2, Manual).
- 2.15.1 Audit Notification Settings (Level 2, Manual).
- 2.16.1 Audit Wallet & Apple Pay Settings (Level 2, Manual).
- 2.17.1 Audit Internet Accounts for Authorized Use (Level 2, Manual).
- 3.6 Audit Software Inventory (Level 2, Manual). Requires per-organization review of installed software against an approved inventory — not mechanically checkable.
- 5.2.3 Ensure Complex Password Must Contain Alphabetic Characters (Level 2, Manual). CIS explicitly left as Manual — Fleet does not ship an automated policy.
- 5.2.4 Ensure Complex Password Must Contain Numeric Character (Level 2, Manual).
- 5.2.5 Ensure Complex Password Must Contain Special Character (Level 2, Manual).
- 5.2.6 Ensure Complex Password Must Contain Uppercase and Lowercase Characters (Level 2, Manual).
- 5.3.1 Ensure all user storage APFS volumes are encrypted (Level 1, Manual). CIS Marks as Manual because the evaluation requires judgment on which volumes are "user storage" vs "Preboot/Recovery/VM role" disks.
- 5.3.2 Ensure all user storage CoreStorage volumes are encrypted (Level 1, Manual). CoreStorage has been deprecated; evaluation requires judgment about retained legacy volumes.
- 6.1.1 Audit Show All Filename Extensions (Level 2, Manual). Per-user Finder preference.
- 6.2.1 Ensure Protect Mail Activity in Mail Is Enabled (Level 2, Manual). Per-user Mail preference.
- 6.3.2 Audit History and Remove History Items (Level 2, Manual). Organization-defined retention window.
- 6.3.5 Audit Hide IP Address in Safari Setting (Level 2, Manual). Organization-defined; also requires FDA to read per-user Safari preferences.
- 6.3.8 Audit AutoFill (Level 2, Manual). Organization-defined.
- 6.3.9 Audit Pop-up Windows (Level 1, Manual). Per-user Safari setting with organization-defined allow-list.
- 6.5.1 Audit Passwords (Level 1, Manual). Requires in-app review of the macOS Passwords app.
Section 1 notes
- 1.1 depends on the fleetd-specific
software_updateosquery table. Hosts running upstream osquery without fleetd will be unable to evaluate this policy. - 1.6 (software update deferment) also passes when no deferment
profile is installed — the query checks for a managed value
exceeding 30 days and treats absence as compliant. The
1.6.mobileconfigartifact setsenforcedSoftwareUpdateDelay=30andforceDelayedSoftwareUpdates=trueto satisfy Apple's requirement that both keys be present in the same profile.
Section 2.2 notes
- 2.2.1 (Firewall) and 2.2.2 (Stealth Mode) — both use the
osquery
alftable (Query pattern #1) which reflects live firewall state, so scripts toggling via/usr/libexec/ApplicationFirewall/socketfilterfware the primary test mechanism. - The CIS benchmark explicitly requires
EnableFirewallandEnableStealthModeto be in the same configuration profile ("If it is set in its own configuration profile, it will fail"). We ship a single combined2.2.1-and-2.2.2.mobileconfigcovering both keys — first use of the{id1}-and-{id2}naming convention in this benchmark.
Section 2.3.1 notes
- 2.3.1.1 (AirDrop) and 2.3.1.2 (AirPlay Receiver) are
profile-only by CIS's own specification — the benchmark explicitly
notes that these settings can only be enabled or disabled via
configuration profile. No test scripts are shippable; the runner
validates by pushing the
.mobileconfigand re-evaluating themanaged_policiesquery.
Section 2.3.2 notes
- 2.3.2.1 (Set Time and Date Automatically) — the PDF's audit
uses
systemsetup -getusingnetworktime, for which osquery has no direct equivalent. The query checks that/private/etc/ntp.confexists with a non-empty body, which is whatsystemsetup -setusingnetworktime onwrites. Worth revisiting if Apple changes howsystemsetuppersists the setting. - 2.3.2.2 (Time Service enabled) — CIS states that if
timedis disabled, the system should be treated as compromised and reinstalled. The_fail.shscript still disables the service for test purposes; the_pass.shscript restores it vialaunchctl enable+bootstrap.
Section 2.5 notes
- All 5 Automated checks (§2.5.1.1–2.5.1.4 + §2.5.2.1) are
profile-only
managed_policieschecks oncom.apple.applicationaccess. No scripts ship. - 2.5.1.1 and 2.5.1.4 require two keys each (respectively
allowExternalIntelligenceIntegrations+allowExternalIntelligenceIntegrationsSignIn, andallowNotesTranscription+allowNotesTranscriptionSummary). The query verifies both keys are managed-false, following the new Query pattern #2 combined with AND semantics. - 2.5.2.1 (Siri) replaces the deprecated
com.apple.ironwood.supportpayload that earlier benchmark versions used. Current key isallowAssistant=falseoncom.apple.applicationaccess.
Section 2.3.4 notes
- Both checks are conditional on Time Machine being configured. CIS states explicitly that if Time Machine is disabled, the audit passes by default. Our queries use Query pattern #4 (absence-passes) — they return 1 row when the TimeMachine plist is absent or doesn't contain the offending value.
- 2.3.4.1 (Backup Automatically) — plist-based setting with a
companion profile (
com.apple.MCX.TimeMachine/AutoBackup=true). Terminal remediation was removed in macOS 15 Sequoia (plist now protected), so no scripts ship. Profile-only for deliberate enforcement. - 2.3.4.2 (Volumes Encrypted) — GUI-only remediation per CIS. No shippable script or profile key; the query detects non-encrypted destinations when Time Machine is configured, and default-passes on unconfigured hosts. Flagged in Limitations below too — enforcement must happen out of band.
Section 2.6 notes
- 2.6.1.1 (Location Services) and 2.6.1.2 (menu bar icon)
both use local-state queries (
location_servicestable andplisttable on/Library/Preferences/com.apple.locationmenu.plist) with pass/fail shell scripts. No MDM profile keys — the PDF only provides Terminal and Graphical remediation paths. - 2.6.3.1–2.6.3.4 (Analytics & Improvements) — all four are
profile-only on different
PayloadTypes (com.apple.SubmitDiagInfo,com.apple.assistant.support,com.apple.Accessibility,com.apple.applicationaccess). One profile per policy. CIS 2.6.3.5 is Manual (see Limitations). - 2.6.3.2 (Improve Siri & Dictation) — the key name is literally
Siri Data Sharing Opt-In Statuswith spaces, set to integer 2. The query usesCAST(value AS INTEGER) = 2. - 2.6.4 (Limit Ad Tracking) — profile-only
(
allowApplePersonalizedAdvertising=falseoncom.apple.applicationaccess). CIS says "profile must be installed for this recommendation" to be compliant. - 2.6.5 (Gatekeeper) — local-state query on the
gatekeeperosquery table (matches the PDF'sspctl --statusaudit). CIS notes thespctlbinary method was removed in macOS 15 Sequoia, so only a profile remediation ships. BothEnableAssessment=trueandAllowIdentifiedDevelopers=trueare combined into the single2.6.5.mobileconfigper CIS's same-profile requirement. Gatekeeper is on by default, so the runner may record a pre-delivery pass note — not disqualifying. - 2.6.6 (FileVault) — combines two checks: the
com.apple.MCX/dontAllowFDEDisable=truemanaged policy anddisk_encryption.filevault_status='on'. Enabling FileVault still requires on-device user interaction (no scriptable path), so the artifact is profile-only; the runner's pre-delivery query will fail on hosts without FileVault configured. - 2.6.7 (Lockdown Mode) is Manual — see Limitations.
- 2.6.8 (admin password for system-wide preferences) — query
uses the fleetd
authdbtable (flagged(Fleetd Required)) and checks all eightsystem.preferences.*rights forshared=false,group=admin,authenticate-user=true,session-owner=false. The pass script reimplements the CIS remediation script; the fail script only flipssystem.preferencesshared=true(single-right regression is enough to break the query).
Section 5 notes
- 5.1.1 (Home folders) — absence-passes query on
/Users/*with mode in {700, 701, 710, 711}. Excludes/Users/Shared/. Pass script sets 700; fail script loosens the console user's home to 755. - 5.1.2 (SIP) uses fleetd-independent
sip_configtable. 5.1.3 AMFI uses fleetdnvram_info. 5.1.4 SSV uses fleetdcsrutil_info. All three are one-liner state checks. Neither 5.1.2 nor 5.1.3 nor 5.1.4 ships test scripts — disabling SIP requires a reboot into Recovery, and the state is expected to be enabled by default. - 5.1.5 uses the
appstable JOINed withfileon path, and bitwise-tests the "other" permission triad for the world-write bit. Fail script creates a stub world-writable.appbundle. - 5.1.6 and 5.1.7 scan
/System/Volumes/Data/Systemand/Libraryfor world-writable directories. 5.1.6 uses the fleetdfind_cmdtable (faster than walking thefiletable); 5.1.7 uses the corefiletable with sticky-bit filter andextended_attributes.com.apple.rootlessexclusion. - 5.2.1–5.2.2, 5.2.7–5.2.8 all use the fleetd
pwd_policyorpassword_policytable. Scripts usepwpolicy -setglobalpolicydespite the CIS note that the command is deprecated — it is still the only terminal-scriptable path. - 5.4, 5.5, 5.11 each drop a file into
/etc/sudoers.d/viatee. macOS ignores sudoers.d filenames containing., so scripts useCIS_5_4_sudoconfiguration(no extension). Each query reads the fleetdsudo_infotable which parsessudo -Voutput. - 5.6 uses the fleetd
dscltable to verify the root account has noAuthenticationAuthority(i.e. is disabled). - 5.7 uses the fleetd
authdbtable with JSON extraction of the rule string; rule must containauthenticate-session-owner. - 5.8 (Login banner) — requires the banner file to exist at
/Library/Security/PolicyBanner.{txt,rtf}with mode 0644, root:wheel ownership. Pass script creates a .txt banner; fail script deletes it. - 5.9 (Guest Home Folder) — absence-passes on
/Users/Guest. Pairs with 2.13.1 (Guest Account disabled) and 2.13.2 (Guest SMB access disabled). - 5.10 counts XProtect's two LaunchDaemon plists in the
launchdtable. Expects both to be registered. - 5.11 uses
sudo_infoto confirm the "Log when a command is allowed by sudoers" field is true. Defaults to disabled in macOS 15 Sequoia and later.
Section 6 notes
- All 7 automated §6 recommendations are profile-only —
every query checks
managed_policieson eithercom.apple.Safariorcom.apple.Terminal. Single-key profiles each, except 6.3.4 which carries three keys (BlockStoragePolicy=2,WebKitPreferences.storageBlockingPolicy=1,WebKitStorageBlockingPolicy=1) in the same payload. - 6.3.1 scope note: Safari-managed keys typically deliver at
user scope rather than system scope. The query omits a
username = ''filter so any delivered scope satisfies it.
Section 4 notes
- 4.1 (Bonjour advertising) — profile-only on
com.apple.mDNSResponder/NoMulticastAdvertisements=true. The PDF also provides a localdefaults writeTerminal Method, but because mDNSResponder re-reads its config from managed sources on launch, the managed_policies path is the durable one. - 4.2 (HTTP server) — absence-passes query on
processes.path = '/usr/sbin/httpd'. Default is not running; fail script loads the LaunchDaemon and starts Apache. - 4.3 (NFS server) — compound absence-passes: no
/sbin/nfsdprocess AND/etc/exportsdoes not exist. Pass script disables the LaunchDaemon and removes/etc/exports; fail script creates the file and starts nfsd.
Section 3 notes
- 3.1 uses osquery's
launchdjoined withprocessesto verifycom.apple.auditdis both loaded (plist registered) and running (live process whose cmdline matches the plist'sprogram_arguments). Simply loading the LaunchDaemon is not enough — the daemon must have actually spawned.launchctl load -wflips both. - 3.2 reads
/etc/security/audit_controlvia thefile_linesosquery table with substring LIKE checks. Two alternative flag-sets are accepted: explicitaa,ad,-ex,-fm,-fr,-fw,loOR-allsubstituting for the failed-event flags. Scripts use the explicit form. - 3.3 parses
/etc/asl/com.apple.installwithregex_matchto extractttl=Nand compare to 365, AND verifiesall_max=is absent. Both conditions must hold. The scripts useawkto target only the install.log file line (leaving other ASL rules untouched). - 3.4 parses the
expire-after:Nd OR NGline in/etc/security/audit_controlwithregex_matchand requires days≥60 AND size≥5. The Tahoe PDF allows day-only or size-only syntax too, but the benchmark's default guidance uses both together — matches macos-14 precedent. - 3.5 verifies root:wheel ownership and mode 440 (or 400)
on three scopes: the
/etc/security/audit_controlfile itself, thedir:target inside it, and the default/var/audit. Accepts either 440 or 400 since Apple's default and CIS's remediation have varied. Scripts normalize to 440 per the Tahoe PDF.
Section 2.1 notes
- 2.1.1.3 (iCloud Desktop & Documents sync) is the only
automated check in §2.1 — profile-only on
com.apple.applicationaccess/allowCloudDesktopAndDocuments. Every other §2.1 recommendation is Manual (see Limitations).
Section 2.7 notes
- 2.7.1 (Screen Saver Corners) — query reads
/Users/*/Library/Preferences/com.apple.dock.plistwhich requires FDA (flagged(FDA Required)). Uses the absence-passes pattern: any user with a hot corner set to 6 (Disable Screen Saver) fails. Scripts iterate console users to toggle a corner. Per-user state persists until a reboot/login — the test runner should re-evaluate after script execution.
Section 2.9 notes
- 2.9.1 (Help Apple Improve Search) is profile-only on
com.apple.assistant.supportwith the spaced key nameSearch Queries Data Sharing Status. Integer value 2 means "off/disabled" per Apple's opt-in-status convention.
Section 2.10 notes
- 2.10.1.2 (Apple Silicon sleep ≤15 min) — query uses the
fleetd
pmsettable with JSON extraction, branching onBattery Powerfirst, falling back toAC Power. Default- passes on non-Apple-Silicon hosts viasystem_info.cpu_typecheck. Also automatically satisfied when the 2.11.1 screen saver profile is enforced, per CIS's own note. - 2.10.2 (Power Nap) and 2.10.3 (Wake for Network
Access) — both use the fleetd
pmsettable; require pass on both AC Power and Battery Power. 2.10.2 is Intel-specific; on Apple Silicon,pmset -a powernapmay be ignored but the query still returns the current setting regardless. - 2.10.1.1 (OS Not Active When Resuming from Standby, Intel) is Manual — see Limitations.
Section 2.12 notes
- 2.12.1 (no password hints on local accounts) — query uses
the fleetd
user_login_settingstable which enumerates local users and reportspassword_hint_enabledper account. Pass script removes thehintattribute from all local users viadscl; fail script sets a test hint on the console user.
Section 2.13 notes
- 2.13.1 (Guest Account) accepts either the local
com.apple.loginwindow.GuestEnabled=falseplist value OR the managedcom.apple.MCXprofile with bothDisableGuestAccountandEnableGuestAccountset. Scripts exercise the local plist path. - 2.13.2 (SMB guest access) — query reads
/Library/Preferences/SystemConfiguration/com.apple.smb.server.plistforAllowGuestAccess, using absence-passes pattern (default is disabled). Scripts usesysadminctl -smbGuestAccess on/off. - 2.13.3 (Automatic Login) accepts either the local
autoLoginUserkey being absent OR the managedcom.apple.login.mcx.DisableAutoLoginClient=trueprofile. Scripts exercise the local plist path (defaults delete/defaults write).
Section 2.18 notes
- 2.18.1 (On-Device Dictation) is profile-only on
com.apple.applicationaccess/forceOnDeviceOnlyDictation.
Section 2.11 notes
- 2.11.1 (screen saver idle ≤15 min) and 2.11.2 (require
password on wake) are profile-only on
com.apple.screensaver. 2.11.1 uses the absence-passes / numeric threshold pattern (query pattern #4 combined with pattern #2): the setting must be managed with a value between 1 and 900 inclusive. - 2.11.2 is a two-key profile:
askForPassword=trueANDaskForPasswordDelay ≤ 5. Both keys live in the samecom.apple.screensaverpayload dict. The PDF notes the terminal command-line method "does not work as expected" on modern macOS, so a profile is required. - 2.11.3, 2.11.4, 2.11.5 all read the local
/Library/Preferences/com.apple.loginwindow.plistvia theplistosquery table — world-readable, no FDA needed. Scripts (defaults write) are the primary test mechanism. - 2.11.3 (custom login message) — query passes on any
non-empty
LoginwindowText. CIS leaves the actual text to the organization.
Section 2.3.3 notes
- 2.3.3.3 (Printer Sharing) — the PDF's audit uses
cupsctl, but osquery has no native CUPS-settings table. The query useslistening_portsto detect CUPS listening on a non-loopback interface (which happens when sharing is enabled). Heuristic but reliable for the common case. - 2.3.3.7 (Internet Sharing) — the PDF accepts either a local
defaultssetting or a managed profile as compliant. The query checks the localcom.apple.natplist only. Both a test script (localdefaults write) and a profile (forceInternetSharingOffviacom.apple.MCX) are provided; scripts take priority in the runner. - 2.3.3.8, 2.3.3.9 (Content Caching, Media Sharing) —
profile-only tests.
managed_policiesqueries; CIS 2.3.3.9 explicitly states the profile method is the only supported path. - 2.3.3.10 (Bluetooth Sharing) — per-user ByHost setting. Scripts
iterate
/Users/*and rundefaults -currentHost writeper console user. Query uses thepreferencestable's negation pattern. Hosts without login users at test time may fail to exercise the setting.
Org-decision policies
Where CIS leaves the choice to the organization, Fleet provides both enable and disable profile variants.
(empty — populated per section)
Optional policies
Recommendations that CIS includes but does not require at a given level (e.g. password complexity components) ship here for teams that want them.
(empty — populated per section)