The mechanics differ by provider but the shape is the same: use an already-valid identity to call the storage layer directly, skipping the front-end application entirely. Against S3 that means GetObject (and often a preceding ListBuckets or ListObjectsV2 to map what exists) called through the AWS API, CLI, or SDK, usually scripted in a loop so one credential can walk hundreds of buckets in minutes. Tools built for exactly this, like Pacu for S3 enumeration and download or Peirates for pulling cloud service-account tokens out of a compromised Kubernetes pod, exist specifically to automate that walk.
Snowflake looks different because there is no object API to call; the adversary authenticates to a virtual warehouse and issues SQL. Mandiant's account of the 2024 campaign documents a repeatable sequence: SHOW TABLES to enumerate what a stolen credential can reach, a large SELECT * against a target table, CREATE TEMPORARY STAGE to open a landing zone, COPY INTO that stage with GZIP compression and a defined max file size, and finally GET to pull the compressed file to local disk. Each step is a normal Snowflake feature; strung together with an unfamiliar CLIENT_APP_ID it is a full extraction pipeline.
Azure Storage adds a third pattern: shared access signature tokens. A SAS token is a URL-embedded credential that grants time-boxed read access to a blob or container without an Entra ID sign-in at all, so a leaked or over-scoped SAS token lets an attacker pull data through GetBlob calls that never touch conditional access, MFA, or the identity provider's logs. All three paths share the same defensive problem: the API call, the SQL statement, and the SAS token are all legitimate provider features being used by a credential the platform has no reason to distrust.