AWS - MSK Enum

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert Red Team AWS de HackTricks)!

Autres façons de soutenir HackTricks :

Amazon MSK

Amazon Managed Streaming for Apache Kafka (Amazon MSK) est un service entièrement géré qui facilite le développement et l'exécution d'applications traitant des données en continu via Apache Kafka. Les opérations de plan de contrôle, y compris la création, la mise à jour et la suppression de clusters, sont proposées par Amazon MSK. Le service permet l'utilisation des opérations de plan de données Apache Kafka, comprenant la production et la consommation de données. Il fonctionne sur des versions open-source d'Apache Kafka, assurant la compatibilité avec les applications existantes, les outils et les plugins 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 automatiquement et récupérer 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 une perturbation minimale. De plus, il vise à optimiser les processus de réplication des données en tentant de réutiliser le stockage des courtiers remplacés, minimisant ainsi le volume de données à répliquer par Apache Kafka.

Types

Il existe 2 types de clusters Kafka que AWS permet de créer : Provisioned et Serverless.

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

  • Serverless ne peut pas être directement public (il ne peut fonctionner que dans un VPN sans aucune IP exposée publiquement). Cependant, Provisioned 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.

  • Serverless prend en charge uniquement IAM comme méthode d'authentification. Provisioned prend en charge l'authentification SASL/SCRAM (mot de passe), l'authentification IAM, l'authentification du gestionnaire de certificats AWS (ACM) et l'accès non authentifié.

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

Énumération

#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 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

Élévation de privilèges

pageAWS - MSK Privesc

Accès non authentifié

pageAWS - MSK Unauthenticated Enum

Persistance

Si vous avez accès au VPC où se trouve un Kafka provisionné, vous pourriez activer l'accès non autorisé, si l'authentification SASL/SCRAM, lire le mot de passe depuis le secret, donner quelques autorisations IAM à un autre utilisateur contrôlé (si IAM ou serverless est utilisé) ou persister avec des certificats.

Références

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks :

Dernière mise à jour