K8S-Goat SSRF in the Kubernetes (K8S) world
매번 공부를 미루던 k8s에 대한 찍먹을 위해 k8s-goat 프로젝트를 통해 찍먹을 진행한다. 해당 goat 프로젝트에서는 k8s 환경에서 발생할 수 있는 misconfigurations, 취약점, 보안 문제를 의도적으로 취약하게 구성되어있으며 이를 통해 공격을 진행하며 학습한다.
3번 시나리오는 k8s에서 SSRF 취약점을 악용하여 클라우드 인스턴스 메타데이터 및 내부 서비스 메타데이터 정보에 접근하는 방법에 대해서 다룬다.
이번 시나리오를 시작하려면 http://127.0.0.1:1232
에 접근하여 확인할 수 있다
목표 : 메타데이터에서 k8s-goat-FLAG 값을 탈취한다.
이번 시나리오는 2번 시나리오 DIND (docker-in-docker exploitation)에서 잠깐 확인했던 AWS 메타데이터를 탈취하는 방법과 비슷할것으로 예상된다. 대상에 접근하면 2번 문제와 비슷하지만 이번엔 API를 호출할 수 있도록 구성된 페이지로 이런식으로 사용자에게 endpoint를 전달받아 전달해주는 프록시 구조는 SSRF에 취약하다.
169.254.169.254
는 특수한 IP 주소로 AWS EC2 인스턴스 내에서만 호출가능하며 인스턴스의 메타데이터 정보를 담고있다.
메타데이터 내에서 k8s-goat-FLAG를 찾아보려 다양한 정보에 접근했으나 발견하지 못했다.
이후엔 SSRF을 통해 대상 서버에 대한 포트스캔을 진행했다. (http://127.0.0.1:1232에 POST로 -d 파라미터내 FUZZ
부분에 local-ports.txt의 값을 무차별 대입하고 HTTP Response )
결과적으로 5000/TCP가 열려있는것을 확인할 수 있었고, 내부 호스트 서비스인 http://metadata-db
를 참조하라는 응답을 볼 수 있다.
1
ffuf -w ~/Desktop/Tools/WordList/SecLists/Discovery/Web-Content/local-ports.txt -H "content-type: application/json" -X POST -d '{"endpoint":"FUZZ","method":"","headers":""}' -u http://127.0.0.1:1232 -fs 0
즉시 내부 메타데이터 서비스를 호출하니 아래와 같이 디렉터리 인덱싱 응답을 볼 수 있다. 인덱싱되는 디렉터리를 따라가면서 http://metadata-db/latest/secrets/kubernetes-goat
에서 이번 시나리오의 목적인 k8s-goat-FLAG를 찾을 수 있다.