AWS - MSK Enum
Reading time: 5 minutes
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Amazon MSK
Amazon Managed Streaming for Apache Kafka (Amazon MSK) é um serviço totalmente gerenciado, facilitando o desenvolvimento e a execução de aplicações que processam dados de streaming através do Apache Kafka. Operações de controle, incluindo criação, atualização e exclusão de clusters, são oferecidas pelo Amazon MSK. O serviço permite a utilização de operações de data-plane do Apache Kafka, abrangendo produção e consumo de dados. Ele opera em versões de código aberto do Apache Kafka, garantindo compatibilidade com aplicações, ferramentas e plugins existentes, tanto de parceiros quanto da comunidade Apache Kafka, eliminando a necessidade de alterações no código da aplicação.
Em termos de confiabilidade, o Amazon MSK é projetado para detectar e recuperar automaticamente de cenários comuns de falha de cluster, garantindo que as aplicações produtoras e consumidoras continuem suas atividades de escrita e leitura de dados com mínima interrupção. Além disso, visa otimizar os processos de replicação de dados ao tentar reutilizar o armazenamento de brokers substituídos, minimizando assim o volume de dados que precisa ser replicado pelo Apache Kafka.
Tipos
Existem 2 tipos de clusters Kafka que a AWS permite criar: Provisionado e Serverless.
Do ponto de vista de um atacante, você precisa saber que:
- Serverless não pode ser publicamente acessível (pode rodar apenas em uma VPN sem nenhum IP exposto publicamente). No entanto, Provisionado pode ser configurado para obter um IP público (por padrão, não obtém) e configurar o grupo de segurança para expor as portas relevantes.
- Serverless suporta apenas IAM como método de autenticação. Provisionado suporta autenticação SASL/SCRAM (senha), autenticação IAM, autenticação do AWS Certificate Manager (ACM) e acesso não autenticado.
- Observe que não é possível expor publicamente um Kafka Provisionado se o acesso não autenticado estiver habilitado.
Enumeração
#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>
Acesso IAM do Kafka (em 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
Acesso Não Autenticado
AWS - MSK Unauthenticated Enum
Persistência
Se você tiver acesso ao VPC onde um Kafka Provisionado está, você poderia habilitar acesso não autorizado, se a autenticação SASL/SCRAM, ler a senha do segredo, dar algumas outras permissões de usuário controlado IAM (se IAM ou serverless usados) ou persistir com certificados.
Referências
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.