Discoverability of user password hash in Statamic CMS
The advisory, in context
Description
It was possible to confirm a single character of a user's password hash (just the hash, not the password) using a specially crafted regular expression filter in the users endpoint of the REST API. Many requests could eventually uncover the entire hash.
The hash would not be in the response, however the presence or absence of a result would confirm if the character was in the right position. It would take a long time since the API has throttling enabled by default.
Additionally, the REST API would need to be enabled, as well as the users endpoint. Both of which are disabled by default.
Resolution
Filtering by password or password hash has been disabled.
Credits
We would like to thank Thibaud Kehler for reporting the issue.
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.
Earlier releases before 3.2.39
Fixed in 3.2.39
181 explicitly affected versions
v3.0.0, v3.0.0-beta.1, v3.0.0-beta.10, v3.0.0-beta.11, v3.0.0-beta.12, v3.0.0-beta.13, v3.0.0-beta.14, v3.0.0-beta.15, v3.0.0-beta.16, v3.0.0-beta.17, v3.0.0-beta.18, v3.0.0-beta.19, v3.0.0-beta.2, v3.0.0-beta.20, v3.0.0-beta.21, v3.0.0-beta.22, v3.0.0-beta.23, v3.0.0-beta.24, v3.0.0-beta.25, v3.0.0-beta.26, v3.0.0-beta.27, v3.0.0-beta.28, v3.0.0-beta.29, v3.0.0-beta.3, v3.0.0-beta.30, v3.0.0-beta.31, v3.0.0-beta.32, v3.0.0-beta.33, v3.0.0-beta.34, v3.0.0-beta.35, v3.0.0-beta.36, v3.0.0-beta.37, v3.0.0-beta.38, v3.0.0-beta.39, v3.0.0-beta.4, v3.0.0-beta.40, v3.0.0-beta.41, v3.0.0-beta.42, v3.0.0-beta.43, v3.0.0-beta.44, v3.0.0-beta.45, v3.0.0-beta.46, v3.0.0-beta.5, v3.0.0-beta.6, v3.0.0-beta.7, v3.0.0-beta.8, v3.0.0-beta.9, v3.0.1, v3.0.10, v3.0.11, v3.0.12, v3.0.13, v3.0.14, v3.0.15, v3.0.16, v3.0.17, v3.0.18, v3.0.19, v3.0.2, v3.0.20, v3.0.21, v3.0.22, v3.0.23, v3.0.24, v3.0.25, v3.0.26, v3.0.27, v3.0.28, v3.0.29, v3.0.3, v3.0.30, v3.0.31, v3.0.32, v3.0.33, v3.0.34, v3.0.35, v3.0.35.1, v3.0.36, v3.0.36.1, v3.0.37, v3.0.38, v3.0.39, v3.0.4, v3.0.40, v3.0.41, v3.0.42, v3.0.43, v3.0.44, v3.0.45, v3.0.46, v3.0.47, v3.0.48, v3.0.49, v3.0.5, v3.0.6, v3.0.7, v3.0.8, v3.0.9, v3.1.0, v3.1.0-alpha.1, v3.1.0-alpha.2, v3.1.0-alpha.3, v3.1.0-alpha.4, v3.1.0-beta.1, v3.1.0-beta.2, v3.1.0-beta.3, v3.1.1, v3.1.10, v3.1.11, v3.1.12, v3.1.13, v3.1.14, v3.1.15, v3.1.16, v3.1.17, v3.1.18, v3.1.19, v3.1.2, v3.1.20, v3.1.21, v3.1.22, v3.1.23, v3.1.24, v3.1.25, v3.1.26, v3.1.27, v3.1.28, v3.1.29, v3.1.3, v3.1.30, v3.1.31, v3.1.32, v3.1.33, v3.1.34, v3.1.35, v3.1.4, v3.1.5, v3.1.6, v3.1.7, v3.1.8, v3.1.9, v3.2.0, v3.2.0-beta.1, v3.2.1, v3.2.10, v3.2.11, v3.2.12, v3.2.13, v3.2.14, v3.2.15, v3.2.16, v3.2.17, v3.2.18, v3.2.19, v3.2.2, v3.2.20, v3.2.21, v3.2.22, v3.2.23, v3.2.24, v3.2.25, v3.2.26, v3.2.27, v3.2.28, v3.2.29, v3.2.3, v3.2.30, v3.2.31, v3.2.32, v3.2.33, v3.2.34, v3.2.35, v3.2.36, v3.2.37, v3.2.38, v3.2.4, v3.2.5, v3.2.6, v3.2.7, v3.2.8, v3.2.9
View affected-version evidence
{
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "3.2.39"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"v3.0.0",
"v3.0.0-beta.1",
"v3.0.0-beta.10",
"v3.0.0-beta.11",
"v3.0.0-beta.12",
"v3.0.0-beta.13",
"v3.0.0-beta.14",
"v3.0.0-beta.15",
"v3.0.0-beta.16",
"v3.0.0-beta.17",
"v3.0.0-beta.18",
"v3.0.0-beta.19",
"v3.0.0-beta.2",
"v3.0.0-beta.20",
"v3.0.0-beta.21",
"v3.0.0-beta.22",
"v3.0.0-beta.23",
"v3.0.0-beta.24",
"v3.0.0-beta.25",
"v3.0.0-beta.26",
"v3.0.0-beta.27",
"v3.0.0-beta.28",
"v3.0.0-beta.29",
"v3.0.0-beta.3",
"v3.0.0-beta.30",
"v3.0.0-beta.31",
"v3.0.0-beta.32",
"v3.0.0-beta.33",
"v3.0.0-beta.34",
"v3.0.0-beta.35",
"v3.0.0-beta.36",
"v3.0.0-beta.37",
"v3.0.0-beta.38",
"v3.0.0-beta.39",
"v3.0.0-beta.4",
"v3.0.0-beta.40",
"v3.0.0-beta.41",
"v3.0.0-beta.42",
"v3.0.0-beta.43",
"v3.0.0-beta.44",
"v3.0.0-beta.45",
"v3.0.0-beta.46",
"v3.0.0-beta.5",
"v3.0.0-beta.6",
"v3.0.0-beta.7",
"v3.0.0-beta.8",
"v3.0.0-beta.9",
"v3.0.1",
"v3.0.10",
"v3.0.11",
"v3.0.12",
"v3.0.13",
"v3.0.14",
"v3.0.15",
"v3.0.16",
"v3.0.17",
"v3.0.18",
"v3.0.19",
"v3.0.2",
"v3.0.20",
"v3.0.21",
"v3.0.22",
"v3.0.23",
"v3.0.24",
"v3.0.25",
"v3.0.26",
"v3.0.27",
"v3.0.28",
"v3.0.29",
"v3.0.3",
"v3.0.30",
"v3.0.31",
"v3.0.32",
"v3.0.33",
"v3.0.34",
"v3.0.35",
"v3.0.35.1",
"v3.0.36",
"v3.0.36.1",
"v3.0.37",
"v3.0.38",
"v3.0.39",
"v3.0.4",
"v3.0.40",
"v3.0.41",
"v3.0.42",
"v3.0.43",
"v3.0.44",
"v3.0.45",
"v3.0.46",
"v3.0.47",
"v3.0.48",
"v3.0.49",
"v3.0.5",
"v3.0.6",
"v3.0.7",
"v3.0.8",
"v3.0.9",
"v3.1.0",
"v3.1.0-alpha.1",
"v3.1.0-alpha.2",
"v3.1.0-alpha.3",
"v3.1.0-alpha.4",
"v3.1.0-beta.1",
"v3.1.0-beta.2",
"v3.1.0-beta.3",
"v3.1.1",
"v3.1.10",
"v3.1.11",
"v3.1.12",
"v3.1.13",
"v3.1.14",
"v3.1.15",
"v3.1.16",
"v3.1.17",
"v3.1.18",
"v3.1.19",
"v3.1.2",
"v3.1.20",
"v3.1.21",
"v3.1.22",
"v3.1.23",
"v3.1.24",
"v3.1.25",
"v3.1.26",
"v3.1.27",
"v3.1.28",
"v3.1.29",
"v3.1.3",
"v3.1.30",
"v3.1.31",
"v3.1.32",
"v3.1.33",
"v3.1.34",
"v3.1.35",
"v3.1.4",
"v3.1.5",
"v3.1.6",
"v3.1.7",
"v3.1.8",
"v3.1.9",
"v3.2.0",
"v3.2.0-beta.1",
"v3.2.1",
"v3.2.10",
"v3.2.11",
"v3.2.12",
"v3.2.13",
"v3.2.14",
"v3.2.15",
"v3.2.16",
"v3.2.17",
"v3.2.18",
"v3.2.19",
"v3.2.2",
"v3.2.20",
"v3.2.21",
"v3.2.22",
"v3.2.23",
"v3.2.24",
"v3.2.25",
"v3.2.26",
"v3.2.27",
"v3.2.28",
"v3.2.29",
"v3.2.3",
"v3.2.30",
"v3.2.31",
"v3.2.32",
"v3.2.33",
"v3.2.34",
"v3.2.35",
"v3.2.36",
"v3.2.37",
"v3.2.38",
"v3.2.4",
"v3.2.5",
"v3.2.6",
"v3.2.7",
"v3.2.8",
"v3.2.9"
]
}From 3.3.0 before 3.3.2
Fixed in 3.3.2
2 explicitly affected versions
v3.3.0, v3.3.1
View affected-version evidence
{
"ranges": [
{
"events": [
{
"introduced": "3.3.0"
},
{
"fixed": "3.3.2"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"v3.3.0",
"v3.3.1"
]
}