AWS - MSK Enum

Support 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. Las operaciones del plano de control, incluyendo la creación, actualización y eliminación de clusters, son ofrecidas por Amazon MSK. El servicio permite la utilización de operaciones del plano de datos de Apache Kafka, abarcando la producción y consumo de datos. Funciona con versiones de código abierto de Apache Kafka, asegurando la compatibilidad con aplicaciones, herramientas y complementos existentes tanto de socios como de la comunidad de Apache Kafka, eliminando la necesidad de alteraciones en el código de la aplicación.

En términos de fiabilidad, Amazon MSK está diseñado para detectar y recuperarse automáticamente de escenarios comunes de fallos en clusters, asegurando que las aplicaciones de productores y consumidores continúen con sus actividades de escritura y lectura de datos con mínima interrupción. Además, busca 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

Hay 2 tipos de clusters de Kafka que AWS permite crear: Provisionados y Sin Servidor.

Desde el punto de vista de un atacante, necesitas saber que:

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

  • Sin Servidor solo soporta IAM como método de autenticación. Provisionado soporta autenticación SASL/SCRAM (contraseña), autenticación IAM, autenticación de AWS Certificate Manager (ACM) y acceso no autenticado.

  • Ten en cuenta que no es posible exponer públicamente un Kafka Provisionado si el acceso no autenticado está habilitado.

Enumeration

#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

Privesc

AWS - MSK Privesc

Acceso No Autenticado

AWS - MSK Unauthenticated Enum

Persistencia

Si vas a tener acceso a la VPC donde se encuentra un Kafka Provisionado, podrías habilitar acceso no autorizado, si la autenticación SASL/SCRAM, lees la contraseña del secreto, das algunos otros permisos IAM controlados a usuarios (si se usa IAM o serverless) o persistes con certificados.

Referencias

Apoya a HackTricks

Last updated