Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat

This commit is contained in:
Translator
2025-10-06 09:59:38 +00:00
parent afa772448c
commit da821dd398
2 changed files with 73 additions and 24 deletions
@@ -4,43 +4,43 @@
## Secrets Manager
Для додаткової інформації див.:
Для отримання додаткової інформації див.:
{{#ref}}
../aws-services/aws-secrets-manager-enum.md
{{#endref}}
### Читання Secrets
### Читання секретів
**secrets самі по собі є чутливою інформацією**, [див. сторінку privesc](../aws-privilege-escalation/aws-secrets-manager-privesc.md), щоб дізнатися, як їх читати.
Самі **секрети є чутливою інформацією**, [див. privesc сторінку](../aws-privilege-escalation/aws-secrets-manager-privesc.md), щоб дізнатися, як їх читати.
### DoS — Зміна значення Secret
### DoS — зміна значення секрету
Змінивши значення secret, ви можете **DoS всі системи, які залежать від цього значення.**
Змінивши значення секрету, ви можете **спровокувати 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
### DoS Зміна KMS key
Якщо attacker має дозвіл secretsmanager:UpdateSecret, він може налаштувати secret так, щоб він використовував KMS key, який належить attacker. Цей key спочатку налаштований так, що будь-хто може отримати до нього доступ і використовувати його, тому оновлення secret з новим key можливе. Якби key не був доступний, secret не можна було б оновити.
Якщо зловмисник має дозвіл secretsmanager:UpdateSecret, він може налаштувати секрет так, щоб використовувався KMS key, який належить зловмиснику. Цей ключ спочатку налаштований так, що будь-хто може отримати до нього доступ і використовувати його, тому оновлення секрету з новим ключем можливе. Якби ключ був недоступний, секрет оновити було б неможливо.
Після зміни key для secret attacker змінює конфігурацію свого key так, щоб доступ до нього мав тільки attacker. Таким чином, у наступних версіях secret він буде зашифрований новим key, і оскільки доступу до нього не буде, можливість отримати secret буде втрачена.
Після зміни ключа для секрету зловмисник змінює конфігурацію свого ключа так, щоб доступ до нього мав лише він. Таким чином у наступних версіях секрету він буде зашифрований новим ключем, і оскільки доступу до нього не буде, можливість отримати секрет буде втрачено.
Важливо зауважити, що ця недоступність виникне лише у пізніших версіях, після зміни вмісту secret, оскільки поточна версія все ще зашифрована оригінальним KMS key.
Важливо зазначити, що ця недоступність виникне лише в пізніших версіях, після зміни вмісту секрету, оскільки поточна версія все ще зашифрована оригінальним 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 Видалення секрету
### DoS Deleting Secret
Мінімальна кількість днів для видалення секрету — 7.
Мінімальна кількість днів для видалення Secret — 7
```bash
aws secretsmanager delete-secret \
--secret-id MyTestSecret \
@@ -48,29 +48,29 @@ aws secretsmanager delete-secret \
```
## secretsmanager:RestoreSecret
Можна відновити secret, що дозволяє відновлювати secrets, які були заплановані до видалення, оскільки мінімальний період очікування видалення для secrets становить 7 днів, а максимальний — 30 днів. У поєднанні з дозволом secretsmanager:GetSecretValue це дає змогу отримати їхній вміст.
Можна відновити секрет, що дозволяє відновлювати секрети, заплановані до видалення, оскільки мінімальний період видалення для секретів становить 7 днів, а максимальний — 30 днів. У поєднанні з дозволом secretsmanager:GetSecretValue це дає змогу отримати їхній вміст.
Щоб відновити secret, який перебуває в процесі видалення, можна використати таку команду:
Щоб відновити секрет, що перебуває в процесі видалення, можна використати наступну команду:
```bash
aws secretsmanager restore-secret \
--secret-id <Secret_Name>
```
## secretsmanager:DeleteResourcePolicy
Ця дія дозволяє видаляти політику доступу до ресурсу, яка контролює, хто може отримати доступ до секрету. Це може призвести до DoS, якщо політика доступу до ресурсу була налаштована так, щоб дозволяти доступ конкретному набору користувачів.
Ця дія дозволяє видалити resource policy, який контролює, хто може отримати доступ до секрету. Це може призвести до DoS, якщо resource policy був налаштований так, щоб дозволяти доступ певному набору користувачів.
Щоб видалити політику доступу до ресурсу:
Щоб видалити resource policy:
```bash
aws secretsmanager delete-resource-policy \
--secret-id <Secret_Name>
```
## secretsmanager:UpdateSecretVersionStage
Стані секрету використовуються для керування версіями секрету. AWSCURRENT позначає активну версію, яку використовують програми, AWSPREVIOUS зберігає попередню версію, щоб ви могли при необхідності здійснити відкат, а AWSPENDING використовується в процесі ротації для підготовки та перевірки нової версії перед тим, як зробити її поточною.
Стани секрету використовуються для керування версіями секрету. AWSCURRENT позначає активну версію, яку використовують додатки, AWSPREVIOUS зберігає попередню версію, щоб у разі потреби можна було відкотитися, а AWSPENDING використовується в процесі ротації для підготовки та перевірки нової версії перед тим, як зробити її поточною.
Програми завжди читають версію з AWSCURRENT. Якщо хтось перемістить цю мітку на неправильну версію, додатки використовуватимуть недійсні облікові дані і можуть не працювати.
Додатки завжди читають версію з AWSCURRENT. Якщо хтось перемістить цей ярлик на неправильну версію, додатки використовуватимуть недійсні облікові дані і можуть зазнати збою.
AWSPREVIOUS не використовується автоматично. Однак якщо AWSCURRENT буде видалено або переназначено неправильно, може здатися, що все досі працює з попередньою версією.
AWSPREVIOUS не використовується автоматично. Однак якщо AWSCURRENT буде видалено або переназначено неправильно, може створитися враження, що все досі працює з попередньою версією.
```bash
aws secretsmanager update-secret-version-stage \
--secret-id <your-secret-name-or-arn> \
@@ -79,3 +79,52 @@ aws secretsmanager update-secret-version-stage \
--remove-from-version-id <previous-version-id>
```
{{#include ../../../banners/hacktricks-training.md}}
### Mass Secret Exfiltration via BatchGetSecretValue (up to 20 per call)
Зловживайте Secrets Manager BatchGetSecretValue API, щоб отримати до 20 секретів в одному запиті. Це може значно зменшити обсяг викликів API в порівнянні з ітерацією GetSecretValue по кожному секрету. Якщо використовуються фільтри (tags/name), також потрібен дозвіл ListSecrets. CloudTrail все одно записує один GetSecretValue подію для кожного секрету, отриманого в батчі.
Required permissions
- secretsmanager:BatchGetSecretValue
- secretsmanager:GetSecretValue для кожного цільового секрету
- secretsmanager:ListSecrets якщо використовуються --filters
- kms:Decrypt на CMKs, які використовуються секретами (якщо не використовується 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}'
```
Експфільтрація за фільтрами (ключ/значення тегу або префікс імені)
```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 на кожен секрет, отриманий у пакеті.
@@ -4,7 +4,7 @@
## Secrets Manager
Для отримання додаткової інформації про Secrets Manager див.:
Для отримання додаткової інформації про Secrets Manager дивіться:
{{#ref}}
../aws-services/aws-secrets-manager-enum.md
@@ -12,18 +12,18 @@
### `secretsmanager:GetSecretValue`
Зловмисник з цим дозволом може отримати **збережене значення всередині secret** в AWS **Secretsmanager**.
Атакуючий з цим дозволом може отримати **збережене значення всередині секрету** в AWS **Secretsmanager**.
```bash
aws secretsmanager get-secret-value --secret-id <secret_name> # Get value
```
**Potential Impact:** Доступ до високочутливих даних у сервісі AWS secrets manager.
**Можливий вплив:** Отримання доступу до високочутливих даних всередині AWS secrets manager service.
> [!WARNING]
> Зауважте, що навіть за наявності дозволу `secretsmanager:BatchGetSecretValue`, зловмиснику також потрібен `secretsmanager:GetSecretValue` для отримання чутливих секретів.
> Зверніть увагу, що навіть з дозволом `secretsmanager:BatchGetSecretValue` атакувальнику також потрібен `secretsmanager:GetSecretValue`, щоб отримати чутливі секрети.
### `secretsmanager:GetResourcePolicy`, `secretsmanager:PutResourcePolicy`, (`secretsmanager:ListSecrets`)
З попередніми дозволами можна **надати доступ іншим principals/accounts (навіть зовнішнім)** до цього **секрету**. Зауважте, що щоб **читати секрети, зашифровані** за допомогою KMS key, користувач також має мати **доступ до KMS key**окладніше на [KMS Enum page](../aws-services/aws-kms-enum.md)).
Завдяки вищезгаданим дозволам можна **надати доступ іншим principals/accounts (навіть зовнішнім)** до **secret**. Зверніть увагу, що щоб **читати secrets, зашифровані** за допомогою KMS key, користувачу також потрібен **доступ до KMS key**етальніше на [KMS Enum page](../aws-services/aws-kms-enum.md)).
```bash
aws secretsmanager list-secrets
aws secretsmanager get-resource-policy --secret-id <secret_name>