diff --git a/checkov/kubernetes/checks/graph_checks/ReadAllSecrets.yaml b/checkov/kubernetes/checks/graph_checks/ReadAllSecrets.yaml index 9248fa221b..50229af586 100644 --- a/checkov/kubernetes/checks/graph_checks/ReadAllSecrets.yaml +++ b/checkov/kubernetes/checks/graph_checks/ReadAllSecrets.yaml @@ -39,28 +39,11 @@ definition: - Role - or: - cond_type: attribute - attribute: rules.resources - operator: not_intersects - value: - - 'secrets' - - '*' - resource_types: - - ClusterRole - - Role - - cond_type: attribute - attribute: rules.verbs - operator: not_intersects - value: - - 'get' - - 'watch' - - 'list' - - '*' - resource_types: - - ClusterRole - - Role - - cond_type: attribute - attribute: rules.resourceNames - operator: exists + attribute: >- + $.rules[?((@.resources[*] == 'secrets' | @.resources[*] == '*') & + (@.verbs[*] == 'get' | @.verbs[*] == 'watch' | @.verbs[*] == 'list' | + @.verbs[*] == '*') & !@.resourceNames)] + operator: jsonpath_not_exists resource_types: - ClusterRole - Role diff --git a/tests/kubernetes/graph/checks/resources/ReadAllSecrets/Failing/MixedResourceNamesClusterRole.yaml b/tests/kubernetes/graph/checks/resources/ReadAllSecrets/Failing/MixedResourceNamesClusterRole.yaml new file mode 100644 index 0000000000..9fdeebaaea --- /dev/null +++ b/tests/kubernetes/graph/checks/resources/ReadAllSecrets/Failing/MixedResourceNamesClusterRole.yaml @@ -0,0 +1,33 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: mixed-secret-reader +rules: +- apiGroups: + - "" + resources: + - "secrets" + verbs: + - "get" + - "watch" + - "list" +- apiGroups: + - "" + resources: + - "secrets" + resourceNames: + - "pull-secret" + verbs: + - "get" +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: mixed-secrets-global +subjects: +- kind: ServiceAccount + name: sa1 +roleRef: + kind: ClusterRole + name: mixed-secret-reader + apiGroup: rbac.authorization.k8s.io diff --git a/tests/kubernetes/graph/checks/resources/ReadAllSecrets/expected.yaml b/tests/kubernetes/graph/checks/resources/ReadAllSecrets/expected.yaml index 20ae3776ef..852c206f0a 100644 --- a/tests/kubernetes/graph/checks/resources/ReadAllSecrets/expected.yaml +++ b/tests/kubernetes/graph/checks/resources/ReadAllSecrets/expected.yaml @@ -2,4 +2,5 @@ pass: - "ClusterRoleBinding.default.read-pods-global" - "RoleBinding.my-namespace.my-role-binding" fail: - - "ClusterRoleBinding.default.read-secrets-global" \ No newline at end of file + - "ClusterRoleBinding.default.read-secrets-global" + - "ClusterRoleBinding.default.mixed-secrets-global"