fido-alliance / conformance-test-tools-resources

Certification Test Tools Resources. For security and privacy related issues email tools@certification.fidoalliance.org
https://fidoalliance.org/certification/functional-certification/conformance/
43 stars 14 forks source link

Self-conformance tool fails to parse Attestation Certificate with Basic Constraints value "30 03 01 01 00" #769

Closed IwanTris closed 1 month ago

IwanTris commented 1 month ago

By submitting this issue you are acknowledging that any information regarding this issue will be publicly available.

If you have privacy concerns, please email conformance-tools@fidoalliance.org

FIRST PRE CHECK

What protocol are you implementing?

NOTE: UAF 1.0 certification have been officially sunset. U2F 1.2 only supported version of U2F.

What is your implementation class?

If you are platform authenticator vendor, please email conformance-tools@fidoalliance.org

What is the version of the tool are you using?

1.7.20-4

What is the OS and the version are you running?

For desktop tools

For UAF mobile tools

Issue description

While running self-conformance tool v1.7.20-4 for CTAP 2.1 - MDS3, subgroup MakeCredential Response step P-04, we encountered the following error: Error: hExtV parse error: 3003010100 at X509.getExtBasicConstraints (js/vendor/jsrsasign.min.js:238:4013) at Proxy.getCertificateInfoObject (js/utils.js:927:52) at n.eval (eval at compileCode (js/sandbox.js:25:26), :8159:32)

The attestation certificate returned by the applet (IPS_attestation_NFC_Test_1.zip) has Basic Constraints value "30 03 01 01 00", which according to https://www.rfc-editor.org/rfc/rfc5280 means cA = FALSE.

30: SEQUENCE 03: length 01: BOOLEAN 01: length 00: FALSE

BasicConstraints ::= SEQUENCE { cA BOOLEAN DEFAULT FALSE, pathLenConstraint INTEGER (0..MAX) OPTIONAL }

This cA value is the same as the expected value by self-conformance tool: (6) Basic Constraints extension MUST have the CA component set to false.

However, it seems that the self-conformance tool fails to parse the Basic Constraints TLV. Error: hExtV parse error: 3003010100 at X509.getExtBasicConstraints (js/vendor/jsrsasign.min.js:238:4013) at Proxy.getCertificateInfoObject (js/utils.js:927:52) at n.eval (eval at compileCode (js/sandbox.js:25:26), :8159:32)

For comparison, when the attestation certificate has the Basic Constraints value "30 00" (cA has defaut value FALSE), the self-conformance tool successfully parses the Basic Constraints TLV.

Can you please help to check why the self-conformance tool fails to parse the Attestation certificate with Basic Constraints "30 03 01 01 00"?

Thank you

iirachek commented 1 month ago

The conformance tools use jsrsasign for the processing of certificates, and its function for parsing basicConstraints extension is written in a way where explicitly defined cA:FALSE leads to an error.

With that said, on page 135 in rfc5280 the second paragraph states:

Implementers should note that the DER encoding of SET or SEQUENCE components whose value is the DEFAULT omit the component from the encoded certificate or CRL. For example, a BasicConstraints extension whose cA value is FALSE would omit the cA boolean from the encoded certificate.

So even though other libraries may process such extension value, I believe the cA:FALSE should still be omitted, i.e. the correct value for basicConstraints would be 30 00.

IwanTris commented 1 month ago

Hi iirachek, Thank you for the answer.