At the login itself, passkeys do their job. The private key is never shared with the server, the passkey is bound to your domain and the passkey can't be used on a look-alike site, which is why passkeys resist phishing where user training has always struggled.
That pushes attackers one step earlier in the flow. If they get into the account once, through a phishable factor, e.g. SMS OTP, a password or a support agent who wants to be helpful, they no longer need to steal a credential: they can register one of their own. From that point on they hold a login that is phishing-resistant, convenient and, from the server's point of view, entirely legitimate.
Enterprise Passkey Whitepaper. Practical guidance, rollout patterns and KPIs for passkey programs.
The question comes up in almost every banking project we run. In August 2026, a Cornell study showed how much trouble users have once it has happened to them. The creation flow is usually built for adoption, which is the right goal, but few teams ask what that flow permits in the worst case.
A stolen password is a copy of an existing secret. Resetting the password makes that copy worthless. A passkey registered by an attacker is different: it is a new authenticator bound to the account, with its own private key under the attacker's control.
That has two consequences:
The enrollment attack has a repeatable sequence: obtain a phishable factor or session, open the genuine credential settings, register a new passkey and use that passkey after the original session or password is invalidated.
Researchers described this pattern in a July 2026 Microsoft Entra campaign. Attackers called employees, framed passkey enrollment as a security upgrade, relayed the victim's password and MFA challenge and bound an attacker-controlled credential to the real tenant (The Hacker News).
The iAuthFlow v2 kit demonstrated the same persistence against a Google account. The victim's password and authenticator-app code were relayed through an attacker-controlled browser. That authenticated browser then opened the passkey settings and registered a new credential. In the seller's demonstration, changing the password ended the current session but did not remove the new passkey, so the operator signed in again (Abnormal AI). This was seller-provided demonstration material rather than evidence from a confirmed live attack, which should remain explicit in the article.
The diagram below separates the genuine WebAuthn ceremony from the decision that allowed the wrong person to start it.
In CIAM, passkey enrollment is usually self-service: the user is the primary gatekeeper and the provider must secure creation through step-up authentication, risk checks, notifications and accessible recovery.
Workforce IAM adds an administrative control plane. In Microsoft Entra, organizations can restrict registration with Conditional Access and authentication-strength policies, monitor enrollment events and centrally revoke credentials. The July 2026 campaign therefore exposed an insufficiently protected self-service registration path, not an inherent weakness in Entra or passkeys.
Thanks to Emin Hüseynov for highlighting the
important distinction between self-service CIAM enrollment and administrator-managed
workforce environments, as well as the practical alwaysUv caveat.
The Google account in that demonstration already had a passkey. The attacker did not break it. The victim used an authenticator-app code because that method was still available. The security of the account therefore remained bounded by its weakest accepted sign-in, recovery or support-assisted route.
Adding passkeys alongside passwords and one-time codes improves the passkey path, but it does not make the other paths phishing-resistant. Enrollment security ultimately includes reducing or retiring those weaker methods, especially for credential management.
If a passkey registration is suspicious, first stop account changes by restricting it and revoking active sessions and tokens. The sequence below shows what follows and why a password reset comes later.
The Cornell study simulated compromised Google, PayPal and LinkedIn accounts and asked 31 participants to recover them. Most participants struggled to identify and remove the foreign passkey and complete the other containment steps. One participant interpreted two iCloud Keychain entries as one passkey covering two devices (Cornell Chronicle).
The sample is small, so it should not support a universal claim that users "cannot" recover their accounts. It does support a narrower design conclusion: credential provenance, plain labels, independent notifications, a visible "not mine" path and support-assisted containment are part of the security control.
The mockup below turns those conclusions into a credential list a user can act on.
Four questions cover most of the design work:
Try passkeys in a live demo.
A new passkey is at least as powerful as the strongest factor on the account, so the check before creating it has to be at least as strong.
NIST SP 800-63B-4 says the same in normative language. Section 4.1.2.1 requires the binding to be authenticated at the highest assurance level the account already offers, capped at the level the new authenticator will be used at and the provider has to notify the subscriber over a separate channel. Most consumer flows append a passkey to a session that started with a password and the existing MFA in place (optional).
Recommendations:
A passkey should not be stored in a platform credential manager on a public terminal or in a shared operating-system profile. Anyone who can unlock that profile may be able to use the passkey and signing out of the relying party does not remove it.
The difficult part is that WebAuthn does not expose a reliable "this device is shared" signal. An AAGUID identifies an authenticator type or model, not a unique device. The authenticator-attachment result distinguishes platform from cross-platform use and the backup flags describe whether a credential is eligible for backup and its current backup state. None of those values proves who owns the endpoint or how many people use it.
Use the strongest evidence available and treat the result as a risk classification, not a perfect device identity.
| Signal | What it can establish | How to use it |
|---|---|---|
| Managed-device posture from MDM, EDR, app attestation or an administrator-set kiosk/shared-device policy | Whether the organization intentionally manages the endpoint as personal, shared or kiosk | Use as the strongest policy input. Enforce the decision server-side. |
| First-party device binding established after strong authentication | That the same browser profile or app installation has returned over time | Store a random, rotating device handle in a secure first-party cookie or app storage. Use age, successful history and prior strong authentication; do not turn it into a permanent cross-site fingerprint. |
| Account switching on the same first-party handle | That several account IDs use one browser profile or app installation | Use distinct-account count, rapid switching and repeated patterns as risk signals. Calibrate thresholds from your traffic rather than declaring "more than two users in 30 days" an industry standard. |
| Browser and device fingerprinting | A probabilistic similarity between environments | Use only as corroboration. Updates, anti-fingerprinting protections, identical devices and privacy controls cause both splitting and collisions. |
| IP address, network, geolocation or user agent | Context, not device ownership | Never block or allow enrollment on one of these signals alone. Libraries, branches, homes, VPNs and carrier networks are shared for legitimate reasons. |
| Private mode or a missing device cookie | That continuity is unavailable | Classify as unknown, not automatically malicious or shared. |
Instrument the classifier before enforcing it. Measure how often known personal devices split into several identifiers, how often one identifier joins unrelated users and what share of enrollment traffic remains unknown. Seed tests with two internal accounts on the same profile and with one account across browser updates and private mode.
| Environment | Enrollment policy |
|---|---|
| Managed public kiosk | Suppress platform passkey creation. Offer a phone-based cross-device flow or an approved roaming security key if sign-in is required. |
| Shared workstation with one shared OS/browser profile | Do not store a platform passkey in that profile. FIDO enterprise guidance recommends a hardware security key or a passkey on the user's phone used through cross-device authentication. |
| Shared workstation with separate, strongly isolated user profiles | A platform passkey may be acceptable if organizational policy, profile isolation, screen-lock controls and lifecycle management make the profile personal to the user. Do not classify the physical computer alone. |
| Likely shared consumer device | Suppress automatic or conditional creation. For user-initiated creation, require fresh strong authentication, display a shared-device warning and offer Use your phone or security key and Not now. High-risk services may block platform creation completely. |
| Unknown or new environment | Do not call it trusted. Delay proactive enrollment or allow only a deliberate settings flow with step-up and clear storage disclosure. Use later successful history to raise confidence. |
| Established personal environment | Allow the normal creation flow while retaining step-up, user verification, notification, inventory and revocation controls. |
The safer alternative is often to move the credential, not merely to reject the user. A phone-based cross-device registration or a hardware security key lets a person on a shared computer keep the private credential on something they control.
The warning must appear before the operating-system passkey dialog, while the user can still choose a different path.
Create this passkey only on a device or profile you control
This passkey may be saved in [provider name] and may be available to anyone who can unlock this device or profile. Do not continue on a public computer, kiosk or shared account.
Continue on this device · Use my phone or security key · Not now
On a known managed-shared endpoint, replace the warning with a decision:
Don't save a passkey on this computer
This is a shared workstation. Use your phone or an approved security key instead.
User confirmation is useful, but it is not a substitute for managed-device policy or risk controls in high-assurance environments.
Subscribe to our Passkeys Substack for the latest news.
WebAuthn gives you more control over the passkey itself than many implementations use.
userVerification: "required" at creation binds the credential to a biometric or PIN.
It does not carry over to later logins on its own: if the
assertion request asks for preferred or discouraged,
possession of an unlocked device is enough again. Ask for required on both ceremonies.
On compatible CTAP2 authenticators, alwaysUv adds
authenticator-level defense in depth by requiring local verification even when the
relying party does not. It does not replace
userVerification: "required", is not universally supported and can cause
interoperability or recovery problems. Test the supported platform matrix and provide a
rollback path before enabling it across a managed fleet.authenticatorAttachment: "platform" keeps the passkey in the
platform authenticator on the device, which is what
makes adoption work. "cross-platform" points them at a
security key or a second phone, slower but on something they
carry with them. If you leave the field empty, the user makes the choice, which is fine
on a personal device and less so on a shared one.Step-up prevents an unauthorized binding. A notification detects one that still got through. Credential inventory, monitoring and revocation contain it. These controls use the same enrollment event, but should not depend on one delivery path.
Send a security notification whenever a passkey is created: in settings, during onboarding, after a sign-in, after recovery or through an automatic upgrade. Every new passkey is a new authenticator, so the notification itself should not depend on a risk threshold.
NIST SP 800-63B-4 requires a notification through a mechanism independent of the transaction that bound the authenticator. Its account-notification requirements also call for notifications to all stored non-postal notification addresses and clear instructions for disputing the event. An in-session banner is useful confirmation, but it is not an independent security notification.
Notify when a passkey is removed through a path you can observe, including self-service deletion and fraud-team revocation. You cannot observe a deletion performed only inside iCloud Keychain, Google Password Manager or another passkey provider because it does not report that event to the relying party.
| Channel | Role |
|---|---|
| Push to a separately enrolled app | The strongest common option when enrollment happened in a web session and the attacker does not control the enrolled app. |
| Email to a previously verified address | A useful baseline and durable record, but weaker if inbox compromise is part of the takeover. |
| SMS | A supplementary channel. Do not rely on it alone for high-security cases because of SIM-swap and account-recovery risk. |
| In-app banner or inbox | Good confirmation UX, but insufficient as the independent channel when the same session can read it. |
For high-security deployments, send both push and email. Protect the destination as part of the control: notify the old and new addresses when contact details change, do not let users disable credential-security alerts and treat a contact change followed by passkey creation as one high-risk sequence.
Use different copy for an action the user deliberately started and for conditional or automatic creation that the user may not recognize.
| Deliberate creation | Conditional or automatic creation |
|---|---|
| "You added a passkey." | "We upgraded your sign-in to a passkey." |
| Confirm the action briefly. | Explain what changed and why no action is needed if the user recognizes it. |
| Give standard "wasn't you" instructions. | Use softer fraud framing, but keep the same path to report or remove it. |
Suppressing the second notification avoids false alarms in the short term, but removes the account owner's detection control. Different wording is the safer answer.
Put the event in the first line and include:
Do not call the AAGUID a device name. It identifies an authenticator model and is not provably authentic without attestation. Do not expose credential IDs, public keys, raw handles, full account numbers or marketing content.
FIDO's general communication templates include links to account settings and support. For high-security or phishing-sensitive audiences, a stricter policy is defensible: tell users to open the known app, type the normal address or call a published phone number. That keeps the alert from training users to follow links in security messages. It is a threat-model choice, not a universal standards requirement.
A passkey was added to your account
Provider: iCloud Keychain
Created with: Safari on
macOS
Time: 30 August 2026, 14:32 AEST
If this was you, no action is needed. If it was not, open the service's known app or call customer support. We will never ask for your password or verification code in a security notification.
Show passkeys in an easy-to-find account-security list. Label them by provider or provenance, number several entries with the same provider label, show creation and last-used context where available and provide a visible "This wasn't me" path.
When the relying party removes a passkey, say that it was removed from the account and can no longer sign in. Do not claim it was removed from the user's device or passkey provider. Those are separate records.
The WebAuthn Signal API can reduce stale entries, but it is a
client API, not a server push channel. After user-initiated deletion in a compatible
browser, signal the complete list of credentials the server still accepts. After a fraud
team revokes a credential server-side, revoke it immediately and send the updated accepted
list during the next suitable client interaction. Use signalUnknownCredential only when
the server conclusively rejects an assertion because the
credential ID is unknown.
The registration event should reach three destinations:
Useful correlations include passkey creation shortly after recovery, a notification- address change, a new country, a shared-device classification or several registrations in a short period. Each signal should trigger review or an additional control, not count as proof on its own.
For high-risk contexts, consider temporarily preventing a new passkey from authorizing sensitive changes or high-value transactions. Google documents that some newly created passkeys may take up to seven days to become available for sign-in and separately disables passkeys it assesses as suspicious pending confirmation (Google Account Help). A cooling-off policy is a useful reference pattern, but it is not a WebAuthn requirement. Calibrate it to the service's risk and recovery model.
Every control above ends in one decision at runtime: is this session, on this device, allowed to create a passkey right now? Most teams cannot answer that today, because they have very little data on the enrollment flow.
Corbado Observe makes the enrollment side measurable on top of your existing login, without a passkey programme in place:
See Login Funnel in Corbado Observe →Corbado Connect is the other half, for teams that want the flow itself: it adds passkey creation and the step-up decision to an existing authentication stack, so the prompt appears when your risk rules allow it.
Igor Gjorgjioski
Senior Product Lead, VicRoads
We hit 80% mobile passkey activation across 5M+ users without replacing our IDP.
See how VicRoads scaled passkeys to 5M+ users, alongside their existing IDP.
Read the case studyPasskeys moved the phishing problem rather than removing it. With the login closed, the pressure sits on enrollment and recovery and both are usually built for conversion.
None of the controls are complicated: authenticate properly before you bind a credential, know whether the device is shared, be deliberate about the kind of credential you issue and tell the user afterwards. What takes effort is asking, at design time, what the creation flow permits when the person on the other side is not the account owner.
Corbado is the Passkey Intelligence Platform for large-scale CIAM teams running consumer authentication. We help you see what IDP logs and generic analytics tools can't: where passkeys, passwords, OTP, social login and fallback journeys succeed, stall or fail, which devices and browsers create friction, and when an OS update silently breaks login. Two products: Corbado Observe layers process mining and observability across authentication journeys. Corbado Connect adds managed passkeys with analytics built in alongside your IDP. VicRoads runs passkeys for 5M+ users with Corbado (+80% passkey activation). Talk to a Passkey Expert →
A passkey cannot be phished at login, so attackers move one step earlier. If they get into an account once through a phishable factor such as an SMS OTP, they register their own passkey and keep permanent access. Unlike a stolen password, that credential survives a password reset, because it is a legitimate credential on the account.
No. WebAuthn exposes properties of the authenticator and credential, not a reliable shared-device signal. An AAGUID identifies an authenticator model, authenticator attachment distinguishes platform from cross-platform use and backup flags describe whether a credential can be backed up. None proves who owns the endpoint or how many people use it.
userVerification: "required" prove that the Account Owner created the Passkey?#No. User verification proves that the authenticator locally verified a person through a PIN, biometric or similar method. It does not prove that this person is the legitimate account owner. The relying party still needs strong authorization before it binds the new passkey and must validate the UV flag.
Not from WebAuthn alone. The backup-eligibility and backup-state flags describe properties of the credential, not a provider's device inventory. A synced passkey may become available on several devices without a new registration event reaching the relying party.
It depends on the threat model. FIDO's general communication templates include links to account settings and support. High-security services can avoid action links and instead tell users to open the known app, type the normal address or call a published number, so the alert does not train users to follow links in security messages.
The server-side revocation makes the passkey unusable immediately, but the user may still see a stale entry in their credential manager. In a compatible client context, the WebAuthn Signal API can provide the complete list of credentials the relying party still accepts so the credential manager can reconcile its copy.
Related Articles
Table of Contents