ObjectStorage
S3/Blob/GCS bucket.
class: Storage
Realizing resources
aws aws
| resource | scope | enumerate | required permissions |
|---|---|---|---|
aws:s3:bucket |
global | s3:ListBuckets |
s3:ListAllMyBuckets |
gcp gcp
| resource | scope | enumerate | required permissions |
|---|---|---|---|
gcp:storage:bucket |
global | storage.buckets.list |
storage.buckets.list |
azure azure
| resource | scope | enumerate | required permissions |
|---|---|---|---|
azure:storage:account |
global | arg:microsoft.storage/storageaccounts |
Microsoft.Storage/storageaccounts/read |
As edge source
As edge target
Exposure sites
aws-accessanalyzer-finding-details-metadataaws-appflow-flow-data-destinationaws-athena-query-result-rowsaws-backup-recovery-point-restored-contentaws-bedrock-runtime-prompt-response-payloadaws-cloudfront-key-value-store-valueaws-cloudtrail-event-data-store-query-resultsaws-cloudtrail-event-request-response-payload
Rules that touch ObjectStorage 51
Write access to the S3 object that a stack's TemplateURL references: the next stack update will load and execute the attacker's template as the service role.
aws
CanModifyCodeWrite access to the pipeline's artifact store S3 bucket/prefix lets an attacker inject a malicious artifact that the next pipeline stage processes as the stage's action role - supply-chain code injection into the pipeline.
aws
CanModifyCodeAn EMR cluster whose instance profile has s3:GetObject on a data lake bucket can read all objects in that bucket.
aws
CanReadDataOverwrite a component's S3-backed document (s3:PutObject on the component URI bucket/key) to inject malicious steps that execute on the next build as the build instance role.
aws
CanModifyCodeA principal with query execution on a Redshift cluster can run UNLOAD using an attached IAM role that has s3:PutObject, exfiltrating warehouse data to an S3 location.
aws
CanExfiltrates3:PutBucketPublicAccessBlock + s3:PutBucketPolicy enables a two-step escalation to expose the bucket - attacker CAN expose the bucket but it is NOT currently exposed.
s3:ListBucket + s3:GetObject on a bucket enables enumeration and download of all objects - a complete bucket exfiltration.
aws
CanExfiltrates3:PutReplicationConfiguration sets up continuous S3 Replication to an external/attacker-controlled destination bucket, establishing a persistent data exfiltration channel.
aws
CanExfiltrates3:PutBucketNotification lets a principal reconfigure event notification targets (Lambda/SQS/SNS/EventBridge) for a bucket, redirecting all S3 events to attacker-controlled destinations.
s3:PutObject on a bucket that is a verified code-artifact deployment source (Lambda, CodePipeline, CloudFormation) for a compute workload equals modifying that workload's code.
aws
CanModifyCodes3:PutBucketPolicy lets a principal rewrite the bucket policy in full, self-granting any S3 permission including making the bucket public.
aws
CanModifyPolicyS3 bucket with a Principal:* bucket policy allowing s3:GetObject and Block Public Access disabled (RestrictPublicBuckets=false) is readable by any internet client.
s3:PutBucketAcl on a bucket with ObjectOwnership != BucketOwnerEnforced and Block Public Access IgnorePublicAcls=false enables ACL-based public exposure.
A principal that can read a bucket's data (CanReadData) and the bucket contains secrets (ContainsSecret) can read those secrets via s3:GetObject.
aws
CanReadSecrets3:GetObject on a bucket grants full data-plane read of stored objects (SSE-S3/no-encryption path - AWS-managed decryption, no caller kms:Decrypt needed).
aws
CanReadDatas3:GetObject on a SSE-KMS bucket: read is CONDITIONAL on kms:Decrypt for the wrapping CMK. Cite credential-chains:decrypt-gates-secret-read to upgrade to ACTIVE.
aws
CanReadDataS3 static website hosting publishes a public HTTP endpoint serving bucket objects, independent of the bucket policy's API access controls.
s3:PutObject on a bucket grants data-plane write, enabling object creation/overwrite - including code artifact poisoning.
aws
CanWriteDataWrite access to the S3 object backing a Service Catalog product version's template (LoadTemplateFromURL): the next ProvisionProduct or UpdateProvisionedProduct loads the attacker's template and executes it as the launch role. cicd-chains propagates this CanModifyCode + ExecutesAs into CanExecuteAs.
aws
CanModifyCodeADLS Gen2 account with public blob access enabled and a public container exposes blob data to unauthenticated internet access.
azure
ExposedToInternetCluster init scripts run as root before user code; write access to the init-script URI + cluster edit = code injection on every node.
azure
CanModifyCodeWrite access to the CI-trigger branch of the pipeline's source repo lets a principal inject code that the pipeline will execute on the next triggered run.
azure
CanModifyCodeA principal with read access to an Event Grid subscription's dead-letter destination (Storage blob container) can read all failed/expired event payloads, including any credential material they contain.
azure
CanReadDataStorage Blob Data Contributor/Owner at account scope grants blob write access to all containers.
azure
CanWriteDataStorage Blob Data Contributor/Owner at container scope grants blob write access to that specific container.
azure
CanWriteDataStorage Blob Data Reader/Contributor/Owner at account scope grants data-plane read of all blob containers.
azure
CanReadDataStorage Blob Data Reader/Contributor/Owner at container scope grants data-plane read of a specific blob container.
azure
CanReadDatagenerateUserDelegationKey/action returns user-delegation key material (not a pre-formed SAS token) - the caller can sign arbitrary user-delegation SAS URLs offline within the key's validity window.
azure
CanReadCredentiallistAccountSas/action generates a pre-formed account-level SAS token, providing scoped but key-equivalent data-plane access.
azure
CanReadCredentiallistKeys/action returns storage account keys, bypassing all Azure RBAC and network controls for all sub-services (when SharedKey auth is enabled).
azure
CanReadCredentialStorage account with public blob access enabled and a public container exposes blob data to unauthenticated internet access.
azure
ExposedToInternetA Dataflow worker SA with storage.objects.create on an external GCS bucket can stream pipeline output (data records, query results) to that external location.
gcp
CanExfiltrateWriting to the GCS object that serves as a Dataflow Flex or Classic Template poisons the next job created from that template; the job runs the attacker-controlled pipeline code as the worker SA.
gcp
CanModifyCodeWrite access to the Cloud Deploy pipeline's GCS source bucket allows injecting malicious skaffold.yaml into every render job.
gcp
CanModifyCodestorage.buckets.update allows a principal to modify bucket configuration: UBLA settings, CMEK default key, versioning, Pub/Sub notification configs, retention policy, and logging - enabling encryption ransomware, trigger hijacking, and configuration-based escalation.
storage.objects.get on the source bucket + storage.objects.create on a destination bucket (cross-project or attacker-controlled) constitute effective data exfiltration; achievable via storage.objects.copy (rewriteObject) which combines read+write permissions.
gcp
CanExfiltrate