Teleport access control & privilege security checks
Admin roles, standing privileges, permission scopes and policy enforcement — the settings that decide how much damage one compromised account can do.
On Teleport, Black Cat runs 21 checks in this area on every scan. Each one below lists its severity, how to fix it, and the compliance controls it satisfies where a control applies. See what access the Teleport connector needs.
Checks (21)
severity: critical Role Has Wildcard Node Labels fix difficulty: medium #
Replace the wildcard node label selector with specific labels to enforce least-privilege node access
- Export the role with tctl get role/<name> > role.yaml
- Replace the wildcard (*) node label selector in allow.node_labels with specific key-value pairs
- Apply the updated role with tctl create -f role.yaml
- Test that legitimate users can still access the nodes they need
Satisfies: ISO 27001:2022 A.5.15 SOC 2 Type II CC6.1 CIS Controls v8 CIS-06.1 NIST CSF 2.0 PR.AA-05 GDPR (SaaS Security) GDPR-25.2 HIPAA (SaaS Security) HIPAA-312.a NIS2 Directive NIS2-21.i.1 DORA (SaaS Security) DORA-9.2
severity: critical Role Has Wildcard Database Labels fix difficulty: medium #
Replace the wildcard database label selector with specific labels to enforce least-privilege database access
- Export the role with tctl get role/<name> > role.yaml
- Replace the wildcard (*) database label selector in allow.db_labels with specific key-value pairs
- Apply the updated role with tctl create -f role.yaml
- Verify that authorized users can still connect to the databases they need
Satisfies: ISO 27001:2022 A.5.15 SOC 2 Type II CC6.1 CIS Controls v8 CIS-06.1 NIST CSF 2.0 PR.AA-05 GDPR (SaaS Security) GDPR-25.2 HIPAA (SaaS Security) HIPAA-312.a NIS2 Directive NIS2-21.i.1 DORA (SaaS Security) DORA-9.2
severity: critical Role Has Wildcard Kubernetes Labels fix difficulty: medium #
Replace the wildcard Kubernetes label selector with specific labels to enforce least-privilege cluster access
- Export the role with tctl get role/<name> > role.yaml
- Replace the wildcard (*) kube_labels selector in allow.kubernetes_labels with specific labels
- Apply the updated role with tctl create -f role.yaml
- Verify that authorized users can still access the Kubernetes clusters they need
Satisfies: ISO 27001:2022 A.5.15 SOC 2 Type II CC6.1 CIS Controls v8 CIS-06.1 NIST CSF 2.0 PR.AA-05 GDPR (SaaS Security) GDPR-25.2 HIPAA (SaaS Security) HIPAA-312.a NIS2 Directive NIS2-21.i.1 DORA (SaaS Security) DORA-9.2
severity: high Role Has Wildcard App Labels fix difficulty: medium #
Replace the wildcard app label selector with specific labels to limit application access
- Export the role with tctl get role/<name> > role.yaml
- Replace the wildcard (*) app_labels selector in allow.app_labels with specific labels
- Apply the updated role with tctl create -f role.yaml
- Verify that authorized users can still access the applications they need
Satisfies: ISO 27001:2022 A.5.15 SOC 2 Type II CC6.1 CIS Controls v8 CIS-06.1 NIST CSF 2.0 PR.AA-05 GDPR (SaaS Security) GDPR-25.2 HIPAA (SaaS Security) HIPAA-312.a NIS2 Directive NIS2-21.i.1 DORA (SaaS Security) DORA-9.2
severity: high Role Enables SSH Agent Forwarding fix difficulty: easy #
Disable SSH agent forwarding in the role to prevent lateral movement via agent hijacking
- Export the role with tctl get role/<name> > role.yaml
- Set forward_agent to false in the role options
- Apply the updated role with tctl create -f role.yaml
- Confirm that users requiring agent forwarding have a documented exception process
Satisfies: ISO 27001:2022 A.5.15 SOC 2 Type II CC6.1 CIS Controls v8 CIS-06.1 NIST CSF 2.0 PR.AA-05 GDPR (SaaS Security) GDPR-25.2 HIPAA (SaaS Security) HIPAA-312.a NIS2 Directive NIS2-21.i.1 DORA (SaaS Security) DORA-9.2
severity: high Role Has Unlimited Session TTL fix difficulty: easy #
Set a reasonable maximum session TTL in the role to limit the duration of access certificates
- Export the role with tctl get role/<name> > role.yaml
- Set max_session_ttl to an appropriate value such as 8h or 24h in the role options
- Apply the updated role with tctl create -f role.yaml
- Verify that new sessions respect the updated TTL
Satisfies: ISO 27001:2022 A.5.15 SOC 2 Type II CC6.1 CIS Controls v8 CIS-06.1 NIST CSF 2.0 PR.AA-05 GDPR (SaaS Security) GDPR-25.2 HIPAA (SaaS Security) HIPAA-312.a NIS2 Directive NIS2-21.i.1 DORA (SaaS Security) DORA-9.2
severity: high Role Allows Impersonation fix difficulty: medium #
Review and restrict impersonation permissions to only those explicitly required
- Export the role with tctl get role/<name> > role.yaml
- Review the allow.impersonate.users and allow.impersonate.roles fields
- Remove or restrict impersonation to only the minimum required users and roles
- Apply the updated role with tctl create -f role.yaml
- Audit who holds this role and confirm the access is justified
Satisfies: ISO 27001:2022 A.5.15 SOC 2 Type II CC6.1 CIS Controls v8 CIS-06.1 NIST CSF 2.0 PR.AA-05 GDPR (SaaS Security) GDPR-25.2 HIPAA (SaaS Security) HIPAA-312.a NIS2 Directive NIS2-21.i.1 DORA (SaaS Security) DORA-9.2
severity: high Role Has Broad Admin RBAC Rules fix difficulty: medium #
Restrict the role RBAC rules to specific resources and verbs instead of wildcard access
- Export the role with tctl get role/<name> > role.yaml
- Replace wildcard resource (*) entries in allow.rules with specific resource names
- Restrict verbs to the minimum required (e.g., read instead of *)
- Apply the updated role with tctl create -f role.yaml
- Test that legitimate admin operations still work as expected
Satisfies: ISO 27001:2022 A.5.15 SOC 2 Type II CC6.1 CIS Controls v8 CIS-06.1 NIST CSF 2.0 PR.AA-05 GDPR (SaaS Security) GDPR-25.2 HIPAA (SaaS Security) HIPAA-312.a NIS2 Directive NIS2-21.i.1 DORA (SaaS Security) DORA-9.2
severity: medium User Account Is Locked fix difficulty: medium #
Investigate why the user account is locked and take appropriate action
- Run tctl get lock to view active locks affecting this user
- Review the lock message to understand the reason for the lock
- If the lock was created in error, delete it with tctl rm lock/<id>
- If the lock is valid (e.g., security incident), ensure the user account is deprovisioned
- Update access policies to prevent future unauthorized access
Satisfies: ISO 27001:2022 A.5.15 SOC 2 Type II CC6.1 CIS Controls v8 CIS-06.1 NIST CSF 2.0 PR.AA-05 GDPR (SaaS Security) GDPR-25.2 HIPAA (SaaS Security) HIPAA-312.a NIS2 Directive NIS2-21.i.1 DORA (SaaS Security) DORA-9.2
severity: medium Local User Has No SSO Identity fix difficulty: medium #
Link the local user account to an SSO identity or migrate them to SSO-only authentication
- Determine if this user should be managed via SSO
- If yes, have the user log in via the SSO connector to automatically link their identity
- If the user no longer needs access, delete the account with tctl rm user/<name>
- If local access is intentional (e.g., break-glass account), document the exception
Satisfies: ISO 27001:2022 A.5.15 SOC 2 Type II CC6.1 CIS Controls v8 CIS-06.1 NIST CSF 2.0 PR.AA-05 GDPR (SaaS Security) GDPR-25.2 HIPAA (SaaS Security) HIPAA-312.a NIS2 Directive NIS2-21.i.1 DORA (SaaS Security) DORA-9.2
severity: medium User Has Excessive Roles fix difficulty: medium #
Reduce the number of roles assigned to the user to enforce least-privilege access
- Run tctl get user/<name> to view the user's current role assignments
- Review each role and determine which are actually required
- Remove unnecessary roles with tctl edit user/<name>
- Consider consolidating permissions into fewer, more targeted roles
Satisfies: ISO 27001:2022 A.5.15 SOC 2 Type II CC6.1 CIS Controls v8 CIS-06.1 NIST CSF 2.0 PR.AA-05 GDPR (SaaS Security) GDPR-25.2 HIPAA (SaaS Security) HIPAA-312.a NIS2 Directive NIS2-21.i.1 DORA (SaaS Security) DORA-9.2
severity: high User Has Admin Role fix difficulty: medium #
Review whether the user requires admin-level access and remove it if not justified
- Run tctl get user/<name> to review the user's role assignments
- Identify roles with admin in the name and review their permissions
- If admin access is not required, replace the admin role with a least-privilege role
- Apply changes with tctl edit user/<name>
- Document the justification if admin access is retained
Satisfies: ISO 27001:2022 A.5.15 SOC 2 Type II CC6.1 CIS Controls v8 CIS-06.1 NIST CSF 2.0 PR.AA-05 GDPR (SaaS Security) GDPR-25.2 HIPAA (SaaS Security) HIPAA-312.a NIS2 Directive NIS2-21.i.1 DORA (SaaS Security) DORA-9.2
severity: high Auth Connector Maps Claims to Admin Role fix difficulty: medium #
Restrict SSO role mappings so they do not grant admin roles automatically
- Export the connector with tctl get saml/<name> or tctl get oidc/<name>
- Review the claims_to_roles or teams_to_roles mappings
- Replace admin role assignments with least-privilege roles appropriate for the SSO group
- Apply the updated connector with tctl create -f connector.yaml
- Test SSO login to verify users receive the correct roles
Satisfies: ISO 27001:2022 A.5.15 SOC 2 Type II CC6.1 CIS Controls v8 CIS-06.1 NIST CSF 2.0 PR.AA-05 GDPR (SaaS Security) GDPR-25.2 HIPAA (SaaS Security) HIPAA-312.a NIS2 Directive NIS2-21.i.1 DORA (SaaS Security) DORA-9.2
severity: medium Auth Connector Has Broad Claim Mapping fix difficulty: medium #
Replace wildcard claim values with specific claim values to restrict role assignments
- Export the connector with tctl get saml/<name> or tctl get oidc/<name>
- Identify claims_to_roles entries with a wildcard value (*)
- Replace the wildcard with the specific claim values that should receive the role
- Apply the updated connector with tctl create -f connector.yaml
- Test SSO login to verify only intended users receive the role
Satisfies: ISO 27001:2022 A.5.15 SOC 2 Type II CC6.1 CIS Controls v8 CIS-06.1 NIST CSF 2.0 PR.AA-05 GDPR (SaaS Security) GDPR-25.2 HIPAA (SaaS Security) HIPAA-312.a NIS2 Directive NIS2-21.i.1 DORA (SaaS Security) DORA-9.2
severity: high Auth Connector Has No Role Mappings fix difficulty: medium #
Configure role mappings in the auth connector so SSO users receive appropriate access
- Export the connector with tctl get saml/<name>, tctl get oidc/<name>, or tctl get github/<name>
- Add claims_to_roles or teams_to_roles mappings appropriate for each SSO group
- Apply the updated connector with tctl create -f connector.yaml
- Test SSO login to verify users receive the expected roles
Satisfies: ISO 27001:2022 A.5.15 SOC 2 Type II CC6.1 CIS Controls v8 CIS-06.1 NIST CSF 2.0 PR.AA-05 GDPR (SaaS Security) GDPR-25.2 HIPAA (SaaS Security) HIPAA-312.a NIS2 Directive NIS2-21.i.1 DORA (SaaS Security) DORA-9.2
severity: medium GitHub Connector Maps All Teams fix difficulty: medium #
Replace the wildcard team mapping with specific GitHub team names to restrict access
- Export the connector with tctl get github/<name>
- Replace the wildcard (*) team entry in teams_to_roles with specific team names
- Apply the updated connector with tctl create -f connector.yaml
- Test GitHub SSO login to verify only members of the specified teams receive access
Satisfies: ISO 27001:2022 A.5.15 SOC 2 Type II CC6.1 CIS Controls v8 CIS-06.1 NIST CSF 2.0 PR.AA-05 GDPR (SaaS Security) GDPR-25.2 HIPAA (SaaS Security) HIPAA-312.a NIS2 Directive NIS2-21.i.1 DORA (SaaS Security) DORA-9.2
severity: critical Token Uses Static Join Method fix difficulty: hard #
Migrate from static token join to a cloud-native join method such as iam or ec2
- Determine the target node's cloud environment (AWS, GCP, Azure)
- Configure the appropriate join method in the token spec (e.g., join_method = iam)
- Add the required IAM policy or metadata to the target node
- Create a new token with tctl create -f token.yaml
- Update the node configuration to use the new token and join method
- Delete the old static token with tctl rm token/<name>
Satisfies: ISO 27001:2022 A.5.15 SOC 2 Type II CC6.1 CIS Controls v8 CIS-06.1 NIST CSF 2.0 PR.AA-05 GDPR (SaaS Security) GDPR-25.2 HIPAA (SaaS Security) HIPAA-312.a NIS2 Directive NIS2-21.i.1 DORA (SaaS Security) DORA-9.2
severity: high Token Has No Expiry fix difficulty: easy #
Set an expiry on the provisioning token to limit its validity window
- Export the token with tctl get token/<name> > token.yaml
- Set an appropriate expires field in the token spec (e.g., 24 hours from now)
- Apply the updated token with tctl create -f token.yaml
- If a permanent token is needed, consider using a cloud-native join method instead
Satisfies: ISO 27001:2022 A.5.15 SOC 2 Type II CC6.1 CIS Controls v8 CIS-06.1 NIST CSF 2.0 PR.AA-05 GDPR (SaaS Security) GDPR-25.2 HIPAA (SaaS Security) HIPAA-312.a NIS2 Directive NIS2-21.i.1 DORA (SaaS Security) DORA-9.2
severity: critical Token Grants Auth System Role fix difficulty: medium #
Remove the Auth role from provisioning tokens that are not specifically needed for auth server joining
- Review whether this token is legitimately used for an auth server join
- If not needed, delete the token with tctl rm token/<name>
- If needed, restrict the token scope and ensure it expires immediately after use
- Rotate all credentials on any nodes that joined using this token
Satisfies: ISO 27001:2022 A.5.15 SOC 2 Type II CC6.1 CIS Controls v8 CIS-06.1 NIST CSF 2.0 PR.AA-05 GDPR (SaaS Security) GDPR-25.2 HIPAA (SaaS Security) HIPAA-312.a NIS2 Directive NIS2-21.i.1 DORA (SaaS Security) DORA-9.2
severity: high Token Grants Admin Role fix difficulty: medium #
Remove admin roles from provisioning tokens to prevent privilege escalation via node joining
- Export the token with tctl get token/<name> > token.yaml
- Remove the admin role from the roles list in the token spec
- Apply the updated token with tctl create -f token.yaml or create a new token
- Review nodes that joined using this token and audit their effective permissions
Satisfies: ISO 27001:2022 A.5.15 SOC 2 Type II CC6.1 CIS Controls v8 CIS-06.1 NIST CSF 2.0 PR.AA-05 GDPR (SaaS Security) GDPR-25.2 HIPAA (SaaS Security) HIPAA-312.a NIS2 Directive NIS2-21.i.1 DORA (SaaS Security) DORA-9.2
severity: high Trusted Cluster Has Broad Role Map fix difficulty: medium #
Replace the wildcard remote role mapping with specific roles to limit access from the trusted cluster
- Export the trusted cluster with tctl get trusted_cluster/<name> > tc.yaml
- Replace the wildcard (*) entry in role_map.remote with specific role names from the remote cluster
- Apply the updated configuration with tctl create -f tc.yaml
- Test that legitimate cross-cluster access still works as expected
Satisfies: ISO 27001:2022 A.5.15 SOC 2 Type II CC6.1 CIS Controls v8 CIS-06.1 NIST CSF 2.0 PR.AA-05 GDPR (SaaS Security) GDPR-25.2 HIPAA (SaaS Security) HIPAA-312.a NIS2 Directive NIS2-21.i.1 DORA (SaaS Security) DORA-9.2