AIMF Security Research · Report 1 of 2 · Original Finding

macOS Gatekeeper Revocation Bypass via Network-Layer Attacks

The original report: how an attacker on the same network could make an unreachable revocation check end in execution — and why the report was closed as intended behavior.

Published July–August 2026 · Full paper: github.com/aimarketingflow/macos-gatekeeper-revocation-bypass (PAPER.html + 5 figures) · This page is a summary and landing page for the follow-up: October 2026 Retest →

Abstract (condensed). The paper documents a vulnerability in macOS Tahoe's certificate revocation enforcement that allows an attacker on the same network to bypass Gatekeeper's "Malware Blocked" protection for applications signed with revoked Developer ID certificates. The root cause is a triple failure: CRLite — Apple's offline bloom-filter revocation system — was present in the valid.sqlite3 schema but disabled via feature flags (UseCRLite is disabled); valid.sqlite3 contained zero Developer ID certificate serials; and the fallback policy (rule 11) fails open when OCSP is unreachable — allowing a revoked-certificate application to launch with only a bypassable "unidentified developer" prompt instead of the non-bypassable "Malware Blocked" dialog.

How the Attack Flows

Attacker on the same network ARP spoof + DNS poisoning ocsp.apple.com unreachable trustd: OCSP query times out Revoked app executes The check that should have caught this: CRLite offline verdict — DISABLED, never consulted With the responder unreachable, the evaluation cannot confirm revocation — and the fallback policy permits the launch.

How Certificate Revocation Actually Works

Original deck slide: the macOS certificate revocation flow — user opens app, syspolicyd, trustd, ocsp.apple.com, result
From the original deck: the revocation check chain. OCSP is the only real-time revocation check in macOS — which is what makes its reachability load-bearing. Slide 4, original deck (August 2026)

How It Was Found: Firewall-Based Constraint Analysis

The vulnerability was not found by reading code or fuzzing — it was found by constraining the system: selectively blocking security daemons' network access with a local firewall and watching which guarantees broke. That methodology turns "what does this daemon depend on" into a testable question, and it produced the causal chain:

StepObservation
Initial observationA timed WrongPredictState error appeared when the firewall blocked security daemons — the first hint that trust evaluation was sensitive to network reachability
LuLu timeline correlationBlocking windows correlated precisely with trust-evaluation failures, establishing the causal link between network denial and revocation blindness
From firewall to network attackOnce the dependency was proven, the same blindness was reproduced with attacker-controllable vectors: ARP-spoofed NTP and poisoned DNS

Why Each Vector Works

NTP manipulation — ARP MITM lets the attacker control time. Clock drift undermines timestamp validation across the trust chain: certificate validity windows, response freshness, and cache expiry all become attacker-steerable. The paper documents drift accumulation and its security impact (§2).
DNS poisoning — pointing the revocation hostnames anywhere but their responder produces three-channel blindness (§3): OCSP queries are blocked, notarization checks fail, and the offline channels that should compensate are empty or disabled. The machine cannot get an answer — and, critically, has no local answer to fall back on.
WiFi-only simplification — the final variant (§7) needs no Thunderbolt hardware at all: same-network DNS poisoning alone reproduces the bypass in ~5 minutes, which moves the scenario from "lab rig" to "coffee-shop network."

The Three Attack Vectors

All three produce the same result. The discovery method itself — firewall-based constraint analysis — simulates network-layer attacks on macOS security daemons using a local firewall.

VectorComplexityResult
Thunderbolt + NTP MITM (ARP spoofing, clock manipulation)~105 minutessyspolicyd rule-11 fail-open engages when OCSP is unreachable → revoked-certificate app launches
Thunderbolt + DNS poisoning~5 minutes
WiFi-only DNS poisoning~5 minutes

The Triple Failure

Original deck slide: the triple failure — CRLite disabled, valid.sqlite3 empty of Developer ID serials, OCSP network blocked; syspolicyd rule 16 allow, app launches
From the original deck: three independent failures converge — and the enforcement engine's verdict is allow. Slide 6, original deck (August 2026)
1 · CRLite disabled by feature flag offline revocation layer present but inert 2 · valid.sqlite3: zero Developer ID serials nothing to check revoked status against 3 · syspolicyd rule 11 fails open unreachable check → permit launch Revoked-certificate app EXECUTES any one alone is survivable — together, the offline defense does not exist
1 · CRLite disabled. The offline revocation layer existed in the schema but the feature flag was off: UseCRLite is disabled (via feature flags) — captured July 24, 2026.
2 · Empty coverage. valid.sqlite3 held no Developer ID certificate serials — nothing to check revoked status against offline.
3 · Fail-open fallback. With OCSP unreachable and no local revocation data, syspolicyd's rule 11 policy allowed the launch.

