AWS - MSK Enum

Aprende hacking en AWS desde cero hasta experto con htARTE (Experto en Red Team de HackTricks en AWS)!

Otras formas de apoyar a HackTricks:

Amazon MSK

Amazon Managed Streaming for Apache Kafka (Amazon MSK) es un servicio completamente gestionado que facilita el desarrollo y la ejecución de aplicaciones que procesan datos en streaming a través de Apache Kafka. Amazon MSK ofrece operaciones de plano de control, incluyendo la creación, actualización y eliminación de clústeres. El servicio permite la utilización de operaciones de plano de datos de Apache Kafka, abarcando la producción y consumo de datos. Opera en versiones de código abierto de Apache Kafka, asegurando la compatibilidad con aplicaciones existentes, herramientas y complementos tanto de socios como de la comunidad de Apache Kafka, eliminando la necesidad de realizar modificaciones en el código de la aplicación.

En cuanto a la fiabilidad, Amazon MSK está diseñado para detectar y recuperarse automáticamente de escenarios de fallo comunes en clústeres, garantizando que las aplicaciones productoras y consumidoras continúen con sus actividades de escritura y lectura de datos con interrupciones mínimas. Además, tiene como objetivo optimizar los procesos de replicación de datos al intentar reutilizar el almacenamiento de brokers reemplazados, minimizando así el volumen de datos que necesita ser replicado por Apache Kafka.

Tipos

Existen 2 tipos de clústeres de Kafka que AWS permite crear: Provisioned y Serverless.

Desde el punto de vista de un atacante, es importante saber que:

  • Serverless no puede ser directamente público (solo puede ejecutarse en una VPN sin ninguna IP expuesta públicamente). Sin embargo, Provisioned se puede configurar para obtener una IP pública (por defecto no la tiene) y configurar el grupo de seguridad para exponer los puertos relevantes.

  • Serverless solo admite IAM como método de autenticación. Provisioned admite autenticación SASL/SCRAM (contraseña), autenticación IAM, Autenticación del Administrador de Certificados de AWS (ACM) y acceso sin autenticación.

  • Es importante tener en cuenta que no es posible exponer públicamente un Kafka Provisioned si se habilita el acceso sin autenticación.

Enumeración

#Get clusters
aws kafka list-clusters
aws kafka list-clusters-v2

# Check the supported authentication
aws kafka list-clusters |  jq -r ".ClusterInfoList[].ClientAuthentication"

# Get Zookeeper endpoints
aws kafka list-clusters | jq -r ".ClusterInfoList[].ZookeeperConnectString, .ClusterInfoList[].ZookeeperConnectStringTls"

# Get nodes and node enspoints
aws kafka kafka list-nodes --cluster-arn <cluster-arn>
aws kafka kafka list-nodes --cluster-arn <cluster-arn> | jq -r ".NodeInfoList[].BrokerNodeInfo.Endpoints" # Get endpoints

# Get used kafka configs
aws kafka list-configurations #Get Kafka config file
aws kafka describe-configuration --arn <config-arn> # Get version of config
aws kafka describe-configuration-revision --arn <config-arn> --revision <version> # Get content of config version

# If using SCRAN authentication, get used AWS secret name (not secret value)
aws kafka list-scram-secrets --cluster-arn <cluster-arn>

Acceso IAM de Kafka (en serverless)

# Guide from https://docs.aws.amazon.com/msk/latest/developerguide/create-serverless-cluster.html
# Download Kafka
wget https://archive.apache.org/dist/kafka/2.8.1/kafka_2.12-2.8.1.tgz
tar -xzf kafka_2.12-2.8.1.tgz

# In kafka_2.12-2.8.1/libs download the MSK IAM JAR file.
cd kafka_2.12-2.8.1/libs
wget https://github.com/aws/aws-msk-iam-auth/releases/download/v1.1.1/aws-msk-iam-auth-1.1.1-all.jar

# Create file client.properties in kafka_2.12-2.8.1/bin
security.protocol=SASL_SSL
sasl.mechanism=AWS_MSK_IAM
sasl.jaas.config=software.amazon.msk.auth.iam.IAMLoginModule required;
sasl.client.callback.handler.class=software.amazon.msk.auth.iam.IAMClientCallbackHandler

# Export endpoints address
export BS=boot-ok2ngypz.c2.kafka-serverless.us-east-1.amazonaws.com:9098
## Make sure you will be able to access the port 9098 from the EC2 instance (check VPS, subnets and SG)

# Create a topic called msk-serverless-tutorial
kafka_2.12-2.8.1/bin/kafka-topics.sh --bootstrap-server $BS --command-config client.properties --create --topic msk-serverless-tutorial --partitions 6

# Send message of every new line
kafka_2.12-2.8.1/bin/kafka-console-producer.sh --broker-list $BS --producer.config client.properties --topic msk-serverless-tutorial

# Read messages
kafka_2.12-2.8.1/bin/kafka-console-consumer.sh --bootstrap-server $BS --consumer.config client.properties --topic msk-serverless-tutorial --from-beginning

Escalada de privilegios

pageAWS - MSK Privesc

Acceso no autenticado

pageAWS - MSK Unauthenticated Enum

Persistencia

Si vas a tener acceso al VPC donde se encuentra un Kafka Provisionado, podrías habilitar el acceso no autorizado, si la autenticación SASL/SCRAM, lee la contraseña desde el secreto, otorga algunos otros permisos IAM controlados (si se usa IAM o serverless) o persiste con certificados.

Referencias

Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización