From da821dd398854ffeb49cdef3b1bcb6849319e5b9 Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 6 Oct 2025 09:59:38 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat --- .../aws-secrets-manager-post-exploitation.md | 87 +++++++++++++++---- .../aws-secrets-manager-privesc.md | 10 +-- 2 files changed, 73 insertions(+), 24 deletions(-) diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md index b63b176aa..3ed456f9f 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md @@ -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 ``` ## secretsmanager:DeleteResourcePolicy -Ця дія дозволяє видаляти політику доступу до ресурсу, яка контролює, хто може отримати доступ до секрету. Це може призвести до DoS, якщо політика доступу до ресурсу була налаштована так, щоб дозволяти доступ конкретному набору користувачів. +Ця дія дозволяє видалити resource policy, який контролює, хто може отримати доступ до секрету. Це може призвести до DoS, якщо resource policy був налаштований так, щоб дозволяти доступ певному набору користувачів. -Щоб видалити політику доступу до ресурсу: +Щоб видалити resource policy: ```bash aws secretsmanager delete-resource-policy \ --secret-id ``` ## secretsmanager:UpdateSecretVersionStage -Стані секрету використовуються для керування версіями секрету. AWSCURRENT позначає активну версію, яку використовують програми, AWSPREVIOUS зберігає попередню версію, щоб ви могли при необхідності здійснити відкат, а AWSPENDING використовується в процесі ротації для підготовки та перевірки нової версії перед тим, як зробити її поточною. +Стани секрету використовуються для керування версіями секрету. AWSCURRENT позначає активну версію, яку використовують додатки, AWSPREVIOUS зберігає попередню версію, щоб у разі потреби можна було відкотитися, а AWSPENDING використовується в процесі ротації для підготовки та перевірки нової версії перед тим, як зробити її поточною. -Програми завжди читають версію з AWSCURRENT. Якщо хтось перемістить цю мітку на неправильну версію, додатки використовуватимуть недійсні облікові дані і можуть не працювати. +Додатки завжди читають версію з AWSCURRENT. Якщо хтось перемістить цей ярлик на неправильну версію, додатки використовуватимуть недійсні облікові дані і можуть зазнати збою. -AWSPREVIOUS не використовується автоматично. Однак якщо AWSCURRENT буде видалено або переназначено неправильно, може здатися, що все досі працює з попередньою версією. +AWSPREVIOUS не використовується автоматично. Однак якщо AWSCURRENT буде видалено або переназначено неправильно, може створитися враження, що все досі працює з попередньою версією. ```bash aws secretsmanager update-secret-version-stage \ --secret-id \ @@ -79,3 +79,52 @@ aws secretsmanager update-secret-version-stage \ --remove-from-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 \ +--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 +``` +Наслідки +- Швидке «smash-and-grab» багатьох секретів з меншою кількістю API викликів, що потенційно дозволяє обійти сповіщення, налаштовані на піки GetSecretValue. +- Журнали CloudTrail все ще містять по одному запису GetSecretValue на кожен секрет, отриманий у пакеті. diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md index bdd8ac6c5..5b176a681 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md @@ -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 # 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