Los investigadores de ciberseguridad han revelado una falla de seguridad que afecta el kit de desarrollo en la nube (CDK) de Amazon Web Services (AWS) y que podría haber resultado en la apropiación de una cuenta en circunstancias específicas.
“El impacto de este problema podría, en ciertos escenarios, permitir que un atacante obtenga acceso administrativo a una cuenta de AWS objetivo, lo que resultaría en una apropiación total de la cuenta”, dijo Aqua en un informe compartido con The Hacker News.
Tras la divulgación responsable el 27 de junio de 2024, los mantenedores del proyecto abordaron el problema en la versión CDK 2.149.0 lanzada en julio.
AWS CDK es un marco de desarrollo de software de código abierto para definir recursos de aplicaciones en la nube mediante Python, TypeScript o JavaScript y aprovisionarlos a través de CloudFormation.
El problema identificado por Aqua se basa en hallazgos anteriores de la empresa de seguridad en la nube sobre los recursos ocultos en AWS y cómo las convenciones de nomenclatura predefinidas para los depósitos de AWS Simple Storage Service (S3) podrían usarse como arma para orquestar ataques de Bucket Monopoly y obtener acceso a datos confidenciales.
La preparación de un entorno de AWS para su uso con el kit de desarrollo en la nube de AWS (AWS CDK) se logra mediante un proceso llamado arranque, en el que ciertos recursos de AWS se aprovisionan al entorno. Esto incluye un depósito de AWS S3, un repositorio de Amazon Elastic Container Registry (Amazon ECR) y funciones de AWS Identity and Access Management (IAM).
“Los recursos y su configuración que utiliza el CDK se definen en una plantilla de AWS CloudFormation”, según la documentación de AWS.
“Para iniciar un entorno, utilice el comando cdk bootstrap de la interfaz de línea de comandos de AWS CDK (AWS CDK CLI). La CLI de CDK recupera la plantilla y la implementa en AWS CloudFormation como una pila, conocida como pila de arranque. De forma predeterminada, la pila El nombre es CDKToolkit.”
Algunas de las funciones de IAM creadas como parte del proceso de arranque otorgan permiso para cargar y eliminar activos del depósito de S3 asociado, así como para realizar implementaciones de pila con acceso de administrador.
Aqua dijo que el patrón de nomenclatura de los roles de IAM creados por AWS CDK sigue la estructura “cdk-{Qualifier}-{Description}-{Account-ID}-{Región}”, donde cada uno de los campos se explica a continuación:
- Calificador, un valor de cadena único de nueve caracteres cuyo valor predeterminado es “hnb659fds”, aunque se puede personalizar durante la fase de arranque.
- Descripción, descripción del recurso (por ejemplo, cfn-exec-role)
- ID de cuenta, ID de cuenta de AWS del entorno
- Región, región del entorno de AWS
De manera similar, el depósito S3 creado durante el arranque sigue el patrón de nomenclatura “cdk-{Qualifier}-assets-{Account-ID}-{Región}.”
“Dado que muchos usuarios ejecutan el comando cdk bootstrap sin personalizar el calificador, el patrón de denominación del depósito S3 del depósito provisional se vuelve predecible”, dijo Aqua. “Esto se debe a que el valor predeterminado para el calificador de nombre del depósito está establecido en ‘hnb659fds’, lo que facilita anticipar el nombre del depósito”.
Con miles de instancias descubiertas en GitHub donde se usa el calificador predeterminado, esto también significa que adivinar el nombre del depósito es tan simple como encontrar el ID de la cuenta de AWS y la región en la que se implementa el CDK.
Combinando este aspecto con el hecho de que los nombres de los depósitos S3 son globalmente únicos en todas las cuentas de AWS, la laguna abre la puerta a lo que se llama S3 Bucket Namesquatting (o Bucket Sniping), lo que permite a un atacante reclamar el depósito CDK de otro usuario si no existe. ya.
Esto podría luego allanar el camino para una denegación de servicio (DoS) parcial cuando un usuario intenta iniciar el CDK con el mismo ID de cuenta y región, un escenario que podría resolverse especificando un calificador personalizado durante el inicio.
Podría ocurrir una consecuencia más grave si el CDK de la víctima tiene permiso para leer y escribir datos desde y hacia el depósito S3 controlado por el atacante, lo que hace posible alterar las plantillas de CloudFormation y ejecutar acciones maliciosas dentro de la cuenta AWS de la víctima.
“La función de implementación del servicio CloudFormation, que es la función CloudFormationExecutionRole en CDK, tiene privilegios administrativos dentro de la cuenta de forma predeterminada”, señaló Aqua.
“Esto significa que cualquier plantilla de CloudFormation escrita en el depósito S3 del atacante mediante el CDK de la víctima se implementaría más tarde con privilegios administrativos en la cuenta de la víctima. Esto permitiría al atacante crear recursos privilegiados”.
En un ataque hipotético, si un usuario hubiera iniciado el proceso de arranque del CDK en el pasado y posteriormente hubiera eliminado el depósito S3 debido a límites de cuota, un adversario podría aprovechar la situación para crear un depósito con el mismo nombre.
Esto podría causar que el CDK confíe implícitamente en el depósito no autorizado y lea/escriba plantillas de CloudFormation en él, haciéndolos susceptibles a la explotación. Sin embargo, para que esto tenga éxito, se espera que el atacante cumpla los siguientes requisitos previos:
Reclame el depósito con el nombre predecible y permita el acceso público
Cree una función Lambda que inyectará una función de administrador malicioso o una puerta trasera en un archivo de plantilla de CloudFormation determinado cada vez que se cargue en el depósito.
En la etapa final, cuando el usuario implementa el CDK mediante “cdk implementación”, el proceso no solo envía la plantilla al depósito de réplica, sino que también inyecta una función de administrador que el atacante puede asumir para, en última instancia, obtener el control de la cuenta de la víctima.
Dicho de otra manera, la cadena de ataque facilita la creación de una función de administrador en una cuenta de AWS de destino cuando se elimina un depósito CDK S3 configurado durante el proceso de arranque y se vuelve a utilizar el CDK. Desde entonces, AWS ha confirmado que aproximadamente el 1% de los usuarios de CDK eran vulnerables al vector de ataque.
La solución implementada por AWS garantiza que los activos solo se carguen en depósitos dentro de la cuenta del usuario para evitar que el CDK envíe datos a depósitos que no pertenecen a la cuenta que inició el arranque. También instó a los clientes a utilizar un calificador personalizado en lugar del predeterminado “hnb659fds”.
Dicho esto, se requiere la acción del usuario si el arranque se realizó con la versión CDK v2.148.1 o anterior, lo que requiere que actualice el CDK a la última versión y vuelva a ejecutar el comando de arranque. Como alternativa, los usuarios tienen la opción de aplicar una condición de política de IAM a la función del CDK FilePublishingRole.
Los hallazgos exigen una vez más mantener en secreto los ID de las cuentas de AWS, definir una política de IAM con alcance y evitar dar nombres predecibles a los depósitos de S3.
“En su lugar, genere hashes únicos o identificadores aleatorios por región y cuenta, e incorpórelos en los nombres de sus depósitos S3”, concluyó Aqua. “Esta estrategia ayuda a proteger contra los atacantes que reclaman preventivamente su depósito”.
La divulgación se produce cuando Symantec, propiedad de Broadcom, encontró varias aplicaciones de Android e iOS que codificaban y no cifraban credenciales de servicios en la nube para AWS y Microsoft Azure Blob Storage, poniendo en riesgo los datos de los usuarios.
Algunas de las aplicaciones infractoras incluyen Pic Stitch: Collage Maker, Crumbl, Eureka: Earn Money for Surveys, Videoshop – Video Editor, Meru Cabs, Sulekha Business y ReSound Tinnitus Relief.
“Esta práctica peligrosa significa que cualquier persona con acceso al código fuente o binario de la aplicación podría extraer estas credenciales y hacer un mal uso de ellas para manipular o filtrar datos, lo que provocaría graves violaciones de seguridad”, dijeron los investigadores de seguridad Yuanjing Guo y Tommy Dong.