Skip to content

Share an EBS Volume for Cross-Account Cloning

idempotent

Platform: AWS

Mappings

Description

Exfiltrates an EBS volume by sharing it with an external AWS account through AWS Resource Access Manager (RAM).

Using the EBS Volume Clones across AWS accounts feature, sharing a volume with the AWSRAMPermissionEBSVolumeCopyAccess managed permission allows the recipient account to create a cross-account clone of the volume and exfiltrate its data.

Warm-up:

  • Create an EBS volume
  • Create a RAM resource share with the AWSRAMPermissionEBSVolumeCopyAccess managed permission

Detonation:

  • Call ram:AssociateResourceShare to share the EBS volume with an external, fictitious AWS account

Note: This technique shares an unencrypted EBS volume. Accounts with EBS encryption by default enabled may encrypt new volumes with the AWS managed key, which cannot be shared (see the AWS documentation).

Instructions

Detonate with Stratus Red Team
stratus detonate aws.exfiltration.ec2-share-ebs-volume

Detection

Through CloudTrail's AssociateResourceShare event (event source ram.amazonaws.com), when requestParameters shows an EBS volume being shared with a new or unknown AWS account, such as:

"requestParameters": {
  "principals": ["999999999999"],
  "resourceArns": ["arn:aws:ec2:us-east-1:111111111111:volume/vol-0c741433d3ddb73c7"],
  "resourceShareArn": "arn:aws:ram:us-east-1:111111111111:resource-share/24048254-7629-41e0-ba73-f129af0cc68d"
}

In the same event responseElements.resourceShareAssociations carries an external flag indicating whether RAM treats the recipient principal as outside the owner's AWS Organizations boundary (see RAM API reference). "external": true.

Note: RAM only recognizes a principal as in-organization when sharing with AWS Organizations is enabled (ram:EnableSharingWithAwsOrganization); when it is disabled, an account in the same organization is reported as external.

"responseElements": {
  "resourceShareAssociations": [
    {
      "associationType": "RESOURCE",
      "associatedEntity": "arn:aws:ec2:us-east-1:111111111111:volume/vol-0c741433d3ddb73c7",
      "external": false
    },
    {
      "associationType": "PRINCIPAL",
      "associatedEntity": "999999999999",
      "external": true
    }
  ]
}

When the recipient account clones the shared volume, the CopyVolumes event is logged in both the recipient account and the volume owner's account (see AWS docs).

In the owner's account, userIdentity.accountId contains the attacker's account ID, recipientAccountId contains the victim's account ID where the volume was originally created, and CopyVolumesRequest.SourceVolumeId identifies the volume:

{
  "userIdentity": {
    "type": "AssumedRole",
    "accountId": "999999999999"
  },
  "eventSource": "ec2.amazonaws.com",
  "eventName": "CopyVolumes",
  "awsRegion": "us-east-1",
  "requestParameters": {
    "CopyVolumesRequest": {
      "SourceVolumeId": "vol-0c741433d3ddb73c7"
    }
  },
  "readOnly": false,
  "managementEvent": true,
  "recipientAccountId": "111111111111"
}

Note that detonating this attack technique with Stratus Red Team does not simulate an attacker cloning the volume from their account (only sharing it from your account).

Detonation logs new!

The following CloudTrail events are generated when this technique is detonated1:

  • ram:AssociateResourceShare
View raw detonation logs
[
    {
        "eventVersion": "1.11",
        "userIdentity": {
            "type": "AssumedRole",
            "principalId": "AROA2YFTN25M35PXPIBO8:randomZWPRzAfS8aY2@gmail.com",
            "arn": "arn:aws:sts::722461077209:assumed-role/AWSReservedSSO_AWSAdministratorArandomHnFPH80vz8tS@gmail.com",
            "accountId": "986293246532",
            "accessKeyId": "ASIAH0JI8Y2XPZBO5YY5",
            "sessionContext": {
                "sessionIssuer": {
                    "type": "Role",
                    "principalId": "AROA2YFTN25M35PXPIBO8",
                    "arn": "arn:aws:iam::986293246532:role/aws-reserved/sso.amazonaws.com/cagov-westnorth-1r/AWSReservedSSO_AWSAdministratorAccess_a5e2839336c5dedf",
                    "accountId": "986293246532",
                    "userName": "AWSReservedSSO_AWSAdministratorAccess_a5e2839336c5dedf"
                },
                "attributes": {
                    "creationDate": "2026-10-10T18:02:09Z",
                    "mfaAuthenticated": "false"
                }
            },
            "onBehalfOf": {
                "userId": "92670c9793-3bb792e0-4882-4c8e-aa07-bf205e4798e3",
                "identityStoreArn": "arn:aws:identitystore::606202301209:identitystore/d-92670c9793"
            }
        },
        "eventTime": "2026-10-10T18:47:16Z",
        "eventSource": "ram.amazonaws.com",
        "eventName": "AssociateResourceShare",
        "awsRegion": "cn-easteast-1r",
        "sourceIPAddress": "208.12.253.202",
        "userAgent": "stratus-red-team_93185f1c-9296-435a-aa81-8081b35e87f2",
        "requestParameters": {
            "principals": [
                "763721234306"
            ],
            "resourceArns": [
                "arn:aws:ec2:cn-easteast-1r:986293246532:volume/vol-0c741433d3ddb73c7"
            ],
            "resourceShareArn": "arn:aws:ram:cn-easteast-1r:986293246532:resource-share/24048254-7629-41e0-ba73-f129af0cc68d"
        },
        "responseElements": {
            "resourceShareAssociations": [
                {
                    "associatedEntity": "arn:aws:ec2:cn-easteast-1r:986293246532:volume/vol-0c741433d3ddb73c7",
                    "associationType": "RESOURCE",
                    "external": false,
                    "resourceShareArn": "arn:aws:ram:cn-easteast-1r:986293246532:resource-share/24048254-7629-41e0-ba73-f129af0cc68d",
                    "status": "ASSOCIATING"
                },
                {
                    "associatedEntity": "763721234306",
                    "associationType": "PRINCIPAL",
                    "external": true,
                    "resourceShareArn": "arn:aws:ram:cn-easteast-1r:986293246532:resource-share/24048254-7629-41e0-ba73-f129af0cc68d",
                    "status": "ASSOCIATING"
                }
            ]
        },
        "requestID": "78428a49-4222-446c-aff3-7167bc8838ea",
        "eventID": "0fd3acf5-b013-45dc-aacf-ea925a89901f",
        "readOnly": false,
        "eventType": "AwsApiCall",
        "managementEvent": true,
        "recipientAccountId": "986293246532",
        "eventCategory": "Management",
        "tlsDetails": {
            "tlsVersion": "TLSv1.3",
            "cipherSuite": "TLS_AES_128_GCM_SHA256"
        }
    }
]

  1. These logs have been gathered from a real detonation of this technique in a test environment using Grimoire, and anonymized using LogLicker. ↩