Proof: Side by Side

Original deck slide: live demo side by side — not under attack shows the malware-blocked dialog; under DNS attack the app launches silently
The controlled comparison: the same revoked-cert app, blocked normally (left) vs. launched silently under DNS attack (right). Slide 11, original deck (August 2026)

The proof-of-concept on video: the bypass running live, from the original disclosure. youtube.com/watch?v=4MXjfBAxc9I

Original deck slide: system logs showing trustd and syspolicyd approved the revoked app during the attack window
The log evidence: trustd's OCSP requests timed out during the attack window, and syspolicyd marked the application as user-approved. Slide 13, original deck (August 2026)

Controls

ControlDateResult
Positive control — bypass confirmedJuly 9, 2026Revoked-certificate app launched under attack conditions
Negative control — unnotarized appJuly 7, 2026Rejected (the attack is specific to the revocation path)
Negative control — post-fixJuly 14, 2026 (macOS 26.5.2)Bypass no longer reproduced after OS update

The Apple Exchange — Full Thread

The complete ticket thread — the original report, every rebuttal with log evidence, Apple's responses, and the final "working as expected" close — is preserved in the public evidence repository: Full ticket thread OE1107167498810 → (names redacted; technical content verbatim)

Screenshot of the Apple Security Research portal thread for ticket OE1107167498810 (names covered)
The live portal thread as captured October 27, 2026 — reporter and Apple staff names covered. The thread spans July 9 – August 25, 2026: the report, three rebuttals with log evidence, the July 28 "intended behavior" response citing the published trustd source, and the final close. Capture: security.apple.com, ticket OE1107167498810

Disclosure Timeline — Apple's Responses, Verbatim

Original deck slide: what Gatekeeper promises, with the real Malware Blocked dialog
The protection at stake: the non-bypassable "Malware Blocked" dialog — the promise the fail-open route avoids. Slide 2, original deck (August 2026)
Response 1 (June 22, 2026): "This report was reviewed but it does not outline or demonstrate a security vulnerability."
Response 2 (June 30, 2026): "Thank you for the additional exploitation evidence. We looked at the full chain and the code execution comes from a curl-delivered binary that never receives a quarantine attribute combined with a non-default VSCode auto-task setting, neither of which is caused by the NTP time shift and neither of which Apple treats as a Gatekeeper bypass. The OCSP and syspolicyd errors in the logs track the network disruption from the ARP spoofing rather than the clock offset, so we don't see a security issue here and are closing the report."
Response 3 (July 14, 2026): "The scenario as described requires an attacker to already control the victim's network, and the final step relies on the user explicitly choosing to open the software despite a Gatekeeper warning. Because the software runs only after the user affirmatively overrides that warning, the report does not demonstrate that a security boundary is crossed without user consent."
The pattern: closed as not-a-vulnerability, then as user-consent, while the positive control stood. The CRLite enforcement layer that would have prevented the outcome sat disabled on the tested system. The follow-up report documents what changed afterward. verbatim quotes from the disclosure timeline
Original deck slide: submission status and CWEs — reported to Apple Security July 20, closed as intended behavior, assigned CWE-639, CWE-290, CWE-349
Submission status: reported July 20, closed August 1 as intended behavior, with CWE classifications assigned (authorization bypass, authentication-mode issue, origin-validation error). Slide 20, original deck (August 2026)

What Happened Next

In October 2026 the same artifact was re-tested on two current builds — macOS 26.7.1 and 27.0.1 — with radically different results. The fail-open did not reproduce in any tested condition, and the dormant CRLite layer was observed active on 27.0.1.

Continue to the follow-up report: October 2026 Retest →

Evidence discipline. This page summarizes the published paper; verbatim quotes are cited from its disclosure timeline. The full paper, figures, and capture dates live in the public repository linked above. Companion page: October 2026 Retest.

AIMF Security Research · Page generated October 27, 2026