web-auth / webauthn-framework

FIDO-U2F / FIDO2 / Webauthn Framework
MIT License
403 stars 53 forks source link

Problem when registering new users on Windows #214

Closed lea-ger closed 2 years ago

lea-ger commented 2 years ago

Hi,

I am trying to use this package and always run into an issue when trying to register new users. This issue seems to only appear when using Windows Hello, as I've tested this on a colleague's MacBook and it worked there seamlessly. I first thought that this was an issue with my configuration but it appears that the same issue can be found on the demo page (see screenshot below). The issue seems to be the attestationObject's credential length which is used in AttestationObjectLoader::109, the byte length read from the StringStream is way too large. I'm not too well versed on the inner workings of the package or the details of the inner workings of WebAuthn authentication, so I'm afraid this is all I can provide as help to find the reason for this issue. But it might be related to this issue.

Here is an extract of a stacktrace I'm getting: [2022-04-01 18:12:37] local.ERROR: Out of range. Expected: 35079, read: 289. {"userId":1,"exception":"[object] (Assert\InvalidArgumentException(code: 37): Out of range. Expected: 35079, read: 289. at C:\Users\Leander\PhpstormProjects\brezel\api\vendor\beberlei\assert\lib\Assert\Assertion.php:2728) [stacktrace]

0 C:\Users\Leander\PhpstormProjects\brezel\api\vendor\beberlei\assert\lib\Assert\Assertion.php(840): Assert\Assertion::createException('\xCCS\x84@3\x11P\x19\x7F\xE4\xB3\x90\x8FY\x90...', 'Out of range. E...', 37, NULL, Array)

1 C:\Users\Leander\PhpstormProjects\brezel\api\vendor\web-auth\webauthn-lib\src\StringStream.php(58): Assert\Assertion::length('\xCCS\x84@3\x11P\x19\x7F\xE4\xB3\x90\x8FY\x90...', 35079, 'Out of range. E...', NULL, '8bit')

2 C:\Users\Leander\PhpstormProjects\brezel\api\vendor\web-auth\webauthn-lib\src\AttestationStatement\AttestationObjectLoader.php(109): Webauthn\StringStream->read(35079)

3 C:\Users\Leander\PhpstormProjects\brezel\api\vendor\web-auth\webauthn-lib\src\PublicKeyCredentialLoader.php(139): Webauthn\AttestationStatement\AttestationObjectLoader->load('o2NmbXRkbm9uZWd...')

4 C:\Users\Leander\PhpstormProjects\brezel\api\vendor\web-auth\webauthn-lib\src\PublicKeyCredentialLoader.php(100): Webauthn\PublicKeyCredentialLoader->createResponse(Array)

5 C:\Users\Leander\PhpstormProjects\brezel\api\vendor\web-auth\webauthn-lib\src\PublicKeyCredentialLoader.php(120): Webauthn\PublicKeyCredentialLoader->loadArray(Array)

6 C:\Users\Leander\PhpstormProjects\brezel\api\vendor\web-auth\webauthn-lib\src\Server.php(256): Webauthn\PublicKeyCredentialLoader->load('{\"id\":\"xYZ74Bvm...')

7 C:\Users\Leander\PhpstormProjects\brezel\api\app\Http\Controllers\GeneralController.php(424): Webauthn\Server->loadAndCheckAttestationResponse('{\"id\":\"xYZ74Bvm...', Object(Webauthn\PublicKeyCredentialCreationOptions), Object(Nyholm\Psr7\ServerRequest))

8 C:\Users\Leander\PhpstormProjects\brezel\api\vendor\laravel\framework\src\Illuminate\Routing\Controller.php(54): App\Http\Controllers\GeneralController->registerWebauthnResponse(Object(Illuminate\Http\Request), Object(App\System\System))

9 C:\Users\Leander\PhpstormProjects\brezel\api\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php(45): Illuminate\Routing\Controller->callAction('registerWebauth...', Array)

To Reproduce Go to https://webauthn.spomky-labs.com/register and try to register using Windows Hello.

grafik

Desktop (please complete the following information):

Spomky commented 2 years ago

Hi @lea-ger,

I am sorry but I cannot reporduce the issue on my computer (Windows 11) Could you please send me:

Both are JSON objects

lea-ger commented 2 years ago

Hello @Spomky,

In this case, it resulted in this response:

{
   "status":"error",
   "errorMessage":"Out of range. Expected: 43793, read: 289."
}
Spomky commented 2 years ago

Many thanks.

The structure looks good, but the attested credential data returned by the authenticator has an invalid public key ID length (43793 bits is way too long)

