💻
My Personal Hacking Path
  • 👓Wellcome
    • My Personal Hacking Path
      • Whoami
  • 📚Mi Metodología de Pentesting
    • Tipos de evaluaciones
      • El día a día en pentesting
    • Metodología Propia
      • OWASP
      • OSSTMM
      • PTES
      • CEH Hacking Metodology (CHM)
      • Cyber Kill Chain
      • MITRE Att&ck
    • Fase 0 - Pre Evalaución
    • Fase 1 - Reconocimiento
      • Web / Host
      • SubDominios
      • Descubrimiento de correos electrónicos
      • Escaneo de Puertos
      • Credenciales y brechas de seguridad
      • ¿Sin Ideas?
    • Fase 2 - Explotación
      • Shells
        • Diferencia entre una WebShell y Reverse Shell
      • Payload
      • Network Penetration Services
        • 20|21 - FTP
        • 22 - SSH
        • 139|445- SMB
        • 80|443 - HTTP/HTTPS
    • Fase 3 - Post Explotación
      • Enumeración
      • Linux
        • Enumeración
        • Privilege Escalation
      • Windows
        • Revershell
        • Windows Enum
        • Privilege Escalation
    • Fase 4 - Reporting
      • CVSS
        • v4.0
      • Toma de notas
  • 👾Malware
    • Malware DevOps
    • Arquitectura de Windows
      • Windows API
      • Procesos de Windows
      • Estructuras no documentadas
    • PE
      • DLL
    • Almacenamiento del Payload
      • .data & .rdata
      • .text
      • .rsrc
    • Cifrado de Payload
      • XOR
      • RC4
      • AES
    • Ofuscación de Payload
      • IPv4/IPv6Fuscation
      • MACFucscation
      • UUIDFuscation
    • Process Injectión
      • DLL Injection
      • Shellcode Injection
      • APC Injection
  • 🌐Web-Pentesting
    • Metodología para Pentesting Web
    • Footprinting
      • Identificación Tecnologías web
        • WordPress
        • Joomla
        • Drupal
        • Magento
      • Fuzzing
      • Validación de los certificados
    • Vulnerabilidades comunes
      • File Upload
      • SQL Injection
      • Cross-site scripting
      • XXE Injection
      • LFI - Local File Inclusion
        • Log Poisoning
      • RFI - Remote File Inclusión
      • CSRF - Cross-Site Request Forgery
      • SSRF - Server-Side Request Forgery
      • SSTI - Server-Side Template Injection
      • CSTI - Client-Side Template Injection
      • Padding Oracle Attack
      • NoSQL Injection
      • LDAP Injection
    • Laboratorios
  • ☁️AWS Pentesting
    • Introducción a Amazon Web Services AWS
    • Acceso Inicial
    • IAM
      • Políticas de IAM
      • Enumeraciones
      • Privesc-Paths
        • Permisos de IAM
        • Permisos sobre políticas
        • AssumeRolePolicy Update
        • IAM:PassRole*
          • PassExistingRoleToCloudFormation
    • S3
      • Enumeración
      • S3_public
      • OSINT
    • Lambda
      • Enum Lambda
      • Enum API Gateway
      • Privesc-Paths
        • RCE sobre Lambda
        • PassExistingRoleToNewLambdaThenInvoke
        • PassRoleToNewLambdaThenTrigger
        • EditExistingLambdaFunctionWithRole
    • EC2
      • Enumeración
      • Privesc-Paths
        • EC2_SSRF
        • CreateEC2WhithExistingIP
        • PassExistingRoleToNewGlueDevEndpoint
        • ECS_takeover
    • VPC
      • Enumeración
      • PivotingInTheCloud
    • Bases de Datos
      • RDS
        • Enumeración
      • DynamoDB
        • Enumeración
    • ECS
      • Enum ECR
      • Enum ECS
      • Enum EKS
    • AWS Secrets Manager
      • Enumeración
    • Análisis de vulnerabilidades Automatizado
    • Blue Team AWS
      • CloudTrail
      • CloudWatch
      • GuardDuty
      • AWS Inspector
      • AWS Shield
      • Web Application Firewall
    • Notas
      • Terraform
  • 🔫Red_Team
    • Introducción a Red Team
      • Assume breach
    • ¿Qué es MITRE ATT&CK?
      • Guia de uso de Invoke-AtomicRedTeam
    • C2 Comando y control
      • Sliver C2
        • Instalación
        • Beacons y Sesiones
        • Perfiles
        • mTLS y WiewGuard
        • HTTP / HTTPS
        • DNS
        • Stagers: Basics
        • Stagers: Proccess Injection
        • Basics de Implates
        • Ejecución de Assembly
        • Sideload
        • SpawnDLL
        • Sliver Extensions
  • 💾Active Directory
    • Teoria
      • Componentes Físicos
      • Componentes Lógicos
      • GPO VS ACL
      • Kerberos
        • Funcionamiento de Kerberos
      • Usuarios por defecto
    • Enumeraciones
      • ¿Por qué enumerar?
      • Enumeración manual
      • Enumeración con PowerView
    • Ataques en AD
      • Mimikats
        • Comandos
      • Password Spraying
      • LLMNR Poisoning
      • Relay Attacks
        • NTLM
      • Kerberoasting
    • Tools
      • AuxRecon
      • Powershell
      • PowerView.ps1
      • ADPeas
      • Mimikatz
        • Comandos
    • AD Lab
  • 🌩️Azure Coud Pentesting
    • Introducción a Azure y Office 365
    • Introducción a Microsoft Indentity Services
    • Enumeración
    • Azure Files
      • Encontrar Fuga de Datos
    • Microsoft Graph
    • Notas
  • 📱Mobile Pentesting
    • Análisis de Aplicaciones Móviles en MobSF
    • ¿Cómo interceptar tráfico de una aplicación Flutter Android con Burp?
  • 📶Wireless
    • Terminología
    • Tipos de Wireless Networks
    • Formas de Autenticación
    • Cifrados
      • WEP
      • WPA
      • WPA2
      • WPA3
    • Ataques
  • 😎Extras
    • Docker
      • Port Forward y volúmenes
      • Docker Compose
      • Container Breakouts
    • Comandos Utiles
    • Fliper Zero
    • Páginas útiles
  • Kali Set Up
