| パッケージ | 影響を受けるバージョン | 修正済みバージョン |
|---|---|---|
| web-auth/webauthn-framework | ≥ 4.5.0, < 4.9.0 | 4.9.0 |
| web-auth/webauthn-lib | ≥ 4.5.0, < 4.9.0 | 4.9.0 |
The ProfileBasedRequestOptionsBuilder method returns allowedCredentials without any credentials if no username was found.
When WebAuthn is used as the first or only authentication method, an attacker can enumerate usernames based on the absence of the allowedCredentials property in the assertion options response. This allows enumeration of valid or invalid usernames.
return $this->publicKeyCredentialRequestOptionsFactory->create(
$this->profile,
count($allowedCredentials) <= 0 ? self::getRandomCredentials(): $allowedCredentials,
$optionsRequest->userVerification,
$extensions
);
private static function getRandomCredentials(): array
{
$credentialSources = [];
for ($i = 0; $i <= rand(0,1); $i++) {
$credentialSources[] = new PublicKeyCredentialSource(
random_bytes(32),
"public-key",
[],
"basic",
new EmptyTrustPath(),
Uuid::v7(),
random_bytes(77),
Uuid::v7()->__toString(),
rand(0, 6000),
null
);
}
return array_map(
static fn (PublicKeyCredentialSource $credential): PublicKeyCredentialDescriptor => $credential->getPublicKeyCredentialDescriptor(),
$credentialSources
);
}
curl https://example.com/assertion/options
-H 'content-type: application/json'
--data-raw '{"username":"NotMeRandomUsername123"}'
By knowing which usernames are valid, attackers can focus their efforts on a smaller set of potential targets, increasing the efficiency and likelihood of successful attacks.
これらの製品をお使いですか?サイトをスキャンして、脆弱なバージョンが公開されていないか確認しましょう。
無料でサイトをスキャン