The authenticator data (in hex, spaces added) is 9604ea82824e98a4ada14b4462d0d73a8ec469130da91b19307459229f74a359 45 00000000 000020de96bb6f97c4ee8cc7402918b8 ab11 f9ee22bc25f56373ba54b62ec379c5cdeba401030339010020590100b581a1a9ee709d088a4a3f5f0ae727c7cad803c1769bf5d429b1417989a56fd6467ba867f4a3cb4fa089ee7585e0ab6e6ac8efa60986294dd4382b39e42c89d6ce3ab721a1ae79e6b0cb143199efac2fac816f614e961406781b37ceb1a79b73b9a119d10e52d860dd7b76d80a611fdffb37eaaa2a019a06ebd0bedf29e64ee8932c5f5f8e245792b1dda32cb5743dfbb1d71544f21de3943d56ebfa348597b8266fe67651569af433c15062262f847e02d464d628e832b3997a0ce3d43c6c42abb4e2bf52b871737861aab31835e48febeecf5c666e5bd1b185539e1c8ff8b9fe89488820a3da0c54c7ea2d061a75b89a61771e2f2198a6d596abaf9ea611172143010001

What is your authenticator manufacturer (computer brand/TPM chip)? The authenticator with the AAGUID 000020de-96bb-6f97-c4ee-8cc7402918b8 seems to be the reason for failure, but I am not sure at all.

Could you please test with a roaming authenticator (USB/BLE interface) and Windows Hello?

lea-ger commented 2 years ago

The computer itself is a HP notebook and the TPM chip was manufactured by AMD.

Using a roaming authenticator (in this case I used a Yubico Security Key NFC) doesn't seem to work for me either. Here is the authenticator response:

{
   "id":"FsWK1xvQgVijGcW2t1T8f6YMudEBX4FDQ8Nft1jrWo7w-JJTWbDhgRcWpPhwKACN-hBY3B0NBXQ7SAg4bJzDLu-e2Pdhx-Px_g9dN1S8c-Vwcx4YpQ-cKESjoI_ARi3o-DZdxHUQv5wvYSziN5_mXsxbH6J_F_JUjRx9NxVfr44",
   "type":"public-key",
   "rawId":"FsWK1xvQgVijGcW2t1T8f6YMudEBX4FDQ8Nft1jrWo7w+JJTWbDhgRcWpPhwKACN+hBY3B0NBXQ7SAg4bJzDLu+e2Pdhx+Px/g9dN1S8c+Vwcx4YpQ+cKESjoI/ARi3o+DZdxHUQv5wvYSziN5/mXsxbH6J/F/JUjRx9NxVfr44=",
   "response":{
      "clientDataJSON":"eyJjaGFsbGVuZ2UiOiJIUlNILWZ0VzNEOVJhRmYyUmdVZm1BeHJHdHliLW0xeFhPSmJjVjcxcmxjIiwiY2xpZW50RXh0ZW5zaW9ucyI6e30sImhhc2hBbGdvcml0aG0iOiJTSEEtMjU2Iiwib3JpZ2luIjoiaHR0cHM6Ly93ZWJhdXRobi5zcG9ta3ktbGFicy5jb20iLCJ0eXBlIjoid2ViYXV0aG4uY3JlYXRlIn0=",
      "attestationObject":"o2NmbXRkbm9uZWdhdHRTdG10oGhhdXRoRGF0YVjSlgTqgoJOmKStoUtEYtDXOo7EaRMNqRsZMHRZIp90o1lFAAAAAQAAgBbFitcb0IFYoxnFtrdU/H+mDLnRAV+BQ0PDX7dY61qO8PiSU1mw4YEXFqT4cCgAjfoQWNwdDQV0O0gIOGycwy7vntj3Ycfj8f4PXTdUvHPlcHMeGKUPnChEo6CPwEYt6Pg2XcR1EL+cL2Es4jef5l7MWx+ifxfyVI0cfTcVX6+OpAEBAycgBiFYIEi0puUv5PCRuafjh0NkT+54W39r+vMxr7vuCW2RwWgf"
   }
}
Spomky commented 2 years ago

Hi,

Many thanks for the details. I extracted the attestation object and I am still facing the same issue. The first bytes are correct: same RP ID hash, same flags, counter is 1. But the key length and the following bytes (public key) are still invalid. Regarding the AAGUID, I was expecting one of those listed on the Yubico page, but here we have 00008016-C58A-D71B-D081-58A319C5B6B7

So for me the issue comes from the client (web browser). I tested with Firefox and it is failing for me (was working fine few days ago). Google Chrome, MS Edge or Opera work as expected.

I found that issue on Bugzilla: https://bugzilla.mozilla.org/show_bug.cgi?id=1554397

Can you tell me if you are using Firefox? If yes, can you test with another browser and confirm if it fails or not?

Many thanks. Regards.

lea-ger commented 2 years ago

Hi,

yes, I am using Firefox and indeed that seems to be the issue. I was able to successfully register using MS Edge. Thanks for linking the Bugzilla issue, I hope this will be worked on soon.

Thanks a lot for your help and your patience!

github-actions[bot] commented 1 year ago

This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.