mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-04 19:11:41 -08:00
Translated ['src/banners/hacktricks-training.md', 'src/pentesting-ci-cd/
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
|
||||
## Vazamentos de Credenciais AWS
|
||||
|
||||
Uma maneira comum de obter acesso ou informações sobre uma conta AWS é **procurando por vazamentos**. Você pode procurar por vazamentos usando **google dorks**, verificando os **repositórios públicos** da **organização** e dos **trabalhadores** da organização no **Github** ou em outras plataformas, pesquisando em **bancos de dados de vazamentos de credenciais**... ou em qualquer outra parte que você acha que pode encontrar alguma informação sobre a empresa e sua infraestrutura em nuvem.\
|
||||
Uma maneira comum de obter acesso ou informações sobre uma conta AWS é **procurando por vazamentos**. Você pode procurar por vazamentos usando **google dorks**, verificando os **repositórios públicos** da **organização** e dos **trabalhadores** da organização no **Github** ou em outras plataformas, pesquisando em **bancos de dados de vazamentos de credenciais**... ou em qualquer outra parte que você acha que pode encontrar informações sobre a empresa e sua infraestrutura em nuvem.\
|
||||
Algumas **ferramentas** úteis:
|
||||
|
||||
- [https://github.com/carlospolop/leakos](https://github.com/carlospolop/leakos)
|
||||
@@ -15,24 +15,24 @@ Algumas **ferramentas** úteis:
|
||||
|
||||
Existem vários serviços na AWS que podem ser configurados dando algum tipo de acesso a toda a Internet ou a mais pessoas do que o esperado. Confira aqui como:
|
||||
|
||||
- [**Enumeração Não Autenticada de Contas**](aws-accounts-unauthenticated-enum.md)
|
||||
- [**Enumeração Não Autenticada do Cloud9**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/broken-reference/README.md)
|
||||
- [**Enumeração Não Autenticada do Cloudfront**](aws-cloudfront-unauthenticated-enum.md)
|
||||
- [**Enumeração Não Autenticada do Cloudsearch**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/broken-reference/README.md)
|
||||
- [**Enumeração Não Autenticada do Cognito**](aws-cognito-unauthenticated-enum.md)
|
||||
- [**Enumeração Não Autenticada do DocumentDB**](aws-documentdb-enum.md)
|
||||
- [**Enumeração Não Autenticada do EC2**](aws-ec2-unauthenticated-enum.md)
|
||||
- [**Enumeração Não Autenticada do Elasticsearch**](aws-elasticsearch-unauthenticated-enum.md)
|
||||
- [**Enumeração Não Autenticada do IAM**](aws-iam-and-sts-unauthenticated-enum.md)
|
||||
- [**Acesso Não Autenticado do IoT**](aws-iot-unauthenticated-enum.md)
|
||||
- [**Acesso Não Autenticado do Kinesis Video**](aws-kinesis-video-unauthenticated-enum.md)
|
||||
- [**Acesso Não Autenticado de Mídia**](aws-media-unauthenticated-enum.md)
|
||||
- [**Acesso Não Autenticado do MQ**](aws-mq-unauthenticated-enum.md)
|
||||
- [**Acesso Não Autenticado do MSK**](aws-msk-unauthenticated-enum.md)
|
||||
- [**Acesso Não Autenticado do RDS**](aws-rds-unauthenticated-enum.md)
|
||||
- [**Acesso Não Autenticado do Redshift**](aws-redshift-unauthenticated-enum.md)
|
||||
- [**Acesso Não Autenticado do SQS**](aws-sqs-unauthenticated-enum.md)
|
||||
- [**Acesso Não Autenticado do S3**](aws-s3-unauthenticated-enum.md)
|
||||
- [**Enumeração de Contas Não Autenticadas**](aws-accounts-unauthenticated-enum.md)
|
||||
- [**Enumeração Cloud9 Não Autenticada**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/broken-reference/README.md)
|
||||
- [**Enumeração Cloudfront Não Autenticada**](aws-cloudfront-unauthenticated-enum.md)
|
||||
- [**Enumeração Cloudsearch Não Autenticada**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/broken-reference/README.md)
|
||||
- [**Enumeração Cognito Não Autenticada**](aws-cognito-unauthenticated-enum.md)
|
||||
- [**Enumeração DocumentDB Não Autenticada**](aws-documentdb-enum.md)
|
||||
- [**Enumeração EC2 Não Autenticada**](aws-ec2-unauthenticated-enum.md)
|
||||
- [**Enumeração Elasticsearch Não Autenticada**](aws-elasticsearch-unauthenticated-enum.md)
|
||||
- [**Enumeração IAM Não Autenticada**](aws-iam-and-sts-unauthenticated-enum.md)
|
||||
- [**Acesso IoT Não Autenticado**](aws-iot-unauthenticated-enum.md)
|
||||
- [**Acesso Kinesis Video Não Autenticado**](aws-kinesis-video-unauthenticated-enum.md)
|
||||
- [**Acesso de Mídia Não Autenticado**](aws-media-unauthenticated-enum.md)
|
||||
- [**Acesso MQ Não Autenticado**](aws-mq-unauthenticated-enum.md)
|
||||
- [**Acesso MSK Não Autenticado**](aws-msk-unauthenticated-enum.md)
|
||||
- [**Acesso RDS Não Autenticado**](aws-rds-unauthenticated-enum.md)
|
||||
- [**Acesso Redshift Não Autenticado**](aws-redshift-unauthenticated-enum.md)
|
||||
- [**Acesso SQS Não Autenticado**](aws-sqs-unauthenticated-enum.md)
|
||||
- [**Acesso S3 Não Autenticado**](aws-s3-unauthenticated-enum.md)
|
||||
|
||||
## Ataques entre Contas
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# AWS - Accounts Unauthenticated Enum
|
||||
# AWS - Enumeração de Contas Não Autenticadas
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## IDs de Conta
|
||||
|
||||
Se você tiver um alvo, existem maneiras de tentar identificar os IDs de conta de contas relacionadas ao alvo.
|
||||
Se você tem um alvo, existem maneiras de tentar identificar os IDs de conta relacionados ao alvo.
|
||||
|
||||
### Força Bruta
|
||||
|
||||
@@ -24,17 +24,17 @@ Procure por URLs que contenham `<alias>.signin.aws.amazon.com` com um **alias re
|
||||
|
||||
### Marketplace
|
||||
|
||||
Se um vendedor tiver **instâncias no marketplace,** você pode obter o id do proprietário (id da conta) da conta AWS que ele usou.
|
||||
Se um fornecedor tiver **instâncias no marketplace,** você pode obter o id do proprietário (id da conta) da conta AWS que ele usou.
|
||||
|
||||
### Snapshots
|
||||
|
||||
- Snapshots públicos do EBS (EC2 -> Snapshots -> Public Snapshots)
|
||||
- Snapshots EBS públicos (EC2 -> Snapshots -> Public Snapshots)
|
||||
- Snapshots públicos do RDS (RDS -> Snapshots -> All Public Snapshots)
|
||||
- AMIs públicas (EC2 -> AMIs -> Public images)
|
||||
|
||||
### Erros
|
||||
|
||||
Muitas mensagens de erro da AWS (mesmo acesso negado) fornecerão essa informação.
|
||||
Muitas mensagens de erro da AWS (mesmo acesso negado) fornecerão essas informações.
|
||||
|
||||
## Referências
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
### Bypass de Invocação da API
|
||||
|
||||
De acordo com a palestra [Vetores de Ataque para APIs Usando AWS API Gateway Lambda Authorizers - Alexandre & Leonardo](https://www.youtube.com/watch?v=bsPKk7WDOnE), os Lambda Authorizers podem ser configurados **usando a sintaxe IAM** para conceder permissões para invocar endpoints da API. Isso é retirado [**da documentação**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html):
|
||||
De acordo com a palestra [Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo](https://www.youtube.com/watch?v=bsPKk7WDOnE), os Lambda Authorizers podem ser configurados **usando a sintaxe IAM** para conceder permissões para invocar endpoints da API. Isso é retirado [**da documentação**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html):
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
@@ -28,15 +28,15 @@ Alguns exemplos:
|
||||
> [!WARNING]
|
||||
> Note que **"\*" não para de se expandir com barras**, portanto, se você usar "\*" em api-id, por exemplo, isso também pode indicar "qualquer estágio" ou "qualquer método", desde que a regex final ainda seja válida.\
|
||||
> Assim, `arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/*`\
|
||||
> Pode validar uma solicitação POST para o estágio de teste no caminho `/prod/GET/dashboard/admin`, por exemplo.
|
||||
> Pode validar uma solicitação POST para o estágio de teste para o caminho `/prod/GET/dashboard/admin`, por exemplo.
|
||||
|
||||
Você deve sempre ter claro o que deseja permitir o acesso e, em seguida, verificar se outros cenários são possíveis com as permissões concedidas.
|
||||
|
||||
Para mais informações, além da [**docs**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html), você pode encontrar código para implementar autorizadores na [**este github oficial da aws**](https://github.com/awslabs/aws-apigateway-lambda-authorizer-blueprints/tree/master/blueprints).
|
||||
Para mais informações, além da [**docs**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html), você pode encontrar código para implementar autorizadores [**neste github oficial da aws**](https://github.com/awslabs/aws-apigateway-lambda-authorizer-blueprints/tree/master/blueprints).
|
||||
|
||||
### Injeção de Política IAM
|
||||
|
||||
Na mesma [**palestra**](https://www.youtube.com/watch?v=bsPKk7WDOnE), é exposto o fato de que, se o código estiver usando **entrada do usuário** para **gerar as políticas IAM**, curingas (e outros, como "." ou strings específicas) podem ser incluídos com o objetivo de **contornar restrições**.
|
||||
Na mesma [**palestra**](https://www.youtube.com/watch?v=bsPKk7WDOnE), é exposto o fato de que, se o código estiver usando **entrada do usuário** para **gerar as políticas IAM**, curingas (e outros como "." ou strings específicas) podem ser incluídos com o objetivo de **contornar restrições**.
|
||||
|
||||
### Modelo de URL Pública
|
||||
```
|
||||
|
||||
@@ -12,7 +12,7 @@ Para mais informações, consulte esta página:
|
||||
|
||||
### buildspec.yml
|
||||
|
||||
Se você comprometer o acesso de escrita a um repositório contendo um arquivo chamado **`buildspec.yml`**, você poderia **backdoor** este arquivo, que especifica os **comandos que serão executados** dentro de um projeto CodeBuild e exfiltrar os segredos, comprometer o que é feito e também comprometer as **credenciais do papel IAM do CodeBuild**.
|
||||
Se você comprometer o acesso de escrita a um repositório contendo um arquivo chamado **`buildspec.yml`**, você poderia **injetar um backdoor** neste arquivo, que especifica os **comandos que serão executados** dentro de um projeto CodeBuild e exfiltrar os segredos, comprometer o que é feito e também comprometer as **credenciais do papel IAM do CodeBuild**.
|
||||
|
||||
Observe que mesmo que não haja nenhum arquivo **`buildspec.yml`**, mas você saiba que o Codebuild está sendo usado (ou um CI/CD diferente), **modificar algum código legítimo** que será executado também pode te dar um shell reverso, por exemplo.
|
||||
|
||||
@@ -24,10 +24,10 @@ Para algumas informações relacionadas, você pode consultar a página sobre co
|
||||
|
||||
## Runners do GitHub Actions auto-hospedados no AWS CodeBuild <a href="#action-runner" id="action-runner"></a>
|
||||
|
||||
Como [**indicado na documentação**](https://docs.aws.amazon.com/codebuild/latest/userguide/action-runner.html), é possível configurar o **CodeBuild** para executar **ações do Github auto-hospedadas** quando um fluxo de trabalho é acionado dentro de um repositório Github configurado. Isso pode ser detectado verificando a configuração do projeto CodeBuild, pois o **`Tipo de evento`** precisa conter: **`WORKFLOW_JOB_QUEUED`** e em um Fluxo de Trabalho do Github, porque ele selecionará um runner **auto-hospedado** assim:
|
||||
Como [**indicado na documentação**](https://docs.aws.amazon.com/codebuild/latest/userguide/action-runner.html), é possível configurar o **CodeBuild** para executar **ações do Github auto-hospedadas** quando um fluxo de trabalho é acionado dentro de um repositório Github configurado. Isso pode ser detectado verificando a configuração do projeto CodeBuild, pois o **`Tipo de evento`** precisa conter: **`WORKFLOW_JOB_QUEUED`** e em um Fluxo de Trabalho do Github porque ele selecionará um runner **auto-hospedado** assim:
|
||||
```bash
|
||||
runs-on: codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }}
|
||||
```
|
||||
Esta nova relação entre Github Actions e AWS cria outra maneira de comprometer a AWS a partir do Github, já que o código no Github será executado em um projeto CodeBuild com um papel IAM anexado.
|
||||
Esse novo relacionamento entre Github Actions e AWS cria outra maneira de comprometer a AWS a partir do Github, já que o código no Github estará sendo executado em um projeto CodeBuild com um papel IAM anexado.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# AWS - Cognito Unauthenticated Enum
|
||||
# AWS - Enumeração Não Autenticada do Cognito
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Cognito Não Autenticado
|
||||
|
||||
Cognito é um serviço da AWS que permite que desenvolvedores **concedam acesso aos serviços da AWS** para os usuários de seus aplicativos. Os desenvolvedores concederão **funções IAM a usuários autenticados** em seu aplicativo (potencialmente pessoas poderão apenas se inscrever) e também podem conceder uma **função IAM a usuários não autenticados**.
|
||||
Cognito é um serviço da AWS que permite que desenvolvedores **concedam acesso aos serviços da AWS para os usuários de seus aplicativos**. Os desenvolvedores concederão **funções IAM a usuários autenticados** em seu aplicativo (potencialmente pessoas poderão apenas se inscrever) e também podem conceder uma **função IAM a usuários não autenticados**.
|
||||
|
||||
Para informações básicas sobre o Cognito, consulte:
|
||||
|
||||
@@ -21,7 +21,7 @@ Além disso, funções IAM também podem ser atribuídas a **usuários autentica
|
||||
|
||||
### ID do Pool de Usuários
|
||||
|
||||
Por padrão, o Cognito permite **registrar novos usuários**. Ser capaz de registrar um usuário pode lhe dar **acesso** ao **aplicativo subjacente** ou à **função IAM de acesso autenticado de um Pool de Identidade** que está aceitando como provedor de identidade o Pool de Usuários do Cognito. [**Verifique como fazer isso aqui**](../aws-services/aws-cognito-enum/cognito-user-pools.md#registration).
|
||||
Por padrão, o Cognito permite **registrar novos usuários**. Ser capaz de registrar um usuário pode lhe dar **acesso** ao **aplicativo subjacente** ou à **função de acesso IAM autenticada de um Pool de Identidade** que está aceitando como provedor de identidade o Pool de Usuários do Cognito. [**Verifique como fazer isso aqui**](../aws-services/aws-cognito-enum/cognito-user-pools.md#registration).
|
||||
|
||||
### Módulos Pacu para pentesting e enumeração
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# AWS - DocumentDB Unauthenticated Enum
|
||||
# AWS - DocumentDB Enum Não Autenticado
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
### Modelo de URL pública
|
||||
### Modelo de URL Pública
|
||||
```
|
||||
<name>.cluster-<random>.<region>.docdb.amazonaws.com
|
||||
```
|
||||
|
||||
@@ -12,7 +12,7 @@ Para mais informações, consulte:
|
||||
|
||||
### Repositórios de registro público (imagens)
|
||||
|
||||
Como mencionado na seção Enum do ECS, um registro público é **acessível por qualquer pessoa** e usa o formato **`public.ecr.aws/<random>/<name>`**. Se um URL de repositório público for localizado por um atacante, ele poderia **baixar a imagem e procurar por informações sensíveis** nos metadados e no conteúdo da imagem.
|
||||
Como mencionado na seção ECS Enum, um registro público é **acessível por qualquer pessoa** e usa o formato **`public.ecr.aws/<random>/<name>`**. Se um URL de repositório público for localizado por um atacante, ele poderia **baixar a imagem e procurar por informações sensíveis** nos metadados e no conteúdo da imagem.
|
||||
```bash
|
||||
aws ecr describe-repositories --query 'repositories[?repositoryUriPublic == `true`].repositoryName' --output text
|
||||
```
|
||||
|
||||
@@ -10,9 +10,9 @@ Para mais informações, consulte:
|
||||
../aws-services/aws-elastic-beanstalk-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Vulnerabilidade na Web
|
||||
### Vulnerabilidade Web
|
||||
|
||||
Observe que, por padrão, os ambientes do Beanstalk têm o **Metadatav1 desativado**.
|
||||
Note que, por padrão, os ambientes Beanstalk têm o **Metadatav1 desativado**.
|
||||
|
||||
O formato das páginas da web do Beanstalk é **`https://<webapp-name>-env.<region>.elasticbeanstalk.com/`**
|
||||
|
||||
@@ -26,7 +26,7 @@ Se um ambiente do Elastic Beanstalk usar um balanceador de carga e o balanceador
|
||||
|
||||
### Buckets S3 Acessíveis Publicamente
|
||||
|
||||
Aplicações do Elastic Beanstalk são frequentemente armazenadas em buckets S3 antes da implantação. Se o bucket S3 contendo a aplicação for acessível publicamente, um atacante pode **baixar o código da aplicação e procurar vulnerabilidades ou informações sensíveis**.
|
||||
Aplicações do Elastic Beanstalk são frequentemente armazenadas em buckets S3 antes da implantação. Se o bucket S3 contendo a aplicação for acessível publicamente, um atacante pode **baixar o código da aplicação e procurar por vulnerabilidades ou informações sensíveis**.
|
||||
|
||||
### Enumerar Ambientes Públicos
|
||||
```bash
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# AWS - IAM & STS Enumeração Não Autenticada
|
||||
# AWS - IAM & STS Enum Não Autenticado
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
### ~~Força Bruta para Assumir Função~~
|
||||
|
||||
> [!CAUTION]
|
||||
> **Esta técnica não funciona** mais, pois se a função existir ou não, você sempre recebe este erro:
|
||||
> **Esta técnica não funciona** mais, pois se a função existe ou não, você sempre recebe este erro:
|
||||
>
|
||||
> `An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::947247140022:user/testenv is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::429217632764:role/account-balanceasdas`
|
||||
>
|
||||
@@ -19,20 +19,20 @@ Tentar **assumir uma função sem as permissões necessárias** aciona uma mensa
|
||||
```ruby
|
||||
An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::012345678901:user/MyUser is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::111111111111:role/aws-service-role/rds.amazonaws.com/AWSServiceRoleForRDS
|
||||
```
|
||||
Esta mensagem confirma a existência da função, mas indica que sua política de assunção de função não permite sua assunção. Em contraste, tentar **assumir uma função inexistente leva a um erro diferente**:
|
||||
Esta mensagem confirma a existência do papel, mas indica que sua política de assunção de papel não permite sua assunção. Em contraste, tentar **assumir um papel inexistente leva a um erro diferente**:
|
||||
```less
|
||||
An error occurred (AccessDenied) when calling the AssumeRole operation: Not authorized to perform sts:AssumeRole
|
||||
```
|
||||
Interessantemente, este método de **distinguir entre funções existentes e não existentes** é aplicável mesmo entre diferentes contas AWS. Com um ID de conta AWS válido e uma lista de palavras direcionada, é possível enumerar as funções presentes na conta sem enfrentar limitações inerentes.
|
||||
Interessantemente, este método de **distinguir entre funções existentes e não existentes** é aplicável mesmo entre diferentes contas AWS. Com um ID de conta AWS válido e uma lista de palavras-alvo, é possível enumerar as funções presentes na conta sem enfrentar limitações inerentes.
|
||||
|
||||
Você pode usar este [script para enumerar potenciais principais](https://github.com/RhinoSecurityLabs/Security-Research/tree/master/tools/aws-pentest-tools/assume_role_enum) abusando deste problema.
|
||||
Você pode usar este [script para enumerar potenciais principais](https://github.com/RhinoSecurityLabs/Security-Research/tree/master/tools/aws-pentest-tools/assume_role_enum) abusando desse problema.
|
||||
|
||||
### Políticas de Confiança: Força Bruta em funções e usuários de Conta Cruzada
|
||||
### Políticas de Confiança: Força Bruta de funções e usuários entre contas
|
||||
|
||||
Configurar ou atualizar a **política de confiança de uma função IAM envolve definir quais recursos ou serviços AWS estão autorizados a assumir essa função** e obter credenciais temporárias. Se o recurso especificado na política **existe**, a política de confiança é salva **com sucesso**. No entanto, se o recurso **não existe**, um **erro é gerado**, indicando que um principal inválido foi fornecido.
|
||||
|
||||
> [!WARNING]
|
||||
> Note que nesse recurso você poderia especificar uma função ou usuário de conta cruzada:
|
||||
> Note que nesse recurso você poderia especificar uma função ou usuário entre contas:
|
||||
>
|
||||
> - `arn:aws:iam::acc_id:role/role_name`
|
||||
> - `arn:aws:iam::acc_id:user/user_name`
|
||||
@@ -99,7 +99,7 @@ Usando [Pacu](https://github.com/RhinoSecurityLabs/pacu):
|
||||
|
||||
- `run iam__enum_users --role-name admin --account-id 229736458923 --word-list /tmp/names.txt`
|
||||
- `run iam__enum_roles --role-name admin --account-id 229736458923 --word-list /tmp/names.txt`
|
||||
- O papel `admin` usado no exemplo é um **papel na sua conta a ser assumido** pelo pacu para criar as políticas que ele precisa criar para a enumeração
|
||||
- O papel `admin` usado no exemplo é um **papel na sua conta que pode ser impersonado** pelo pacu para criar as políticas que ele precisa para a enumeração
|
||||
|
||||
### Privesc
|
||||
|
||||
@@ -122,7 +122,7 @@ O atacante poderia simplesmente assumir isso.
|
||||
|
||||
## Federação OIDC de Terceiros
|
||||
|
||||
Imagine que você consegue ler um **fluxo de trabalho do Github Actions** que está acessando um **papel** dentro da **AWS**.\
|
||||
Imagine que você consiga ler um **fluxo de trabalho do Github Actions** que está acessando um **papel** dentro da **AWS**.\
|
||||
Essa confiança pode dar acesso a um papel com a seguinte **política de confiança**:
|
||||
```json
|
||||
{
|
||||
@@ -144,7 +144,7 @@ Essa confiança pode dar acesso a um papel com a seguinte **política de confian
|
||||
}
|
||||
```
|
||||
Esta política de confiança pode estar correta, mas a **falta de mais condições** deve fazer você desconfiar dela.\
|
||||
Isso ocorre porque o papel anterior pode ser assumido por **QUALQUER UM do Github Actions**! Você deve especificar nas condições também outras coisas, como nome da organização, nome do repositório, ambiente, branch...
|
||||
Isso ocorre porque o papel anterior pode ser assumido por **QUALQUER UM do Github Actions**! Você deve especificar nas condições também outras coisas, como nome da org, nome do repositório, env, brach...
|
||||
|
||||
Outra possível má configuração é **adicionar uma condição** como a seguinte:
|
||||
```json
|
||||
@@ -152,7 +152,7 @@ Outra possível má configuração é **adicionar uma condição** como a seguin
|
||||
"token.actions.githubusercontent.com:sub": "repo:org_name*:*"
|
||||
}
|
||||
```
|
||||
Note que **wildcard** (\*) antes do **dois pontos** (:). Você pode criar uma org como **org_name1** e **assumir o papel** a partir de uma Ação do Github.
|
||||
Note que **wildcard** (\*) antes do **dois-pontos** (:). Você pode criar uma org como **org_name1** e **assumir o papel** a partir de uma Ação do Github.
|
||||
|
||||
## Referências
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# AWS - Identity Center & SSO Unauthenticated Enum
|
||||
# AWS - Identity Center & SSO Enum Não Autenticado
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Phishing de Código de Dispositivo AWS
|
||||
|
||||
Inicialmente proposto em [**este post de blog**](https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/), é possível enviar um **link** para um usuário usando AWS SSO que, se o **usuário aceitar**, o atacante poderá obter um **token para se passar pelo usuário** e acessar todos os papéis que o usuário pode acessar no **Identity Center**.
|
||||
Inicialmente proposto em [**este post do blog**](https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/), é possível enviar um **link** para um usuário usando AWS SSO que, se o **usuário aceitar**, o atacante poderá obter um **token para se passar pelo usuário** e acessar todos os papéis que o usuário pode acessar no **Identity Center**.
|
||||
|
||||
Para realizar esse ataque, os requisitos são:
|
||||
|
||||
@@ -26,7 +26,7 @@ curl https://victim.awsapps.com/start/ -s | grep -Eo '"region":"[a-z0-9\-]+"'
|
||||
```
|
||||
2. **Gere o link para a vítima & Envie-o**
|
||||
|
||||
Execute o seguinte código para gerar um link de login do AWS SSO para que a vítima possa autenticar-se.\
|
||||
Execute o seguinte código para gerar um link de login do AWS SSO para que a vítima possa se autenticar.\
|
||||
Para a demonstração, execute este código em um console Python e não saia dele, pois mais tarde você precisará de alguns objetos para obter o token:
|
||||
```python
|
||||
import boto3
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# AWS - IoT Unauthenticated Enum
|
||||
# AWS - IoT Enum Não Autenticado
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
### Modelo de URL pública
|
||||
### Modelo de URL Pública
|
||||
```
|
||||
mqtt://{random_id}.iot.{region}.amazonaws.com:8883
|
||||
https://{random_id}.iot.{region}.amazonaws.com:8443
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## URL de Função Pública
|
||||
|
||||
É possível relacionar um **Lambda** com uma **URL de função pública** que qualquer um pode acessar. Isso pode conter vulnerabilidades na web.
|
||||
É possível relacionar um **Lambda** com uma **URL de função pública** que qualquer um pode acessar. Ela pode conter vulnerabilidades na web.
|
||||
|
||||
### Modelo de URL Pública
|
||||
```
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# AWS - Media Unauthenticated Enum
|
||||
# AWS - Enumeração de Mídia Não Autenticada
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
### Modelo de URL pública
|
||||
### Modelo de URL Pública
|
||||
```
|
||||
https://{random_id}.mediaconvert.{region}.amazonaws.com
|
||||
https://{random_id}.mediapackage.{region}.amazonaws.com/in/v1/{random_id}/channel
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# AWS - MQ Unauthenticated Enum
|
||||
# AWS - MQ Enum Não Autenticado
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
### **RabbitMQ**
|
||||
|
||||
No caso do **RabbitMQ**, por **padrão, o acesso público** e ssl estão habilitados. Mas você precisa de **credenciais** para acessar (`amqps://.mq.us-east-1.amazonaws.com:5671`). Além disso, é possível **acessar o console de gerenciamento da web** se você souber as credenciais em `https://b-<uuid>.mq.us-east-1.amazonaws.com/`
|
||||
No caso do **RabbitMQ**, por **padrão, o acesso público** e ssl estão habilitados. Mas você precisa de **credenciais** para acessar (`amqps://.mq.us-east-1.amazonaws.com:5671`). Além disso, é possível **acessar o console de gerenciamento web** se você souber as credenciais em `https://b-<uuid>.mq.us-east-1.amazonaws.com/`
|
||||
|
||||
### ActiveMQ
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# AWS - MSK Unauthenticated Enum
|
||||
# AWS - MSK Enum Não Autenticado
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# AWS - RDS Unauthenticated Enum
|
||||
# AWS - RDS Enum Não Autenticado
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -12,7 +12,7 @@ Para mais informações, consulte:
|
||||
|
||||
## Porta Pública
|
||||
|
||||
É possível dar acesso público ao **banco de dados da internet**. O atacante ainda precisará **saber o nome de usuário e a senha,** acesso IAM ou um **exploit** para entrar no banco de dados.
|
||||
É possível dar acesso público ao **banco de dados pela internet**. O atacante ainda precisará **saber o nome de usuário e a senha,** acesso IAM ou um **exploit** para entrar no banco de dados.
|
||||
|
||||
## Snapshots Públicos do RDS
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# AWS - Redshift Unauthenticated Enum
|
||||
# AWS - Redshift Enum Não Autenticado
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
### Modelo de URL pública
|
||||
### Modelo de URL Pública
|
||||
```
|
||||
{user_provided}.<random>.<region>.redshift.amazonaws.com
|
||||
```
|
||||
|
||||
@@ -12,7 +12,7 @@ As empresas podem ter **permissões de buckets mal configuradas**, dando acesso
|
||||
|
||||
### Encontrando Buckets AWS
|
||||
|
||||
Métodos diferentes para descobrir quando uma página da web está usando AWS para armazenar alguns recursos:
|
||||
Diferentes métodos para encontrar quando uma página da web está usando AWS para armazenar alguns recursos:
|
||||
|
||||
#### Enumeração & OSINT:
|
||||
|
||||
@@ -28,7 +28,7 @@ http://[bucket_name].s3.amazonaws.com/
|
||||
- Verifique por **CNAMES** como `resources.domain.com` que pode ter o CNAME `bucket.s3.amazonaws.com`
|
||||
- Verifique [https://buckets.grayhatwarfare.com](https://buckets.grayhatwarfare.com/), um site com **buckets abertos já descobertos**.
|
||||
- O **nome do bucket** e o **nome do domínio do bucket** precisam ser **os mesmos.**
|
||||
- **flaws.cloud** está no **IP** 52.92.181.107 e se você for lá, ele redireciona você para [https://aws.amazon.com/s3/](https://aws.amazon.com/s3/). Além disso, `dig -x 52.92.181.107` retorna `s3-website-us-west-2.amazonaws.com`.
|
||||
- **flaws.cloud** está em **IP** 52.92.181.107 e se você for lá, ele redireciona você para [https://aws.amazon.com/s3/](https://aws.amazon.com/s3/). Além disso, `dig -x 52.92.181.107` retorna `s3-website-us-west-2.amazonaws.com`.
|
||||
- Para verificar se é um bucket, você também pode **visitar** [https://flaws.cloud.s3.amazonaws.com/](https://flaws.cloud.s3.amazonaws.com/).
|
||||
|
||||
#### Força Bruta
|
||||
@@ -85,7 +85,7 @@ Você pode encontrar todas as regiões suportadas pela AWS em [**https://docs.aw
|
||||
|
||||
#### Por DNS
|
||||
|
||||
Você pode obter a região de um bucket com um **`dig`** e **`nslookup`** fazendo uma **solicitação DNS do IP descoberto**:
|
||||
Você pode obter a região de um bucket com um **`dig`** e **`nslookup`** fazendo uma **requisição DNS do IP descoberto**:
|
||||
```bash
|
||||
dig flaws.cloud
|
||||
;; ANSWER SECTION:
|
||||
@@ -101,7 +101,7 @@ ou você pode acessar o bucket visitando: `flaws.cloud.s3-us-west-2.amazonaws.co
|
||||
|
||||
#### Tentando
|
||||
|
||||
Se você tentar acessar um bucket, mas no **nome do domínio você especificar outra região** (por exemplo, o bucket está em `bucket.s3.amazonaws.com`, mas você tenta acessar `bucket.s3-website-us-west-2.amazonaws.com`, então você será **indicado para o local correto**:
|
||||
Se você tentar acessar um bucket, mas no **nome do domínio você especificar outra região** (por exemplo, o bucket está em `bucket.s3.amazonaws.com`, mas você tenta acessar `bucket.s3-website-us-west-2.amazonaws.com`), então você será **indicado para o local correto**:
|
||||
|
||||
.png>)
|
||||
|
||||
@@ -131,7 +131,7 @@ Se o bucket não tiver um nome de domínio, ao tentar enumerá-lo, **coloque ape
|
||||
```
|
||||
https://{user_provided}.s3.amazonaws.com
|
||||
```
|
||||
### Obter ID da Conta a partir de um Bucket público
|
||||
### Obter ID da Conta de um Bucket público
|
||||
|
||||
É possível determinar uma conta AWS aproveitando a nova **`S3:ResourceAccount`** **Chave de Condição de Política**. Esta condição **restrige o acesso com base no bucket S3** em que uma conta está (outras políticas baseadas em conta restringem com base na conta em que o principal solicitante está).\
|
||||
E como a política pode conter **coringas**, é possível encontrar o número da conta **apenas um número por vez**.
|
||||
@@ -146,7 +146,7 @@ s3-account-search arn:aws:iam::123456789012:role/s3_read s3://my-bucket
|
||||
# With an object
|
||||
s3-account-search arn:aws:iam::123456789012:role/s3_read s3://my-bucket/path/to/object.ext
|
||||
```
|
||||
Esta técnica também funciona com URLs do API Gateway, URLs do Lambda, conjuntos de dados do Data Exchange e até mesmo para obter o valor de tags (se você souber a chave da tag). Você pode encontrar mais informações na [**pesquisa original**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) e na ferramenta [**conditional-love**](https://github.com/plerionhq/conditional-love/) para automatizar essa exploração.
|
||||
Essa técnica também funciona com URLs do API Gateway, URLs do Lambda, conjuntos de dados do Data Exchange e até mesmo para obter o valor de tags (se você souber a chave da tag). Você pode encontrar mais informações na [**pesquisa original**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) e na ferramenta [**conditional-love**](https://github.com/plerionhq/conditional-love/) para automatizar essa exploração.
|
||||
|
||||
### Confirmando que um bucket pertence a uma conta AWS
|
||||
|
||||
@@ -160,7 +160,7 @@ curl -X GET "[bucketname].amazonaws.com/" \
|
||||
```
|
||||
Se o erro for "Acesso Negado", isso significa que o ID da conta estava errado.
|
||||
|
||||
### Usando Emails como enumeração de conta root
|
||||
### Emails usados como enumeração de conta root
|
||||
|
||||
Como explicado em [**este post do blog**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/), é possível verificar se um endereço de email está relacionado a alguma conta AWS **tentando conceder permissões a um email** sobre um bucket S3 via ACLs. Se isso não gerar um erro, significa que o email é um usuário root de alguma conta AWS:
|
||||
```python
|
||||
|
||||
@@ -10,12 +10,12 @@ Para mais informações sobre SNS, consulte:
|
||||
../aws-services/aws-sns-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Aberto a Todos
|
||||
### Aberto para Todos
|
||||
|
||||
Quando você configura um tópico SNS a partir do console da web, é possível indicar que **Todos podem publicar e se inscrever** no tópico:
|
||||
|
||||
<figure><img src="../../../images/image (212).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Portanto, se você **encontrar o ARN dos tópicos** dentro da conta (ou forçar nomes potenciais para tópicos), você pode **verificar** se pode **publicar** ou **se inscrever** **neles**.
|
||||
Portanto, se você **encontrar o ARN dos tópicos** dentro da conta (ou forçar nomes potenciais para tópicos), você pode **verificar** se pode **publicar** ou **se inscrever** neles.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# AWS - SQS Unauthenticated Enum
|
||||
# AWS - SQS Enum Não Autenticado
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -10,7 +10,7 @@ Para mais informações sobre SQS, consulte:
|
||||
../aws-services/aws-sqs-and-sns-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Modelo de URL pública
|
||||
### Modelo de URL Pública
|
||||
```
|
||||
https://sqs.[region].amazonaws.com/[account-id]/{user_provided}
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user