-
Notifications
You must be signed in to change notification settings - Fork 29
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'master' into rule/add-RSPEC-S6867
- Loading branch information
Showing
5 changed files
with
148 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
{ | ||
"title": "Service account tokens should not be mounted in pods", | ||
"type": "VULNERABILITY", | ||
"status": "ready", | ||
"remediation": { | ||
"func": "Constant\/Issue", | ||
"constantCost": "5min" | ||
}, | ||
"tags": [ | ||
], | ||
"defaultSeverity": "Major", | ||
"ruleSpecification": "RSPEC-6865", | ||
"sqKey": "S6865", | ||
"scope": "All", | ||
"defaultQualityProfiles": ["Sonar way"], | ||
"quickfix": "unknown", | ||
"code": { | ||
"impacts": { | ||
"MAINTAINABILITY": "MEDIUM", | ||
"SECURITY": "MEDIUM" | ||
}, | ||
"attribute": "COMPLETE" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
== Why is this an issue? | ||
|
||
Service account tokens are Kubernetes secrets created automatically to authenticate applications running inside pods to the API server. If a pod is compromised, an attacker could use this token to gain access to other resources in the cluster. | ||
|
||
For example, they could create new pods, modify existing ones, or even delete critical system pods, depending on the permissions associated with the service account. | ||
|
||
Therefore, it's recommended to disable the automounting of service account tokens when it's not necessary for the application running in the pod. | ||
|
||
=== What is the potential impact? | ||
|
||
==== Unauthorized Access | ||
If a pod with a mounted service account gets compromised, an attacker could potentially use the token to interact with the Kubernetes API, possibly leading to unauthorized access to other resources in the cluster. | ||
|
||
==== Privilege Escalation | ||
Service account tokens are often bound with roles that have extensive permissions. If these tokens are exposed, it could lead to privilege escalation where an attacker gains higher-level permissions than intended. | ||
|
||
==== Data Breach | ||
Service account tokens can be used to access sensitive data stored in the Kubernetes cluster. If these tokens are compromised, it could lead to a data breach. | ||
|
||
==== Denial of Service | ||
An attacker with access to a service account token could potentially overload the Kubernetes API server by sending a large number of requests, leading to a Denial of Service (DoS) attack. | ||
|
||
|
||
== How to fix it | ||
//== How to fix it in FRAMEWORK NAME | ||
|
||
=== Code examples | ||
|
||
==== Noncompliant code example | ||
|
||
[source,yaml,diff-id=1,diff-type=noncompliant] | ||
---- | ||
apiVersion: v1 | ||
kind: Pod | ||
metadata: | ||
name: example-pod | ||
spec: | ||
containers: # Noncompliant | ||
- name: example-pod | ||
image: nginx:1.25.3 | ||
---- | ||
|
||
==== Compliant solution | ||
|
||
[source,yaml,diff-id=1,diff-type=compliant] | ||
---- | ||
apiVersion: v1 | ||
kind: Pod | ||
metadata: | ||
name: example-pod | ||
spec: | ||
containers: | ||
- name: example-pod | ||
image: nginx:1.25.3 | ||
automountServiceAccountToken: false | ||
---- | ||
|
||
The same can be achieved by setting `automountServiceAccountToken: false` in the service account's configuration: | ||
|
||
[source,yaml] | ||
---- | ||
apiVersion: v1 | ||
kind: ServiceAccount | ||
metadata: | ||
name: example-service-account | ||
namespace: default | ||
automountServiceAccountToken: false | ||
--- | ||
apiVersion: v1 | ||
kind: Pod | ||
metadata: | ||
name: example-pod | ||
spec: | ||
containers: | ||
- name: example-pod | ||
image: nginx:1.25.3 | ||
serviceAccountName: example-service-account | ||
---- | ||
|
||
=== How does this work? | ||
|
||
The automounting of service account tokens can be disabled by setting `automountServiceAccountToken: false` in the pod's specification or in the service account's configuration. | ||
|
||
|
||
// === Pitfalls | ||
//=== Going the extra mile | ||
|
||
|
||
== Resources | ||
=== Documentation | ||
|
||
* Kubernetes Documentation - https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/[Configure Service Accounts for Pods] | ||
|
||
//=== Articles & blog posts | ||
//=== Conference presentations | ||
//=== Standards | ||
//=== External coding guidelines | ||
//=== Benchmarks | ||
|
||
ifdef::env-github,rspecator-view[] | ||
|
||
''' | ||
== Implementation Specification | ||
(visible only on this page) | ||
|
||
=== Message | ||
|
||
Set automountServiceAccountToken to false for this container. | ||
|
||
|
||
=== Highlighting | ||
|
||
* Highlight the `containers` property. | ||
endif::env-github,rspecator-view[] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
{ | ||
} |