AWS - MSK Enum

Support HackTricks

Amazon MSK

Amazon Managed Streaming for Apache Kafka (Amazon MSK) est un service entièrement géré, facilitant le développement et l'exécution d'applications traitant des données en streaming via Apache Kafka. Les opérations de contrôle, y compris la création, la mise à jour et la suppression de clusters, sont offertes par Amazon MSK. Le service permet l'utilisation des opérations de data-plane d'Apache Kafka, englobant la production et la consommation de données. Il fonctionne sur des versions open-source d'Apache Kafka, garantissant la compatibilité avec les applications, outils et plugins existants des partenaires et de la communauté Apache Kafka, éliminant ainsi le besoin de modifications dans le code de l'application.

En termes de fiabilité, Amazon MSK est conçu pour détecter et récupérer automatiquement des scénarios de défaillance de cluster courants, garantissant que les applications productrices et consommatrices continuent leurs activités d'écriture et de lecture de données avec un minimum de perturbations. De plus, il vise à optimiser les processus de réplication des données en tentant de réutiliser le stockage des brokers remplacés, minimisant ainsi le volume de données qui doit être répliqué par Apache Kafka.

Types

Il existe 2 types de clusters Kafka que AWS permet de créer : Provisionné et Sans serveur.

Du point de vue d'un attaquant, vous devez savoir que :

  • Sans serveur ne peut pas être directement public (il ne peut fonctionner que dans un VPN sans aucune IP exposée publiquement). Cependant, Provisionné peut être configuré pour obtenir une IP publique (par défaut, ce n'est pas le cas) et configurer le groupe de sécurité pour exposer les ports pertinents.

  • Sans serveur ne prend en charge que IAM comme méthode d'authentification. Provisionné prend en charge l'authentification SASL/SCRAM (mot de passe), l'authentification IAM, l'authentification AWS Certificate Manager (ACM) et l'accès non authentifié.

  • Notez qu'il n'est pas possible d'exposer publiquement un Kafka Provisionné si l'accès non authentifié est activé.

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>

Accès IAM Kafka (en mode 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

Accès non authentifié

Persistance

Si vous allez avoir accès au VPC où se trouve un Kafka Provisionné, vous pourriez activer un accès non autorisé, si l'authentification SASL/SCRAM, lisez le mot de passe à partir du secret, donnez des autres permissions IAM contrôlées (si IAM ou sans serveur utilisé) ou persistez avec des certificats.

Références

Soutenir HackTricks

Last updated