Vulnerability Details CVE-2025-46720
Keystone is a content management system for Node.js. Prior to version 6.5.0, `{field}.isFilterable` access control can be bypassed in `update` and `delete` mutations by adding additional unique filters. These filters can be used as an oracle to probe the existence or value of otherwise unreadable fields. Specifically, when a mutation includes a `where` clause with multiple unique filters (e.g. `id` and `email`), Keystone will attempt to match records even if filtering by the latter fields would normally be rejected by `field.isFilterable` or `list.defaultIsFilterable`. This can allow malicious actors to infer the presence of a particular field value when a filter is successful in returning a result. This affects any project relying on the default or dynamic `isFilterable` behavior (at the list or field level) to prevent external users from using the filtering of fields as a discovery mechanism. While this access control is respected during `findMany` operations, it was not completely enforced during `update` and `delete` mutations when accepting more than one unique `where` values in filters. This has no impact on projects using `isFilterable: false` or `defaultIsFilterable: false` for sensitive fields, or for those who have otherwise omitted filtering by these fields from their GraphQL schema. This issue has been patched in `@keystone-6/core` version 6.5.0. To mitigate this issue in older versions where patching is not a viable pathway, set `isFilterable: false` statically for relevant fields to prevent filtering by them earlier in the access control pipeline (that is, don't use functions); set `{field}.graphql.omit.read: true` for relevant fields, which implicitly removes filtering by these fields from the GraphQL schema; and/or deny `update` and `delete` operations for the relevant lists completely.
Exploit prediction scoring system (EPSS) score
EPSS Score 0.001
EPSS Ranking 15.2%
CVSS Severity
CVSS v3 Score 3.1
Products affected by CVE-2025-46720
-
cpe:2.3:a:keystonejs:keystone:0.0.10
-
cpe:2.3:a:keystonejs:keystone:0.0.11
-
cpe:2.3:a:keystonejs:keystone:0.0.12
-
cpe:2.3:a:keystonejs:keystone:0.0.13
-
cpe:2.3:a:keystonejs:keystone:0.0.14
-
cpe:2.3:a:keystonejs:keystone:0.0.15
-
cpe:2.3:a:keystonejs:keystone:0.0.16
-
cpe:2.3:a:keystonejs:keystone:0.0.17
-
cpe:2.3:a:keystonejs:keystone:0.0.18
-
cpe:2.3:a:keystonejs:keystone:0.0.19
-
cpe:2.3:a:keystonejs:keystone:0.0.20
-
cpe:2.3:a:keystonejs:keystone:0.0.21
-
cpe:2.3:a:keystonejs:keystone:0.0.22
-
cpe:2.3:a:keystonejs:keystone:0.0.23
-
cpe:2.3:a:keystonejs:keystone:0.0.24
-
cpe:2.3:a:keystonejs:keystone:0.0.25
-
cpe:2.3:a:keystonejs:keystone:0.0.26
-
cpe:2.3:a:keystonejs:keystone:0.0.27
-
cpe:2.3:a:keystonejs:keystone:0.0.28
-
cpe:2.3:a:keystonejs:keystone:0.0.29
-
cpe:2.3:a:keystonejs:keystone:0.0.30
-
cpe:2.3:a:keystonejs:keystone:0.0.31
-
cpe:2.3:a:keystonejs:keystone:0.0.32
-
cpe:2.3:a:keystonejs:keystone:0.0.33
-
cpe:2.3:a:keystonejs:keystone:0.0.34
-
cpe:2.3:a:keystonejs:keystone:0.0.35
-
cpe:2.3:a:keystonejs:keystone:0.0.36
-
cpe:2.3:a:keystonejs:keystone:0.0.37
-
cpe:2.3:a:keystonejs:keystone:0.0.38
-
cpe:2.3:a:keystonejs:keystone:0.0.39
-
cpe:2.3:a:keystonejs:keystone:0.0.40
-
cpe:2.3:a:keystonejs:keystone:0.0.41
-
cpe:2.3:a:keystonejs:keystone:0.0.42
-
cpe:2.3:a:keystonejs:keystone:0.0.43
-
cpe:2.3:a:keystonejs:keystone:0.0.9
-
cpe:2.3:a:keystonejs:keystone:0.1.0
-
cpe:2.3:a:keystonejs:keystone:0.1.1
-
cpe:2.3:a:keystonejs:keystone:0.1.10
-
cpe:2.3:a:keystonejs:keystone:0.1.11
-
cpe:2.3:a:keystonejs:keystone:0.1.12
-
cpe:2.3:a:keystonejs:keystone:0.1.13
-
cpe:2.3:a:keystonejs:keystone:0.1.14
-
cpe:2.3:a:keystonejs:keystone:0.1.15
-
cpe:2.3:a:keystonejs:keystone:0.1.16
-
cpe:2.3:a:keystonejs:keystone:0.1.17
-
cpe:2.3:a:keystonejs:keystone:0.1.18
-
cpe:2.3:a:keystonejs:keystone:0.1.19
-
cpe:2.3:a:keystonejs:keystone:0.1.2
-
cpe:2.3:a:keystonejs:keystone:0.1.20
-
cpe:2.3:a:keystonejs:keystone:0.1.21
-
cpe:2.3:a:keystonejs:keystone:0.1.22
-
cpe:2.3:a:keystonejs:keystone:0.1.23
-
cpe:2.3:a:keystonejs:keystone:0.1.24
-
cpe:2.3:a:keystonejs:keystone:0.1.25
-
cpe:2.3:a:keystonejs:keystone:0.1.26
-
cpe:2.3:a:keystonejs:keystone:0.1.27
-
cpe:2.3:a:keystonejs:keystone:0.1.28
-
cpe:2.3:a:keystonejs:keystone:0.1.29
-
cpe:2.3:a:keystonejs:keystone:0.1.3
-
cpe:2.3:a:keystonejs:keystone:0.1.30
-
cpe:2.3:a:keystonejs:keystone:0.1.31
-
cpe:2.3:a:keystonejs:keystone:0.1.32
-
cpe:2.3:a:keystonejs:keystone:0.1.33
-
cpe:2.3:a:keystonejs:keystone:0.1.34
-
cpe:2.3:a:keystonejs:keystone:0.1.35
-
cpe:2.3:a:keystonejs:keystone:0.1.36
-
cpe:2.3:a:keystonejs:keystone:0.1.37
-
cpe:2.3:a:keystonejs:keystone:0.1.38
-
cpe:2.3:a:keystonejs:keystone:0.1.39
-
cpe:2.3:a:keystonejs:keystone:0.1.4
-
cpe:2.3:a:keystonejs:keystone:0.1.40
-
cpe:2.3:a:keystonejs:keystone:0.1.41
-
cpe:2.3:a:keystonejs:keystone:0.1.42
-
cpe:2.3:a:keystonejs:keystone:0.1.43
-
cpe:2.3:a:keystonejs:keystone:0.1.44
-
cpe:2.3:a:keystonejs:keystone:0.1.45
-
cpe:2.3:a:keystonejs:keystone:0.1.46
-
cpe:2.3:a:keystonejs:keystone:0.1.47
-
cpe:2.3:a:keystonejs:keystone:0.1.48
-
cpe:2.3:a:keystonejs:keystone:0.1.49
-
cpe:2.3:a:keystonejs:keystone:0.1.5
-
cpe:2.3:a:keystonejs:keystone:0.1.50
-
cpe:2.3:a:keystonejs:keystone:0.1.51
-
cpe:2.3:a:keystonejs:keystone:0.1.52
-
cpe:2.3:a:keystonejs:keystone:0.1.53
-
cpe:2.3:a:keystonejs:keystone:0.1.54
-
cpe:2.3:a:keystonejs:keystone:0.1.55
-
cpe:2.3:a:keystonejs:keystone:0.1.6
-
cpe:2.3:a:keystonejs:keystone:0.1.7
-
cpe:2.3:a:keystonejs:keystone:0.1.8
-
cpe:2.3:a:keystonejs:keystone:0.1.9
-
cpe:2.3:a:keystonejs:keystone:0.2.0
-
cpe:2.3:a:keystonejs:keystone:0.2.1
-
cpe:2.3:a:keystonejs:keystone:0.2.10
-
cpe:2.3:a:keystonejs:keystone:0.2.11
-
cpe:2.3:a:keystonejs:keystone:0.2.12
-
cpe:2.3:a:keystonejs:keystone:0.2.13
-
cpe:2.3:a:keystonejs:keystone:0.2.14
-
cpe:2.3:a:keystonejs:keystone:0.2.15
-
cpe:2.3:a:keystonejs:keystone:0.2.16
-
cpe:2.3:a:keystonejs:keystone:0.2.17
-
cpe:2.3:a:keystonejs:keystone:0.2.18
-
cpe:2.3:a:keystonejs:keystone:0.2.19
-
cpe:2.3:a:keystonejs:keystone:0.2.2
-
cpe:2.3:a:keystonejs:keystone:0.2.20
-
cpe:2.3:a:keystonejs:keystone:0.2.21
-
cpe:2.3:a:keystonejs:keystone:0.2.22
-
cpe:2.3:a:keystonejs:keystone:0.2.23
-
cpe:2.3:a:keystonejs:keystone:0.2.24
-
cpe:2.3:a:keystonejs:keystone:0.2.25
-
cpe:2.3:a:keystonejs:keystone:0.2.26
-
cpe:2.3:a:keystonejs:keystone:0.2.27
-
cpe:2.3:a:keystonejs:keystone:0.2.28
-
cpe:2.3:a:keystonejs:keystone:0.2.29
-
cpe:2.3:a:keystonejs:keystone:0.2.3
-
cpe:2.3:a:keystonejs:keystone:0.2.30
-
cpe:2.3:a:keystonejs:keystone:0.2.31
-
cpe:2.3:a:keystonejs:keystone:0.2.32
-
cpe:2.3:a:keystonejs:keystone:0.2.33
-
cpe:2.3:a:keystonejs:keystone:0.2.34
-
cpe:2.3:a:keystonejs:keystone:0.2.35
-
cpe:2.3:a:keystonejs:keystone:0.2.36
-
cpe:2.3:a:keystonejs:keystone:0.2.37
-
cpe:2.3:a:keystonejs:keystone:0.2.38
-
cpe:2.3:a:keystonejs:keystone:0.2.39
-
cpe:2.3:a:keystonejs:keystone:0.2.4
-
cpe:2.3:a:keystonejs:keystone:0.2.40
-
cpe:2.3:a:keystonejs:keystone:0.2.41
-
cpe:2.3:a:keystonejs:keystone:0.2.42
-
cpe:2.3:a:keystonejs:keystone:0.2.5
-
cpe:2.3:a:keystonejs:keystone:0.2.6
-
cpe:2.3:a:keystonejs:keystone:0.2.7
-
cpe:2.3:a:keystonejs:keystone:0.2.8
-
cpe:2.3:a:keystonejs:keystone:0.2.9
-
cpe:2.3:a:keystonejs:keystone:0.3.0
-
cpe:2.3:a:keystonejs:keystone:0.3.1
-
cpe:2.3:a:keystonejs:keystone:0.3.10
-
cpe:2.3:a:keystonejs:keystone:0.3.11
-
cpe:2.3:a:keystonejs:keystone:0.3.12
-
cpe:2.3:a:keystonejs:keystone:0.3.13
-
cpe:2.3:a:keystonejs:keystone:0.3.14
-
cpe:2.3:a:keystonejs:keystone:0.3.15
-
cpe:2.3:a:keystonejs:keystone:0.3.16
-
cpe:2.3:a:keystonejs:keystone:0.3.17
-
cpe:2.3:a:keystonejs:keystone:0.3.18
-
cpe:2.3:a:keystonejs:keystone:0.3.19
-
cpe:2.3:a:keystonejs:keystone:0.3.2
-
cpe:2.3:a:keystonejs:keystone:0.3.20
-
cpe:2.3:a:keystonejs:keystone:0.3.21
-
cpe:2.3:a:keystonejs:keystone:0.3.22
-
cpe:2.3:a:keystonejs:keystone:0.3.3
-
cpe:2.3:a:keystonejs:keystone:0.3.4
-
cpe:2.3:a:keystonejs:keystone:0.3.5
-
cpe:2.3:a:keystonejs:keystone:0.3.6
-
cpe:2.3:a:keystonejs:keystone:0.3.7
-
cpe:2.3:a:keystonejs:keystone:0.3.8
-
cpe:2.3:a:keystonejs:keystone:0.3.9
-
cpe:2.3:a:keystonejs:keystone:2.2.0
-
cpe:2.3:a:keystonejs:keystone:2.3.0
-
cpe:2.3:a:keystonejs:keystone:2.3.1
-
cpe:2.3:a:keystonejs:keystone:3.0.0
-
cpe:2.3:a:keystonejs:keystone:3.0.1
-
cpe:2.3:a:keystonejs:keystone:4.0.0
-
cpe:2.3:a:keystonejs:keystone:4.1.0
-
cpe:2.3:a:keystonejs:keystone:4.1.1
-
cpe:2.3:a:keystonejs:keystone:4.2.0
-
cpe:2.3:a:keystonejs:keystone:4.2.1
-
cpe:2.3:a:keystonejs:keystone:5.0.0
-
cpe:2.3:a:keystonejs:keystone:5.1.0
-
cpe:2.3:a:keystonejs:keystone:5.1.1
-
cpe:2.3:a:keystonejs:keystone:5.2.0
-
cpe:2.3:a:keystonejs:keystone:5.2.1
-
cpe:2.3:a:keystonejs:keystone:5.3.0
-
cpe:2.3:a:keystonejs:keystone:5.4.0
-
cpe:2.3:a:keystonejs:keystone:5.4.1
-
cpe:2.3:a:keystonejs:keystone:5.4.2
-
cpe:2.3:a:keystonejs:keystone:5.4.3
-
cpe:2.3:a:keystonejs:keystone:5.4.4
-
cpe:2.3:a:keystonejs:keystone:5.5.0
-
cpe:2.3:a:keystonejs:keystone:5.6.0
-
cpe:2.3:a:keystonejs:keystone:6.0.0
-
cpe:2.3:a:keystonejs:keystone:6.0.1
-
cpe:2.3:a:keystonejs:keystone:6.0.2