Con tecnología de GitBook
En esta página
  • IAM:CreateAccessKey
  • Configuración inicial
  • Enumeración
  • Explotación
  • IAM:CreateLoginProfile
  • Configuración Inicial
  • Explotación
  • IAM:UpdateLoginPorfile
  • Configuración Inicial
  • Explotación
  • IAM:AddUserToGroup
  • Configuración Inicial
  • Explotación
  1. AWS Pentesting
  2. IAM
  3. Privesc-Paths

Permisos de IAM

Lab: IAM vulnerable

AnteriorPrivesc-PathsSiguientePermisos sobre políticas

Última actualización hace 1 año

La mayoría de los Administradores de AWS son conscientes de que los 4 permisos (IAM:CreateAccessKey IAM:CreateLoginProfile IAM:UpdateLoginProfile IAM:AddUserToGroup) son peligrosos de otorgar a cualquier usuario, ya que cada uno de ellos permite una forma de elevación de privilegios. En rara ocasiones, encontraremos políticas que permitan a un usuario con pocos privilegios cambiar explícitamente una contraseña para un usuario con muchos privilegios. Sin embargo, este tipo de configuraciones incorrectas ocurren, a menudo porque las políticas mal definidas tienen consecuencias inesperadas.

Un ejemplo sobre esta categoría es el uso de “listas negras” por medio de NotActions. Todos los permisos no incluidos en la lista negra están permitidos implícitamente.

El uso de una lista negra en lugar de un enfoque de lista blanca podría dejar la puerta abierta para que los usuarios aumenten sus privilegios.

A continuación se muestran ejemplos de elevación de privilegios con el uso de los permisos vulnerables de IAM

IAM:CreateAccessKey

Un atacante con el permiso iam:CreateAccessKey en otros usuarios puede crear un ID de clave de acceso y una clave de acceso secreta que pertenezca a otro usuario en el entorno de AWS.

Solamente con el privilegio iam:CreateAccessKey es posible realizar la explotación

Laboratorio para probar este tipo de escalamiento:

Configuración inicial

Punto de entrada: privesc4-CreateAccessKey-user, con la siguientes políticas:

Autenticar desde AWS CLI y configurar las llaves de acceso en terminal para realizar la explotación:

Nota: con el --profile <ProfileName> permite crear nuevos perfiles para trabajar con diferentes cuentas, para este laboratorio de usara el perfil privesc4 y lab1test

Enumeración

Siempre listar el whoiam:

aws sts get-caller-identity --profile privesc4

Listado del rol:

aws iam list-attached-user-policies --user-name privesc4-CreateAccessKey-user

Listar las información de ARN de la política del usuario a auditar:

aws iam get-policy-version --policy-arn arn:aws:iam::num:policy/privesc4-CreateAccessKey --version-id v1

Explotación

Si se intenta añadir al usuario directamente al grupo de administradores no se podrá, generará un error

aws iam add-user-to-group --group-name Group-Root-Admin --user-name privesc4-CreateAccessKey-user --profile privesc4

Pero como el usuario privesc4-CreateAccessKey-user tiene la política de crear llaves de acceso de cualquier usuario ("Resource" : "*"), entonces se puede crear llaves para un usuario administrador:

aws iam create-access-key --user-name Administrator --profile privesc4

Es importante saber el nombre del usuario a generar la llave en el parámetro --user-name <Name>

Se podrían conocer los usuarios por medio de enumeración de IAM o por algun diccionario.

Finalmente asumes el rol de administrador o el usuario comprometido:

Y utilizar el comando de iam add-user-to-group para añadir al usuario privesc4-CreateAccessKey-user al grupo de administradores con el perfil --profile hack-admin:

