Filament: Multi-factor authentication (app) recovery codes can still be used multiple times via concurrent submission
The advisory, in context
A flaw in the handling of recovery codes for app-based multi-factor authentication allows the same recovery code to be reused via concurrent submission. This issue does not affect email-based MFA. It also only applies when recovery codes are enabled.
If an attacker gains access to both the user's password and their recovery codes, they get two authenticated sessions per recovery code burned instead of one, or more if they batch the parallel submissions wider, materially extending the attacker's window of access compared to what the single-use guarantee implies.
Affected packages
Start with the recorded fix for your release branch. Check your installed version and test compatibility before upgrading. Fixing this advisory does not rule out other vulnerabilities in the release.
From 4.0.0 before 4.11.5
Fixed in 4.11.5
73 explicitly affected versions
v4.0.0, v4.0.1, v4.0.10, v4.0.11, v4.0.12, v4.0.13, v4.0.14, v4.0.15, v4.0.16, v4.0.17, v4.0.18, v4.0.19, v4.0.2, v4.0.20, v4.0.3, v4.0.4, v4.0.5, v4.0.6, v4.0.7, v4.0.8, v4.0.9, v4.1.0, v4.1.1, v4.1.10, v4.1.2, v4.1.3, v4.1.4, v4.1.5, v4.1.6, v4.1.7, v4.1.8, v4.1.9, v4.10.0, v4.10.1, v4.10.2, v4.11.0, v4.11.1, v4.11.2, v4.11.3, v4.11.4, v4.2.0, v4.2.1, v4.2.2, v4.2.3, v4.2.4, v4.3.0, v4.3.1, v4.4.0, v4.5.0, v4.5.1, v4.5.2, v4.5.3, v4.6.0, v4.6.1, v4.6.2, v4.6.3, v4.7.0, v4.7.1, v4.7.2, v4.7.3, v4.7.4, v4.8.0, v4.8.1, v4.8.2, v4.8.3, v4.8.4, v4.8.5, v4.9.0, v4.9.1, v4.9.2, v4.9.3, v4.9.4, v4.9.5
View affected-version evidence
{
"ranges": [
{
"events": [
{
"introduced": "4.0.0"
},
{
"fixed": "4.11.5"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"v4.0.0",
"v4.0.1",
"v4.0.10",
"v4.0.11",
"v4.0.12",
"v4.0.13",
"v4.0.14",
"v4.0.15",
"v4.0.16",
"v4.0.17",
"v4.0.18",
"v4.0.19",
"v4.0.2",
"v4.0.20",
"v4.0.3",
"v4.0.4",
"v4.0.5",
"v4.0.6",
"v4.0.7",
"v4.0.8",
"v4.0.9",
"v4.1.0",
"v4.1.1",
"v4.1.10",
"v4.1.2",
"v4.1.3",
"v4.1.4",
"v4.1.5",
"v4.1.6",
"v4.1.7",
"v4.1.8",
"v4.1.9",
"v4.10.0",
"v4.10.1",
"v4.10.2",
"v4.11.0",
"v4.11.1",
"v4.11.2",
"v4.11.3",
"v4.11.4",
"v4.2.0",
"v4.2.1",
"v4.2.2",
"v4.2.3",
"v4.2.4",
"v4.3.0",
"v4.3.1",
"v4.4.0",
"v4.5.0",
"v4.5.1",
"v4.5.2",
"v4.5.3",
"v4.6.0",
"v4.6.1",
"v4.6.2",
"v4.6.3",
"v4.7.0",
"v4.7.1",
"v4.7.2",
"v4.7.3",
"v4.7.4",
"v4.8.0",
"v4.8.1",
"v4.8.2",
"v4.8.3",
"v4.8.4",
"v4.8.5",
"v4.9.0",
"v4.9.1",
"v4.9.2",
"v4.9.3",
"v4.9.4",
"v4.9.5"
]
}From 5.0.0 before 5.6.5
Fixed in 5.6.5
30 explicitly affected versions
v5.0.0, v5.1.0, v5.1.1, v5.1.2, v5.1.3, v5.2.0, v5.2.1, v5.2.2, v5.2.3, v5.2.4, v5.3.0, v5.3.1, v5.3.2, v5.3.3, v5.3.4, v5.3.5, v5.4.0, v5.4.1, v5.4.2, v5.4.3, v5.4.4, v5.4.5, v5.5.0, v5.5.1, v5.5.2, v5.6.0, v5.6.1, v5.6.2, v5.6.3, v5.6.4
View affected-version evidence
{
"ranges": [
{
"events": [
{
"introduced": "5.0.0"
},
{
"fixed": "5.6.5"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"v5.0.0",
"v5.1.0",
"v5.1.1",
"v5.1.2",
"v5.1.3",
"v5.2.0",
"v5.2.1",
"v5.2.2",
"v5.2.3",
"v5.2.4",
"v5.3.0",
"v5.3.1",
"v5.3.2",
"v5.3.3",
"v5.3.4",
"v5.3.5",
"v5.4.0",
"v5.4.1",
"v5.4.2",
"v5.4.3",
"v5.4.4",
"v5.4.5",
"v5.5.0",
"v5.5.1",
"v5.5.2",
"v5.6.0",
"v5.6.1",
"v5.6.2",
"v5.6.3",
"v5.6.4"
]
}