AWS - MSK Enum

Support HackTricks

Amazon MSK

Amazon Managed Streaming for Apache Kafka (Amazon MSK) è un servizio completamente gestito, che facilita lo sviluppo e l'esecuzione di applicazioni che elaborano dati in streaming tramite Apache Kafka. Le operazioni del piano di controllo, inclusa la creazione, l'aggiornamento e la cancellazione di cluster, sono offerte da Amazon MSK. Il servizio consente l'utilizzo delle operazioni del piano dati di Apache Kafka, comprendenti la produzione e il consumo di dati. Funziona su versioni open-source di Apache Kafka, garantendo compatibilità con applicazioni, strumenti e plugin esistenti sia da partner che dalla comunità Apache Kafka, eliminando la necessità di modifiche nel codice dell'applicazione.

In termini di affidabilità, Amazon MSK è progettato per rilevare automaticamente e recuperare da scenari di guasto del cluster prevalenti, garantendo che le applicazioni di produttori e consumatori continuino le loro attività di scrittura e lettura dei dati con interruzioni minime. Inoltre, mira a ottimizzare i processi di replicazione dei dati cercando di riutilizzare lo storage dei broker sostituiti, riducendo così il volume di dati che devono essere replicati da Apache Kafka.

Types

Ci sono 2 tipi di cluster Kafka che AWS consente di creare: Provisioned e Serverless.

Dal punto di vista di un attaccante, è necessario sapere che:

  • Serverless non può essere direttamente pubblico (può funzionare solo in una VPN senza alcun IP esposto pubblicamente). Tuttavia, Provisioned può essere configurato per ottenere un IP pubblico (di default non lo fa) e configurare il gruppo di sicurezza per esporre le porte rilevanti.

  • Serverless supporta solo IAM come metodo di autenticazione. Provisioned supporta l'autenticazione SASL/SCRAM (password), l'autenticazione IAM, l'autenticazione di AWS Certificate Manager (ACM) e l'accesso non autenticato.

  • Si noti che non è possibile esporre pubblicamente un Kafka Provisioned se l'accesso non autenticato è abilitato.

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>

Accesso IAM Kafka (in 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

Accesso non autenticato

Persistenza

Se hai accesso alla VPC dove si trova un Kafka Provisioned, potresti abilitare l'accesso non autorizzato, se l'autenticazione SASL/SCRAM, leggi la password dal segreto, dare alcune altre autorizzazioni IAM controllate (se utilizzato IAM o serverless) o persistere con certificati.

Riferimenti

Support HackTricks

Last updated