aws iam add-user-to-group --group-name Group-Root-Admin --user-name privesc4-CreateAccessKey-user --profile hack-admin

Siendo parte del grupo de administradores es game over.

IAM:CreateLoginProfile

Un atacante con el permiso iam:CreateLoginProfile en otros usuarios puede crear una contraseña para iniciar sesión en la consola de AWS en cualquier usuario que no tenga ya un perfil de inicio de sesión configurado.

Configuración Inicial

Usuario de entrada: privesc5-CreateLoginProfile-user con la siguiente política:

Configurar un perfil en AWS CLI

aws sts get-caller-identity --profile privesc5

Explotación

Como en el caso anterior, después de hacer enumeración y encontrar el usuario administrador o el usuario interesante a escalar y tomando en cuenta el permiso iam:CreateLoginProfile, se puede realizar el siguiente comando para generar una nueva contraseña:

aws iam create-login-profile --user-name <UserToHack> --password Password123! --no-password-reset-required --profile privesc5

Si el usuario tiene doble factor de autenticación, este método de ataque no va a funcionar.

Con estos permisos, se puede cambiar la contraseña de cualquier usuario, generando una disrupción del servicio, se tiene que tener cuidado en auditorias.

Finalmente sabiendo la contraseña y la cuenta, para saber el ID de la cuenta o la cuenta raíz solo se toma del valor del comando aws sts get-caller-identity en el campo "Account": "12 Dígitos":

El ID (12 dígitos) de la cuenta raíz, es un valor sensible.

Con acceso al panel de administración web, es game over.

IAM:UpdateLoginPorfile

Como el anterior caso, este permiso como su nombre indica, permite cambiar la contraseña utilizada para iniciar sesión en la consola web de AWS, para cualquier usuario que ya tenga un perfil de inicio de sesión configurado.

Configuración Inicial

Usuario de entrada: privesc6-UpdateLoginProfile-user con la siguiente política:

Configurar Credenciales de acceso, ya sea creandolas desde la web como en los casos anteriores o desde un usuario administrador el siguiente comando:

aws sts assume-role --role-arn arn:aws:iam::651927172911:role/privesc6- UpdateLoginProfile-role --role-session-name privesc6

Luego copiar el Access Key y el SecretAccessKey en aws configure --profile privesc6

Explotación

Si se intenta agregar el usuario privesc6 directamente al grupo de administradores local, generar un error:

aws iam add-user-to-group --group-name Group-Root- Spartan --user-name privesc6-UpdateLoginProfile-user -- profile privesc6

Se tiene que hacer uso del permiso update-login-profile :

aws iam update-login-profile --user-name Spartan- Administrador --password Password321! --no-password- reset-required --profile privesc6

Al realizar un cambio o actualización de la contraseña de cualquier usuario, puede generar una disrupción del servicio y generar una alerta.

Finalmente ingresar por medio web como el anterior caso

IAM:AddUserToGroup

Un atacante con el permiso iam:AddUserToGroup puede utilizarlo para añadirse a un grupo IAM existente en la cuenta de AWS.

Configuración Inicial

Usuario del laboratorio: privesc13-AddUserToGroup-user

Por sí solo, este permiso no es malo, se tiene que especificar a que grupo se puede añadir usuarios ("Resource": "arn:sts:somegroup") y no dejar el permiso demasiado abierto ("Resource": "*")

Como en los caso anteriores, se tiene que crear credenciales de acceso y configurar con aws configure --profile privesc13

Explotación

La explotación de este caso es bastante sencilla, se busca enumerar los grupos existentes y proceder a añadirse a si mismo al grupo seleccionado, por ejemplo el grupo de administradores locales:

aws iam add-user-to-group --group-name Group-Root- Spartan --user-name privesc13-AddUserToGroup-user -- profile privesc13
☁️
GitHub - ramimac/aws-customer-security-incidents: A repository of breaches of AWS customersGitHub
GitHub - BishopFox/iam-vulnerable: Use Terraform to create your own vulnerable by design AWS IAM privilege escalation playground.GitHub
Lab: IAM - Vulnerable | Escenario: privesc4
GitHub - BishopFox/iam-vulnerable: Use Terraform to create your own vulnerable by design AWS IAM privilege escalation playground.GitHub
Lab: IAM - Vulnerable | Escenario: privesc5
GitHub - BishopFox/iam-vulnerable: Use Terraform to create your own vulnerable by design AWS IAM privilege escalation playground.GitHub
Lab: IAM - Vulnerable | Escenario: privesc6
GitHub - BishopFox/iam-vulnerable: Use Terraform to create your own vulnerable by design AWS IAM privilege escalation playground.GitHub
Lab: IAM - Vulnerable | Escenario: privesc13
Logo
Logo
Logo
Logo
Logo
Políticas del usuario "privesc4-CreateAccessKey-user"
Login por web con usuario comprometido
Permiso de añadir un usuario a cualquier grupo