github northpolesec/santa 2026.9
v2026.9

7 hours ago

Notes

Security

The Santa codebase has been undergoing dedicated security review by folks with access to frontier AI security models. The issues fixed below were identified through that work, and we recommend updating. This is an ongoing investment to ensure Santa remains your most trusted endpoint security solution.

🔒 Fixed additional ways a cached execution decision could be reused after an executable's contents changed
🔒 Fixed issues where a decision for one architecture of a universal binary could be applied to another architecture in the same file
🔒 Fixed an issue where a Touch ID approval for one architecture of a universal binary let another architecture that also required Touch ID run without a prompt during the approval cooldown
🔒 Fixed a race where an allow decision could still be cached by macOS after Santa had invalidated it
🔒 Fixed two issues where a local user could crash santad, pausing enforcement until it restarted

Full details for each issue are available in the published advisories.

Announcements

🎉 Get the most out of Santa with Workshop! Workshop is North Pole Security's official sync service, built to integrate deeply with Santa. It is fully featured, scalable, and enterprise ready. Learn more at northpole.security.

Fixed

❗ Fixed transitive rules sometimes not being created when a compiler's output replaced an existing file, such as when rebuilding a binary in place
❗ Fixed unbounded memory growth when a block dialog was not shown, such as when the user had silenced it
❗ File access events once again report signing IDs with their team ID or platform: prefix, matching execution events. This had been broken since 2026.4.
❗ Workshop customers: With BlockNetworkMount enabled, Santa no longer blocks the macOS automounter's own mounts (such as auto_home and -hosts). Any network share the automounter then mounts is still checked against AllowedNetworkMountHosts.
❗ Workshop customers: Signal match reports now apply TelemetryFilterExpressions, so process arguments and environment variables are redacted the same way as in exported telemetry
❗ Workshop customers: redact() and hash() no longer rewrite empty fields. Previously, running either function on an empty field with a pattern that matches the empty string, like (.*), replaced every empty field in the row with the placeholder.
❗ Workshop customers: santactl sandbox now passes BINARY_PATH, HOME, and TMPDIR as resolved paths, so seatbelt rules match commands reached through symlinks such as Homebrew's bin/, and a retry right after a seatbelt block is evaluated again. TMPDIR no longer ends in a slash, so update any profile that appends to (param "TMPDIR").

Changed

