Controller Manager pod has --root-ca-file argument set
Kubernetes Controller Manager uses --root-ca-file to reference a certificate bundle so pods get a ca.crt for validating the API server's TLS certificate.
Risk
Without a configured root CA, pods cannot reliably verify the API server, enabling on-path spoofing. This exposes API traffic and service account tokens, allowing session hijack, data exfiltration, and malicious config changes-compromising confidentiality and integrity, and potentially disrupting availability.
Run this check with Prowler
Run in Prowler Cloudprowler kubernetes --checks controllermanager_root_ca_file_setRecommendation
Set a trusted CA bundle via --root-ca-file on the controller manager to ensure verified TLS for in-cluster API calls. Use a cluster-controlled CA, rotate and monitor certificates, and keep the bundle aligned with the API server chain. Apply defense in depth and least privilege for service accounts.
Remediation
Other
Check Code
from prowler.lib.check.models import Check, Check_Report_Kubernetes
from prowler.providers.kubernetes.services.controllermanager.controllermanager_client import (
controllermanager_client,
)
class controllermanager_root_ca_file_set(Check):
def execute(self) -> Check_Report_Kubernetes:
findings = []
for pod in controllermanager_client.controllermanager_pods:
report = Check_Report_Kubernetes(metadata=self.metadata(), resource=pod)
report.status = "PASS"
report.status_extended = f"Controller Manager does not have the root CA file set in pod {pod.name}."
for container in pod.containers.values():
if "--root-ca-file=" not in str(container.command):
report.status = "FAIL"
report.status_extended = f"Controller Manager has the root CA file set in pod {pod.name}."
break
findings.append(report)
return findings