FidoMetadataService#findEntries behaviour #412
Replies: 1 comment
-
Hi! Thank you for the detailed description of the problem. I see what you mean. But as far as I can tell, those test cases violate the MDS3 specs. Both FIDO Metadata Service 3.0 and FIDO Metadata Statement 3.0 state in their definitions of the
so I find it odd that the conformance tests include test cases with distinct authenticator models reusing the same attestation certificate, despite one of the metadata statements naming that certificate in its I also don't see any restriction, or even guidance, in the specs on when to match by which of |
Beta Was this translation helpful? Give feedback.
-
FIDO2 and WebAuthn support multiple attestation formats, each with its own conventions for identifying authenticators and validating trust:
FIDO U2F (fido-u2f):
FIDO2/WebAuthn Formats (e.g., packed, tpm, android-key):
The FIDO Alliance Metadata Service (MDS) reflects this distinction:
findEntries method searches for metadata entries in the FIDO MDS that match either the provided attestationCertificateChain or aaguid.
So in some cases, it mismatch attestation formats by using Subject Key Identifiers (SKIs) for non-FIDO-U2F cases where AAGUID should be the primary identifier.
So basically, If an attestation statement is from a
FIDO2
format (e.g., packed), it provides anAAGUID
, and the certificate chain (if present) is meant to prove trust, not to identify the authenticator model via SKI.However, findEntries computes
SKIs
from the certificate chain and searches for metadata entries matching those SKIs, even if the attestation isn’tU2F
.If a metadata entry for a FIDO2 authenticator happens to include an SKI (e.g., in attestationCertificateKeyIdentifiers) that matches the computed SKI, the method could return that entry—even if the
AAGUID
doesn’t match or isn’t relevant.This leads to a false positive when I am running FIDO2 conformance tests : a metadata entry being returned that doesn’t actually correspond to the authenticator’s intended model (as identified by its AAGUID).
Sample logs from my server highlighting this mismatch :
As you could probably notice from the logs above, it matched 2 entries from the MDS, one with correct
aaguid
and other one withcertSubjectKeyIdentifiers
.The attestation in this test case was supposed fail since the
aaguid
matching metadata doesn't contain the trust anchors but the attestation passed since the it also matchedU2F
metadata due tocertSubjectKeyIdentifiers
which contains the trust anchors.I was trying to use filters in the
FidoMetadataService
but couldn't find a way to use attestation format in there.Shouldn't the library only match using AAGUID when it's available in the attestation statement and fallback to SKI when
fido-u2f
format is used ?Do you have any insights on this problem ?
Beta Was this translation helpful? Give feedback.
All reactions