↔️ Santa now hashes x86_64 executables that don’t use the hardened runtime (such as unsigned or ad hoc signed binaries) each time they run on Intel Macs or under Rosetta 2, to confirm their contents haven’t changed. Workflows that run many such binaries may see a performance impact. The new DisableExecutableIntegrityRecheck key skips this check, but it also removes the protection the check provides.
↔️ Binaries that a compiler runs right after creating them (such as with go run, cargo run, or bazel run) are no longer blocked because their transitive rule hasn't been created yet. Santa now holds the execution for up to CompilerTransitiveWaitMilliseconds (default 2000, set to 0 to disable) until the rule is created.
↔️ File access rule paths with repeated slashes (//) or a trailing slash are now normalized, so rules that previously never matched will begin to apply. Santa logs a warning naming each rule it normalizes.
↔️ When Santa cannot confirm that the file on disk is the one being executed, it now leaves the file's hash and signing details out of block dialogs and events, and the block dialog says the identity could not be verified
↔️ For ClientAuthCertificateCN and ClientAuthCertificateIssuerCN config keys, Santa will now fall back to additional certificates that matched if the first one's private key is unusable
↔️ FileChangesRegex and FileChangesPrefixFilters now apply to every target of rename, clone, copyfile, exchangedata, and link events, not only the first; an event is logged if any target is unfiltered and matches the regex
↔️ Tamper resistance now also protects the folders that contain Santa’s protected files, including its launchd configuration, against being renamed or mounted over.
↔️ Workshop customers: Network connection telemetry is now controlled by the Telemetry key.
    ⚠️ If you set an explicit Telemetry list, network connections are no longer logged after upgrading unless you add NetworkActivity. Add DNSActivity to also log DNS questions. As with other telemetry event types, if the Telemetry key is unset, all events are logged, including NetworkActivity and DNSActivity.

Added

➕ The new ExecutableIntegrityPolicy config key lets admins configure how Santa behaves when the on-disk file being evaluated for an exec does not match what the kernel is executing. In Monitor mode, Enforce behaves as Report.
➕ File access rules now also cover renaming or cloning a directory that contains a monitored path. The new ParentDirectoryProtection rule option controls this and can be audit (the default), enforce, or disabled.
    ⚠️ We plan to change the default to enforce in a future release. Review the audit events these rules log now, and add exceptions for any tools that should be allowed, before that change.
➕ Workshop customers: DNS rules can now be configured to sinkhole domains, and the new DNSActivity telemetry event logs the DNS questions each process makes (BETA)
➕ Workshop customers: CEL policies can now utilize annotations! add_annotation marks a tag on a process and controls how it propagates to children. A {session} placeholder gives each run of a tool its own tag. has_annotation checks during exec evaluation whether a tag has propagated to the current process. Annotations are also included in uploaded events.
➕ Workshop customers: CEL policies can now require a touch on a FIDO2 security key as an alternative to Touch ID
➕ Workshop customers: The removable media block and remount messages can now be set from Workshop, overriding BannedUSBBlockMessage and RemountUSBBlockMessage in the configuration profile


The Santa Lite package is rarely the right choice. Install the standard package unless you have a specific reason not to. Workshop customers should not install lite since it omits many features. See the lite package documentation for details. Download at: santa-2026.9-lite.pkg.

Santa documentation can be found at northpole.dev.

What's Changed

  • Release 2026.8 by @mlw in #1187
  • Updated docs dependencies with open Dependabot alerts by @russellhancox in #1189
  • ci: Fix broken tests on macOS 27, add missing localizations by @russellhancox in #1188
  • Move to Bazel 9.2.0 by @mlw in #1184
  • Pin nats_c to a commit instead of a tag by @mlw in #1190
  • cel: Add process annotation functions by @russellhancox in #1191
  • gui: Ignore silences for held responses, always call callback by @russellhancox in #1193
  • sync: Fallback to other certs if key is unreadable by @russellhancox in #1195
  • santad: Report physical footprint metric by @russellhancox in #1194
  • Add ExecutableIntegrityPolicy config and identity_unverified event field by @mlw in #1196
  • Show OverrideFileAccessAction in santactl status by @mlw in #1199
  • Clear synced ExecutableIntegrityPolicy on explicit UNSPECIFIED by @mlw in #1200
  • docs: Update image-size dep by @russellhancox in #1201
  • Apply ExecutableIntegrityPolicy to executions with unconfirmed identity by @mlw in #1197
  • syncv2: Populate annotations on events by @russellhancox in #1202
  • Snapshot failClosed with client mode in SNTConfigState by @mlw in #1204
  • Omit unverified file details from non-execution events by @mlw in #1203
  • Reduce block dialog detail for executions with unconfirmed identity by @mlw in #1198
  • i18n: Replace идентичность with подлинность in identity verification by @russellhancox in #1205
  • Add security key authorization for held executions by @russellhancox in #1206
  • Normalize file access rule paths by @mlw in #1207
  • deps: Update docs dependencies by @russellhancox in #1208
  • Add rawSigningID to SNTCachedDecision by @mlw in #1209
  • gui: Show full bundle version in About & menu by @russellhancox in #1210
  • Apply file change filters to all event targets by @mlw in #1211
  • File access options by @mlw in #1212
  • cel: Add {session} placeholder to annotations by @russellhancox in #1213
  • Remove FAA hot-path allocations by @mlw in #1217
  • santad: allow autofs fs types for mount events by @sharvilshah in #1219
  • Collapse ExecutableIntegrityPolicy to Enforce, Report, Ignore by @mlw in #1220
  • Verify compiler RENAME and CLONE targets against the source file by @mlw in #1221
  • Match autofs mounts on the kernel fs type number by @mlw in #1222
  • Note that ParentDirectoryProtection requires Santa 2026.9 by @mlw in #1224
  • Raise telemetry export batch and spool file size defaults by @tburgin in #1227
  • santad/common: add support for DNS network rule by @sharvilshah in #1223
  • Add troubleshooting docs for invalid signatures, sync certs, transitive races, and netd removal by @statico in #1229
  • syncv2: Populate file_bundle_category by @russellhancox in #1218
  • build: add entitlements check by @sharvilshah in #1228
  • santad: apply telemetry filter expressions to signal scan reports by @tburgin in #1238
  • Hold compiler-produced execs until their transitive rule lands by @mlw in #1234
  • Invalidate ES caches across all authorization clients by @mlw in #1232
  • santactl: show SEATBELT and CEL rules accurately in fileinfo by @mlw in #1240
  • Don't cache seatbelt denials by @mlw in #1239
  • Fix AuthResultCacheTest build after ESCacheFlusher change by @mlw in #1241
  • Remove forgetCachedDecisionForVnode: from SNTDecisionCache by @mlw in #1235
  • Raise the telemetry export file cap and fix spool and export docs by @mlw in #1231
  • sync/gui: support removable media block and remount messages by @sharvilshah in #1233
  • Document FAA signing ID wildcards by @mlw in #1243
  • santactl/sandbox: Resolve seatbelt parameters to canonical paths by @mlw in #1242
  • Updated docs dependencies by @mlw in #1244
  • Clear stale compiler marks on exec and by periodic sweep by @mlw in #1237
  • Updated docs dependencies by @mlw in #1245
  • Renamed docs pages that use MDX to .mdx by @Vpr99 in #1247
  • Log critical system binary decisions for execs muted by the ES default mute set by @mlw in #1249
  • Compute the seatbelt expectation cdhash from the slice the kernel executes by @pmarkowsky in #1251
  • Prefix FAA event signing IDs with the team ID or platform by @mlw in #1254
  • santad: DNSActivity, and the NetworkActivity/DNSActivity Telemetry keys by @sharvilshah in #1246
  • Removed sprintf-js from the docs dependency tree by @pmarkowsky in #1253

New Contributors

Full Changelog: 2026.8...2026.9

Don't miss a new santa release

NewReleases is sending notifications on new releases.