Node kubelet.conf file ownership is set to root:root
Kubernetes Node kubeconfig at /etc/kubernetes/kubelet.conf is evaluated for file ownership root:root. The check focuses on who owns the file that defines the kubelet's API client settings and certificates.
Risk
Non-root ownership lets local users alter kubelet API credentials and endpoints, enabling node impersonation, unauthorized control of Pods, and data exfiltration via the kubelet. This threatens integrity (config tampering), confidentiality (secrets access), and availability (pod eviction or node disruption).
Run this check with Prowler
Run in Prowler Cloudprowler kubernetes --checks kubelet_conf_file_ownershipRecommendation
Set /etc/kubernetes/kubelet.conf ownership to root:root and use restrictive perms (e.g., 600). Apply least privilege on node access, protect kubelet dirs, and enable file integrity monitoring. Use defense in depth: configuration management to enforce state and periodic audits to detect drift.
Remediation
CLI
chown root:root /etc/kubernetes/kubelet.confOther
Check Code
from prowler.lib.check.models import Check, Check_Report_Kubernetes
from prowler.lib.utils.utils import is_owned_by_root
from prowler.providers.kubernetes.services.core.core_client import core_client
class kubelet_conf_file_ownership(Check):
def execute(self) -> Check_Report_Kubernetes:
findings = []
for node in core_client.nodes.values():
report = Check_Report_Kubernetes(metadata=self.metadata(), resource=node)
# It can only be checked if Prowler is being executed inside a worker node or if the file is the default one
if node.inside:
if is_owned_by_root("/etc/kubernetes/kubelet.conf") is None:
report.status = "MANUAL"
report.status_extended = f"kubelet.conf file not found in Node {node.name}, please verify kubelet.conf file ownership manually."
else:
report.status = "PASS"
report.status_extended = f"kubelet.conf file ownership is set to root:root in Node {node.name}."
if not is_owned_by_root("/etc/kubernetes/kubelet.conf"):
report.status = "FAIL"
report.status_extended = f"kubelet.conf file ownership is not set to root:root in Node {node.name}."
else:
report.status = "MANUAL"
report.status_extended = f"Prowler is not being executed inside Node {node.name}, please verify kubelet.conf file ownership manually."
findings.append(report)
return findings