Orphaned iCloud Keychain sheet blocks the browser window

#565065574 macOS 13.3+ device/fido/mac

macOS draws the passkey prompt as a window-modal sheet whose contents come from a separate system process. If that process dies, the sheet stays attached with a dead content view: Escape and Cancel do nothing, and every tab in the window is blocked until the browser is killed.

Stuck macOS passkey sheet over a dimmed browser window
Which build

The iCloud Keychain path needs the com.apple.developer.web-browser.public-key-credential entitlement, which chrome/BUILD.gn only adds for branded builds. Part 1 needs released Chrome (entitlement, no fix). Part 2 needs a branded patched build. A plain local Chromium never shows this sheet.

Part 1 — force the stuck state

  1. Open a browser window with two or three tabs.
  2. In one tab, start a passkey sign-in on github.com. Wait for the macOS sheet, then leave it alone.
  3. In Terminal, kill the processes drawing the sheet.
    pkill -9 -f "AuthenticationServices.Helper|LocalAuthenticationRemoteService"
  4. Back in the browser: click the sheet, press Escape, click Abbrechen. Then try your other tabs.
    Sheet does not move. Other tabs are not clickable.
  5. Open chrome://device-log in a second window and wait, up to two minutes.
    iCKC: getAssertion failed, domain: com.apple.ViewBridge code: 17
    Failing assertion request due to status 3 from iCloudKeychain
    Request is over, sheet is still there, window still blocked. It stays indefinitely.
  6. Recover without killing the browser: run the same kill again.
    pkill -9 -f "AuthenticationServices.Helper|LocalAuthenticationRemoteService"

Part 2 — patched build

  1. Steps 1 to 3 identical.
  2. Watch chrome://device-log, same two minute wait.
    iCKC: getAssertion failed, domain: com.apple.ViewBridge code: 17
    iCKC: system UI terminated leaving an unresponsive sheet attached; detaching it
    Second line is new. The sheet slides away on its own, tabs respond. No second kill.
After killing the helper Unpatched Patched
Escape / Cancel on the sheet Nothing Nothing
When the ViewBridge error arrives Sheet stays, window blocked Sheet detaches, window usable
Stuck for Until the browser is killed About two minutes
Manual recovery Second kill from a terminal None

A patched build does not dismiss instantly. Chromium only learns the system UI died when the delegate reports the error.

Original occurrence

23:16:28  Starting GetAssertion flow  rpId=github.com  timeout=180000
23:16:28  UI step: kPlatformAuthenticator        <- sheet presented
23:16:43  USB/HID added: YubiKey OTP+FIDO+CCID   <- enumerated while sheet up
23:16:56  [screenshot above, sheet already dead]
23:18:43  iCKC: getAssertion failed, domain: com.apple.ViewBridge code: 17
23:18:43  Failing assertion request due to status 3 from iCloudKeychain
23:18:54  iCKC: getAssertion completed           <- retry succeeds
23:18:54  UI step: kClosed
23:30     helpers killed by hand, sheet disappears

Chromium cleaned up, ran a second assertion successfully and closed its UI at 23:18:54. The dead sheet was still on screen eleven minutes later. Note status 3 is kUserConsentDenied: the site was told the user declined.