AWS - MSK Enum

Support HackTricks

Amazon MSK

Amazon Managed Streaming for Apache Kafka (Amazon MSK) to usługa, która jest w pełni zarządzana, ułatwiająca rozwój i realizację aplikacji przetwarzających dane strumieniowe za pomocą Apache Kafka. Operacje w płaszczyźnie kontrolnej, w tym tworzenie, aktualizacja i usuwanie klastrów, są oferowane przez Amazon MSK. Usługa pozwala na wykorzystanie operacji w płaszczyźnie danych Apache Kafka, obejmujących produkcję i konsumpcję danych. Działa na otwartych wersjach Apache Kafka, zapewniając zgodność z istniejącymi aplikacjami, narzędziami i wtyczkami zarówno od partnerów, jak i społeczności Apache Kafka, eliminując potrzebę wprowadzania zmian w kodzie aplikacji.

Pod względem niezawodności, Amazon MSK jest zaprojektowany do automatycznego wykrywania i odzyskiwania z powszechnych scenariuszy awarii klastra, zapewniając, że aplikacje producentów i konsumentów kontynuują swoje działania związane z zapisywaniem i odczytywaniem danych z minimalnymi zakłóceniami. Ponadto ma na celu optymalizację procesów replikacji danych, starając się ponownie wykorzystać pamięć masową zastąpionych brokerów, co minimalizuje ilość danych, które muszą być replikowane przez Apache Kafka.

Typy

Istnieją 2 typy klastrów Kafka, które AWS pozwala tworzyć: Provisioned i Serverless.

Z punktu widzenia atakującego musisz wiedzieć, że:

  • Serverless nie może być bezpośrednio publiczny (może działać tylko w VPN bez publicznie wystawionego IP). Jednak Provisioned może być skonfigurowany do uzyskania publicznego IP (domyślnie tego nie robi) i skonfigurowania grupy zabezpieczeń w celu wystawienia odpowiednich portów.

  • Serverless obsługuje tylko IAM jako metodę uwierzytelniania. Provisioned obsługuje uwierzytelnianie SASL/SCRAM (hasło), uwierzytelnianie IAM, uwierzytelnianie AWS Certificate Manager (ACM) oraz dostęp nieautoryzowany.

  • Zauważ, że nie jest możliwe publiczne wystawienie Provisioned Kafka, jeśli dostęp nieautoryzowany jest włączony.

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>

Kafka IAM Access (w 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

Unauthenticated Access

AWS - MSK Unauthenticated Enum

Persistence

Jeśli masz dostęp do VPC, w którym znajduje się Provisioned Kafka, możesz włączyć nieautoryzowany dostęp, jeśli uwierzytelnianie SASL/SCRAM, odczytasz hasło z sekretu, przyznasz inne kontrolowane uprawnienia IAM (jeśli użyto IAM lub serverless) lub utrzymasz się przy certyfikatach.

References

Support HackTricks

Last updated