Open menu
-->

AWS S3 Bucket Public 'WRITE_ACP' Access

Cloud Conformity allows you to automate the auditing process of this resolution page. Register for a 14 day evaluation and check your compliance level for free!

Start a Free Trial Product features
Security

Risk level: Very High (act immediately)

Ensure that your AWS S3 buckets do not allow anonymous users to modify their access control permissions to protect your S3 data from unauthorized access. An S3 bucket that allows public WRITE_ACP (EDIT PERMISSIONS) access can give any malicious user on the Internet the capability to READ and WRITE ACL permissions, overly permissive actions that can lead to data loss or economic denial-of-service attacks (i.e. uploading a large number of files to drive up the costs of the S3 service within your AWS account).

This rule resolution is part of the Cloud Conformity Security Package

Granting public "WRITE_ACP" access to your AWS S3 buckets can allow anonymous users to edit their ACL permissions and eventually be able to view, upload, modify and delete S3 objects within the bucket without restrictions. Cloud Conformity strongly recommends against setting WRITE_ACP (EDIT PERMISSIONS) permission for the "Everyone" predefined group in production.

Audit

To determine if your existing AWS S3 buckets allow public WRITE_ACP access, perform the following:

Using AWS Console

01 Sign in to the AWS Management Console.

02 Navigate to S3 dashboard at https://console.aws.amazon.com/s3/.

03 Select the S3 bucket that you want to examine and click the Properties tab from the S3 dashboard top right menu:

Properties tab from the S3 dashboard top right menu

04 In the Properties panel, click the Permissions tab and check the Access Control List (ACL) configuration for any grantee named "Everyone". A grantee can be an AWS account or an AWS S3 predefined group. The grantee called "Everyone" is an AWS predefined group that allows access to everyone on the Internet. If the bucket ACL configuration does lists the "Everyone" predefined group with the Edit Permissions (WRITE_ACP) permissions enabled:

If the bucket ACL configuration does lists the 'Everyone' predefined group with the Edit Permissions (WRITE_ACP) permissions enabled

the selected S3 bucket is publicly accessible for unrestricted ACL permission updates and is rendered as insecure.

05 Repeat steps no. 3 and 4 for each AWS S3 bucket that you want to examine.

Using AWS CLI

01 Run list-buckets command (OSX/Linux/UNIX) to list all existing S3 buckets within your account:

aws s3api list-buckets
	--query 'Buckets[*].Name'

02 The command output should return the name of each S3 bucket available across all AWS regions. The following output example returns an S3 bucket named webapp-data-repository:

[
    "webapp-data-repository"
]

03 Run get-bucket-acl command (OSX/Linux/UNIX) to return the access control policy (ACP) for selected S3 bucket:

aws s3api get-bucket-acl
	--bucket webapp-data-repository

04 The command output should display the bucket ACL policy document which contains the AWS users and groups that have access to the bucket and their level of permissions. If the Grantee group URI is equal to “http://acs.amazonaws.com/groups/global/AllUsers” (Everyone) and the permission associated with the group is WRITE_ACP, the selected bucket is publicly accessible for permissions updates, hence insecure. The following example displays an S3 bucket Access Control Policy (ACP) that allows public WRITE_ACP access to everyone:

{
    "Owner": {
        "DisplayName": "john.doe",
        "ID": "561f3e58089ec3bd00296f84056525d78415fd5e56dcfda3f8309356e2"
    },
    "Grants": [
        {
            "Grantee": {
                "Type": "Group",
                "URI": "http://acs.amazonaws.com/groups/global/AllUsers"
            },
            "Permission": "WRITE_ACP"
        }
    ]
}

05 Repeat steps no. 3 and 4 for each S3 bucket that you want to examine available in your AWS account.

Remediation / Resolution

To remove public WRITE_ACP access for your S3 buckets, you need to perform the following:

Using AWS Console

01 Sign in to the AWS Management Console.

02 Navigate to S3 dashboard at https://console.aws.amazon.com/s3/.

03 Select the S3 bucket that you want to examine and click the Properties tab from the S3 dashboard top right menu:

Properties tab from the S3 dashboard top right menu

04 In the Properties panel, click Permissions to expand the bucket Access Control List (ACL) configuration tab and search for the grantee (predefined group) named "Everyone".

05 Uncheck the Edit Permissions (WRITE_ACP) permission applied to the "Everyone" group:

Uncheck the Edit Permissions (WRITE_ACP) permission applied to the 'Everyone' group

or delete the predefined group using the x button available next to its settings:

delete the predefined group using the x button available next to its settings

06 Click Save to apply the new ACL configuration and remove the bucket public WRITE_ACP (EDIT PERMISSIONS) access.

07 Repeat steps no. 3 – 6 for each publicly “WRITE_ACP” accessible S3 bucket available in your AWS account.

Using AWS CLI

01 Run list-buckets command (OSX/Linux/UNIX) to list all existing S3 buckets available in your account:

aws s3api list-buckets
	--query 'Buckets[*].Name'

02 The command output should return the name of each existing S3 bucket. The following output example returns one S3 bucket named webapp-data-repository:

[
    "webapp-data-repository"
]

03 Run put-bucket-acl command (OSX/Linux/UNIX) using the bucket name as command parameter, to update permissions and remove the public WRITE_ACP access for the selected S3 bucket by applying the private predefined S3 Access Control List (if successful, the command should not return any output):

aws s3api put-bucket-acl
	--bucket webapp-data-repository
	--acl private

04 Repeat step no. 3 for each publicly “WRITE_ACP” accessible S3 bucket within your AWS account.

References

Publication date May 12, 2016