O endpoint **metadata** pode ser acessado de dentro de qualquer máquina EC2 e oferece informações interessantes sobre ela. É acessível na URL: `http://169.254.169.254` ([informações sobre o metadata aqui](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)).
Existem **2 versões** do endpoint metadata. A **primeira** permite **acessar** o endpoint via requisições **GET** (então qualquer **SSRF pode explorá-lo**). Para a **versão 2**, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), você precisa solicitar um **token** enviando uma requisição **PUT** com um **HTTP header** e, em seguida, usar esse token para acessar o metadata com outro HTTP header (então é **mais complicado de explorar** com um SSRF).
Na **versão 2**, o **TTL por padrão é 1**. Isso garante que dispositivos de rede mal configurados (firewalls, dispositivos NAT, roteadores, etc.) não encaminhem o pacote. Isso também significa que **contêineres Docker** usando a configuração de rede padrão (modo bridge) **não poderão acessar** o serviço de metadados da instância.\
**IMDSv2** também **bloqueará solicitações para buscar um token que inclua o cabeçalho `X-Forwarded-For`**. Isso é para impedir que proxies reversos mal configurados possam acessá-lo.
Você pode encontrar informações sobre os [endpoints de metadados na documentação](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). No seguinte script, algumas informações interessantes são obtidas a partir dele:
Como exemplo de credenciais IAM disponíveis publicamente, você pode visitar: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws)
Você também pode verificar as credenciais de segurança **públicas do EC2** em: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance)
O **ECS** é um grupo lógico de instâncias EC2 em que você pode executar um aplicativo sem precisar dimensionar sua própria infraestrutura de gerenciamento de cluster, porque o ECS gerencia isso para você. Se você conseguir comprometer o serviço em execução no **ECS**, os **pontos de extremidade de metadados mudam**.
Se você acessar _**http://169.254.170.2/v2/credentials/\<GUID>**_, encontrará as credenciais da máquina ECS. Mas primeiro você precisa **encontrar o \<GUID>**. Para encontrar o \<GUID>, você precisa ler a variável **environ****AWS\_CONTAINER\_CREDENTIALS\_RELATIVE\_URI** dentro da máquina.\
Você pode ser capaz de lê-lo explorando uma **Travessia de Caminho** para `file:///proc/self/environ`\
O endereço http mencionado deve fornecer a **AccessKey, SecretKey e token**.
Note que em **alguns casos** você poderá acessar a **instância de metadados EC2** do contêiner (verifique as limitações de TTL do IMDSv2 mencionadas anteriormente). Nesses cenários, a partir do contêiner, você pode acessar tanto a função IAM do contêiner quanto a função IAM do EC2.
Neste caso, as **credenciais são armazenadas em variáveis de ambiente**. Portanto, para acessá-las, você precisa acessar algo como **`file:///proc/self/environ`**.
Além disso, além das credenciais IAM, as funções Lambda também possuem **dados de evento que são passados para a função quando ela é iniciada**. Esses dados são disponibilizados para a função por meio da [interface de tempo de execução](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html) e podem conter **informações sensíveis** (como dentro das **stageVariables**). Ao contrário das credenciais IAM, esses dados são acessíveis por SSRF padrão em **`http://localhost:9001/2018-06-01/runtime/invocation/next`**.
Observe que as **credenciais lambda** estão dentro das **variáveis de ambiente**. Portanto, se o **rastreamento de pilha** do código lambda imprimir variáveis de ambiente, é possível **exfiltrá-las provocando um erro** no aplicativo.
Você pode [**encontrar aqui a documentação sobre pontos de extremidade de metadados**](https://cloud.google.com/appengine/docs/standard/java/accessing-instance-metadata).
Requer o cabeçalho "Metadata-Flavor: Google" ou "X-Google-Metadata-Request: True" e você pode acessar o ponto de extremidade de metadados com as seguintes URLs:
Documentação disponível em [`https://developers.digitalocean.com/documentation/metadata/`](https://developers.digitalocean.com/documentation/metadata/)
A maneira mais comum de explorar SSRF em AWS é acessando os metadados do EC2. Para isso, basta fazer uma requisição para `http://169.254.169.254/latest/meta-data/` e ver quais informações estão disponíveis.
#### Acessando credenciais
Se o servidor EC2 tiver permissões para acessar outros serviços AWS, é possível acessar as credenciais do IAM do servidor. Para isso, basta fazer uma requisição para `http://169.254.169.254/latest/meta-data/iam/security-credentials/` e ver qual é o nome do perfil de segurança. Em seguida, faça uma requisição para `http://169.254.169.254/latest/meta-data/iam/security-credentials/<profile_name>` para obter as credenciais.
#### Acessando chaves de criptografia
Se o servidor EC2 tiver permissões para acessar o serviço KMS, é possível acessar as chaves de criptografia. Para isso, basta fazer uma requisição para `http://169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/` e ver qual é o nome do perfil de segurança. Em seguida, faça uma requisição para `http://169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/<profile_name>` para obter as chaves de criptografia.
### SSRF em GCP
#### Descobrindo metadados
A maneira mais comum de explorar SSRF em GCP é acessando os metadados do Compute Engine. Para isso, basta fazer uma requisição para `http://metadata.google.internal/computeMetadata/v1/` e ver quais informações estão disponíveis.
#### Acessando credenciais
Se o servidor Compute Engine tiver permissões para acessar outros serviços GCP, é possível acessar as credenciais do IAM do servidor. Para isso, basta fazer uma requisição para `http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token` e obter o token de acesso. Em seguida, use o token para fazer uma requisição para a API do serviço desejado.
#### Acessando chaves de criptografia
Se o servidor Compute Engine tiver permissões para acessar o serviço Cloud KMS, é possível acessar as chaves de criptografia. Para isso, basta fazer uma requisição para `http://metadata.google.internal/computeMetadata/v1/instance/attributes/` e ver quais atributos estão disponíveis. Em seguida, faça uma requisição para `http://metadata.google.internal/computeMetadata/v1/instance/attributes/<attribute_name>` para obter as chaves de criptografia.
A partir do **env** você pode obter os valores de `IDENTITY_HEADER`_e_`IDENTITY_ENDPOINT`. Isso pode ser usado para obter um token para se comunicar com o servidor de metadados.
Observe que na IBM, por padrão, os metadados não estão habilitados, portanto, é possível que você não consiga acessá-los mesmo se estiver dentro de uma VM da IBM Cloud.
HP Helion é uma plataforma de nuvem que fornece serviços de infraestrutura como serviço (IaaS) e plataforma como serviço (PaaS). Ele permite que os usuários criem, implementem e gerenciem aplicativos em nuvem.
O HP Helion é vulnerável a SSRF. Um invasor pode explorar essa vulnerabilidade para enviar solicitações HTTP para recursos internos, como o serviço de metadados do EC2, que podem resultar em vazamento de informações confidenciais ou comprometimento do servidor.
O Oracle Cloud é uma plataforma de computação em nuvem oferecida pela Oracle Corporation. Ele fornece serviços de infraestrutura como serviço (IaaS), plataforma como serviço (PaaS), software como serviço (SaaS) e data as a service (DaaS). O Oracle Cloud permite que os usuários criem, implementem e gerenciem aplicativos em uma infraestrutura de nuvem segura e escalável.
### SSRF no Oracle Cloud
O Oracle Cloud é vulnerável a SSRF em vários serviços, incluindo o Oracle Functions, o Oracle Container Engine for Kubernetes (OKE) e o Oracle Cloud Infrastructure (OCI). Essas vulnerabilidades podem ser exploradas para acessar recursos internos, como metadados de instância, credenciais de serviço e arquivos de configuração.
Para explorar essas vulnerabilidades, um invasor pode enviar uma solicitação HTTP maliciosa para um serviço vulnerável, fazendo com que o servidor execute a solicitação em seu nome. Isso pode permitir que o invasor acesse recursos internos que normalmente não seriam acessíveis a partir da Internet.
Os invasores também podem usar SSRF para atacar outros sistemas na rede interna do Oracle Cloud. Por exemplo, um invasor pode explorar uma vulnerabilidade SSRF no Oracle Functions para acessar um servidor de banco de dados interno e extrair dados confidenciais.
Para mitigar essas vulnerabilidades, os usuários do Oracle Cloud devem implementar controles de segurança adequados, como filtragem de entrada e saída, autenticação forte e monitoramento de rede. Além disso, os usuários devem manter seus sistemas atualizados com as últimas correções de segurança e seguir as práticas recomendadas de segurança da Oracle.
Alibaba é uma plataforma de nuvem chinesa que oferece serviços de computação em nuvem, armazenamento em nuvem e banco de dados em nuvem. A plataforma é usada principalmente na China e no sudeste asiático. A Alibaba Cloud oferece uma ampla gama de serviços, incluindo computação, armazenamento, banco de dados, rede, segurança, análise de dados, inteligência artificial e Internet das coisas (IoT). A plataforma é conhecida por sua escalabilidade, confiabilidade e segurança. No entanto, como em qualquer plataforma em nuvem, existem riscos de segurança, como SSRF, que os testadores de penetração devem estar cientes.
Docker é uma plataforma de software que permite criar, testar e implantar aplicativos rapidamente. Ele empacota um aplicativo e todas as suas dependências em um contêiner virtual que pode ser executado em qualquer sistema operacional. O Docker é amplamente utilizado em ambientes de desenvolvimento e produção para simplificar o processo de implantação de aplicativos. No entanto, o Docker também pode ser usado para explorar vulnerabilidades de SSRF em aplicativos em contêiner.
Rancher é uma plataforma de gerenciamento de contêineres que permite implantar e gerenciar facilmente contêineres em um ambiente de produção. Ele suporta várias orquestradores de contêineres, como Kubernetes, Docker Swarm e Mesos. O Rancher também oferece recursos de segurança, como autenticação de usuário, gerenciamento de certificados e políticas de rede.
No entanto, o Rancher também pode ser vulnerável a SSRF se não for configurado corretamente. Por exemplo, se o Rancher estiver sendo executado em um servidor com uma interface de rede pública, um invasor pode explorar uma SSRF para acessar recursos internos da rede. Além disso, o Rancher permite que os usuários implantem contêineres em qualquer host registrado, o que pode levar a uma SSRF se um host malicioso for adicionado à plataforma.
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).