SelfSubjectRulesReviews
| Operation | Description | Sample | Rule |
|---|---|---|---|
| create-selfsubjectrulesreviews | SelfSubjectRulesReview created (lists all permissions the requesting user has; reconnaissance). | Y | Y |
create selfsubjectrulesreviews
#Description
SelfSubjectRulesReview created (lists all permissions the requesting user has; reconnaissance).
Example Audit Event #
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "RequestResponse",
"auditID": "00000000-0000-0000-0000-000000000000",
"stage": "ResponseComplete",
"requestURI": "/apis/authorization.k8s.io/v1/selfsubjectrulesreviews",
"verb": "create",
"user": {
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=9bb0383c49b319fbf6b5ed61ab944378956d4292c784d32244ce2fa4dd846a3c"
]
}
},
"sourceIPs": [
"203.0.113.10"
],
"userAgent": "kubectl/v1.36.2 (linux/amd64) kubernetes/24e2b02",
"objectRef": {
"resource": "selfsubjectrulesreviews",
"apiGroup": "authorization.k8s.io",
"apiVersion": "v1"
},
"responseStatus": {
"metadata": {},
"code": 201
},
"requestObject": {
"kind": "SelfSubjectRulesReview",
"apiVersion": "authorization.k8s.io/v1",
"metadata": {},
"spec": {
"namespace": "dw-harn"
},
"status": {
"resourceRules": null,
"nonResourceRules": null,
"incomplete": false
}
},
"responseObject": {
"kind": "SelfSubjectRulesReview",
"apiVersion": "authorization.k8s.io/v1",
"metadata": {},
"spec": {},
"status": {
"resourceRules": [
{
"verbs": [
"create"
],
"apiGroups": [
"authorization.k8s.io"
],
"resources": [
"selfsubjectaccessreviews",
"selfsubjectrulesreviews"
]
},
{
"verbs": [
"create"
],
"apiGroups": [
"authentication.k8s.io"
],
"resources": [
"selfsubjectreviews"
]
},
{
"verbs": [
"*"
],
"apiGroups": [
"*"
],
"resources": [
"*"
]
}
],
"nonResourceRules": [
{
"verbs": [
"get"
],
"nonResourceURLs": [
"/api",
"/api/*",
"/apis",
"/apis/*",
"/healthz",
"/livez",
"/openapi",
"/openapi/*",
"/readyz",
"/version",
"/version/"
]
},
{
"verbs": [
"*"
],
"nonResourceURLs": [
"*"
]
},
{
"verbs": [
"get"
],
"nonResourceURLs": [
"/healthz",
"/livez",
"/readyz",
"/version",
"/version/"
]
}
],
"incomplete": false
}
},
"requestReceivedTimestamp": "2026-07-02T04:48:59.579967Z",
"stageTimestamp": "2026-07-02T04:48:59.581125Z",
"annotations": {
"authorization.k8s.io/decision": "allow",
"authorization.k8s.io/reason": "RBAC: allowed by ClusterRoleBinding \"system:basic-user\" of ClusterRole \"system:basic-user\" to Group \"system:authenticated\""
}
}
Common Indicators #
Field/value combinations most frequently checked by detection rules targeting this event, derived from cross-vendor predicate analysis.
| Field | Kind | Value | Rules | Vendors |
|---|---|---|---|---|
kubernetes.audit.objectRef.resource (elastic rule field) | in | selfsubjectaccessreviews | 2 rules | elastic |
kubernetes.audit.objectRef.resource (elastic rule field) | in | selfsubjectrulesreviews | 2 rules | elastic |
azure.platformlogs.properties.log.verb (elastic rule field) | eq | create | 1 rule | elastic |
kubernetes.audit.impersonatedUser.username (elastic rule field) | starts_with | system:node: | 1 rule | elastic |
kubernetes.audit.user.username (elastic rule field) | starts_with | system:serviceaccount: | 1 rule | elastic |
kubernetes.audit.verb (elastic rule field) | eq | create | 1 rule | elastic |
Detection Rules #
Full rule details for this event, including ATT&CK technique mappings and native queries → Disclaimer: This investigation guide was created using generative AI technology and has been reviewed to improve its accuracy and relevance. While every effort has been made to ensure its quality, we recommend validating the content and adapting it to suit your specific environment and operational needs. This rule detects interactive commands executed inside containers that use atypical utilities to hit the Kubernetes API, paired with near-simultaneous API activity on pods, secrets, service accounts, roles/bindings, or pod exec/attach/log/portforward. It surfaces hands-on-keyboard discovery and lateral movement using custom scripts that evade common tool allowlists; for example, an intruder opens a shell in a pod, uses Python to query the in-cluster API to list secrets, then triggers pods/exec to pivot into another workload. AKS kube-audit events are carried under the flattened Review the calling service account or node identity and subsequent API activity. The GCP Fleet integration with GKE audit logs enabled is required to be compatible with this rule.Sigma #
T1069, T1069.003, T1087, T1087.004Elastic #
T1059, T1059.004, T1069, T1087, T1609, T1610Investigation guide
Triage and analysis#
Investigating Direct Interactive Kubernetes API Request by Unusual Utilities#
Possible investigation steps#
False positive analysis#
Response and remediation#
T1069, T1069.003, T1613Investigation guide
Triage and analysis#
Investigating Azure AKS Suspicious Self-Subject Review by Service Account or Node Identity#
azure.platformlogs.properties.log.* subtree and share the ARM operation event.action: Microsoft.ContainerService/managedClusters/diagnosticLogs/Read. A selfsubjectaccessreviews or selfsubjectrulesreviews create lets the caller enumerate its own effective permissions. Service account and node identities issuing these reviews outside of known controllers can indicate a stolen token mapping out what it can reach.Possible investigation steps#
azure.platformlogs.properties.log.user.username and its groups in azure.platformlogs.properties.log.user.groups, and whether that service account or node routinely performs self-subject reviews. Check azure.platformlogs.properties.log.impersonatedUser.username: when populated, the review was issued via impersonation (e.g. kubectl auth can-i --as=<service account>) and the real actor is the impersonating user, not the service account in user.username.azure.platformlogs.properties.log.objectRef.resource (selfsubjectaccessreviews or selfsubjectrulesreviews) and the azure.platformlogs.properties.log.requestObject to see what access was checked, plus the API path in azure.platformlogs.properties.log.requestURI. Inspect azure.platformlogs.properties.log.userAgent to distinguish interactive tooling (kubectl) from custom recon tooling or in-cluster SDKs.azure.platformlogs.properties.log.sourceIPs. Control-plane and in-cluster agents use loopback (127.0.0.1/::1) or pod-network addresses (e.g. 10.244.0.0/16); an external caller wielding a service account token is more suspicious. Pivot on the source for related API activity, denied requests, exec sessions, or RBAC changes from the same identity.False positive analysis#
system:serviceaccount:azure-arc:*) legitimately submit these reviews and are already excluded; add other validated platform controllers as they are baselined.azure.platformlogs.properties.log.impersonatedUser.username.Response and remediation#
T1069, T1069.003, T1613Investigation guide
Triage and analysis#
Investigating GKE Suspicious Self-Subject Review via Service Account#
Investigation steps#
user.email and event.action (selfsubjectaccessreviews or selfsubjectrulesreviews).False positives#
Setup#