# AWS - CloudFront Enum

{{#include ../../../banners/hacktricks-training.md}}

## CloudFront

CloudFront is AWS's **content delivery network that speeds up distribution** of your static and dynamic content through its worldwide network of edge locations. When you use a request content that you're hosting through Amazon CloudFront, the request is routed to the closest edge location which provides it the lowest latency to deliver the best performance. When **CloudFront access logs** are enabled you can record the request from each user requesting access to your website and distribution. As with S3 access logs, these logs are also **stored on Amazon S3 for durable and persistent storage**. There are no charges for enabling logging itself, however, as the logs are stored in S3 you will be stored for the storage used by S3.

The log files capture data over a period of time and depending on the amount of requests that are received by Amazon CloudFront for that distribution will depend on the amount of log fils that are generated. It's important to know that these log files are not created or written to on S3. S3 is simply where they are delivered to once the log file is full. **Amazon CloudFront retains these logs until they are ready to be delivered to S3**. Again, depending on the size of these log files this delivery can take **between one and 24 hours**.

**By default cookie logging is disabled** but you can enable it.

### Functions

You can create functions in CloudFront. These functions will have its **endpoint in cloudfront** defined and will run a declared **NodeJS code**. This code will run inside a **sandbox** in a machine running under an AWS managed machine (you would need a sandbox bypass to manage to escape to the underlaying OS).

As the functions aren't run in the users AWS account. no IAM role is attached so no direct privesc is possible abusing this feature.

### Enumeration

```bash
aws cloudfront list-distributions
aws cloudfront get-distribution --id <id> # Just get 1
aws cloudfront get-distribution-config --id <id>

aws cloudfront list-functions
aws cloudfront get-function --name TestFunction function_code.js

aws cloudfront list-distributions | jq ".DistributionList.Items[] | .Id, .Origins.Items[].Id, .Origins.Items[].DomainName, .AliasICPRecordals[].CNAME"
```

## Unauthenticated Access

{{#ref}}
../aws-unauthenticated-enum-access/aws-cloudfront-unauthenticated-enum/README.md
{{#endref}}

## Post Exploitation

{{#ref}}
../aws-post-exploitation/aws-cloudfront-post-exploitation/README.md
{{#endref}}

{{#include ../../../banners/hacktricks-training.md}}




