Summary
The AWS Deployment Framework (ADF) is an extensive and flexible framework to manage and deploy resources across multiple AWS accounts and regions within an AWS Organization.
ADF allows for staged, parallel, multi-account, cross-region deployments of applications or resources via the structure defined in AWS Organizations while taking advantage of services such as AWS CodePipeline, AWS CodeBuild, and AWS CodeCommit to alleviate the heavy lifting and management compared to a traditional CI/CD setup.
ADF contains a bootstrap process that is responsible to deploy ADF's bootstrap stacks to facilitate multi-account cross-region deployments. The ADF bootstrap process relies on elevated privileges to perform this task. Two versions of the bootstrap process exist; a code-change driven pipeline using AWS CodeBuild and an event-driven state machine using AWS Lambda. If an actor has permissions to change the behavior of the CodeBuild project or the Lambda function, they would be able to escalate their privileges.
Impact
The bootstrap CodeBuild role provides access to the sts:AssumeRole operation without further restrictions. Therefore, it is able to assume into any AWS Account in the AWS Organization with the elevated privileges provided by the cross-account access role. By default, this role is not restricted when it is created by AWS Organizations, providing Administrator level access to the AWS resources in the AWS Account.
Impacted versions: <4.0.0
Patches
The patches [1] are included in aws-deployment-framework==4.0.0
[2].
Workarounds
As a temporary mitigation, add a permissions boundary [3] to the roles created by ADF in the management account. The permissions boundary should deny all IAM and STS actions. This permissions boundary should be in place until you upgrade ADF or bootstrap a new account. While the permissions boundary is in place, the account management and bootstrapping of accounts are unable to create, update, or assume into roles. This mitigates the privilege escalation risk, but also disables ADF's ability to create, manage, and bootstrap accounts.
References
[1] Pull request: #732
[2] AWS Deployment Framework v4.0 release notes: https://github.com/awslabs/aws-deployment-framework/releases/tag/v4.0.0
[3] AWS IAM Documentation on Permissions Boundaries for IAM Entities: https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html
Summary
The AWS Deployment Framework (ADF) is an extensive and flexible framework to manage and deploy resources across multiple AWS accounts and regions within an AWS Organization.
ADF allows for staged, parallel, multi-account, cross-region deployments of applications or resources via the structure defined in AWS Organizations while taking advantage of services such as AWS CodePipeline, AWS CodeBuild, and AWS CodeCommit to alleviate the heavy lifting and management compared to a traditional CI/CD setup.
ADF contains a bootstrap process that is responsible to deploy ADF's bootstrap stacks to facilitate multi-account cross-region deployments. The ADF bootstrap process relies on elevated privileges to perform this task. Two versions of the bootstrap process exist; a code-change driven pipeline using AWS CodeBuild and an event-driven state machine using AWS Lambda. If an actor has permissions to change the behavior of the CodeBuild project or the Lambda function, they would be able to escalate their privileges.
Impact
The bootstrap CodeBuild role provides access to the sts:AssumeRole operation without further restrictions. Therefore, it is able to assume into any AWS Account in the AWS Organization with the elevated privileges provided by the cross-account access role. By default, this role is not restricted when it is created by AWS Organizations, providing Administrator level access to the AWS resources in the AWS Account.
Impacted versions: <4.0.0
Patches
The patches [1] are included in
aws-deployment-framework==4.0.0
[2].Workarounds
As a temporary mitigation, add a permissions boundary [3] to the roles created by ADF in the management account. The permissions boundary should deny all IAM and STS actions. This permissions boundary should be in place until you upgrade ADF or bootstrap a new account. While the permissions boundary is in place, the account management and bootstrapping of accounts are unable to create, update, or assume into roles. This mitigates the privilege escalation risk, but also disables ADF's ability to create, manage, and bootstrap accounts.
References
[1] Pull request: #732
[2] AWS Deployment Framework v4.0 release notes: https://github.com/awslabs/aws-deployment-framework/releases/tag/v4.0.0
[3] AWS IAM Documentation on Permissions Boundaries for IAM Entities: https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html