
Scanner de segurança de autorização automatizado para APIs baseadas em OpenAPI. Testa endpoints GET com múltiplos conjuntos de credenciais para detectar escalonamento de privilégios e falhas de controle de acesso quebrado por meio de análise diferencial de resposta.
Problemas de segurança de autorização em aplicações web modernas não são facilmente detectados por scanners de segurança. Alguns exemplos do Shopify, LINE, NordVPN. Uma das razões é que os scanners de segurança procuram principalmente por SQLi, XSS, RCE em vez de bugs de segurança de autorização, e os scanners geralmente não têm conhecimento de como a aplicação web deve se comportar. É por isso que a maioria dos bugs de autorização atualmente são descobertos manualmente. O OpenAPI Security Scanner foi criado para ajudar a descobrir problemas de segurança de autorização tanto com automação quanto com revisão manual. Ele se comporta como uma ferramenta de teste unitário externa para garantir que tudo está se comportando como deveria.
Assista a este vídeo para acompanhar ou continue lendo.
Faça um Fork ou clone este projeto e siga as instruções abaixo para começar.
O fluxo de trabalho para usar este scanner seria algo como:
Para desenvolvedores, usar esta ferramenta adicionaria uma camada extra de garantia de que a API está se comportando conforme o esperado, tanto interna quanto externamente. E o scanner pode ser acionado a cada implantação de código acionando o pipeline https://docs.gitlab.com/ee/ci/triggers/.
Para caçadores de bug bounty, usar esta ferramenta pode garantir que você esteja sempre atualizado sobre a API alvo, porque todos sabemos que mesmo um endpoint específico não era vulnerável antes, pode se tornar vulnerável no futuro por vários motivos. Portanto, é mais fácil automatizar a parte manual da caça a bugs usando esta ferramenta.
Certifique-se de ter permissão para escanear a API alvo.
Você precisará de um arquivo yaml OpenAPI da aplicação web e substituí-lo pelo conteúdo de api.yaml no repositório.
Substitua o conteúdo de api.yaml pelo arquivo yaml OpenAPI do alvo e vá para Settings do projeto GitLab -> CI/CD -> Expandir Variables e insira as variáveis nos formatos abaixo.
As credenciais fornecidas aqui serão passadas para as chamadas de API no formato de cabeçalho Authorization: Bearer. É recomendável preparar tokens de acesso para pelo menos duas contas de usuário com permissões diferentes, e você também pode criar mais de um token de acesso por conta de usuário para testar comportamentos corretos para tokens de acesso com diferentes escopos.
{
"<user_a>":[
{
"scope":"<scope>",
"access_token":"<value>",
"name":"<name_of_access_token>"
},
{
"scope":"<scope>",
"access_token":"<value>",
"name":"<name_of_access_token>"
}
],
"<user_b>":[
{
"scope":"<scope>",
"access_token":"<value>",
"name":"<name_of_access_token>"
}
]
}
Os endpoints fornecidos aqui devem ser chamadas de API baseadas em GET, e você também pode incluir a consulta no corpo JSON. No exemplo abaixo, o endpoint é /org/{orgs}/repos e a consulta para ele é type=all. Para o endpoint /repos/{owner}/{repo}, não haverá consulta.
{
"/orgs/{org}/repos":{
"type":"all"
},
"/repos/{owner}/{repo}":{
}
}
As variáveis de caminho podem ser fornecidas aqui, e o scanner gerará todas as combinações a partir dos valores nas variáveis de caminho.
{
"org":[
"test-org"
],
"owner":[
"ngalongc",
"reconless"
],
"repo":[
"public-repo",
"private-repo"
]
}
Neste caso, as seguintes combinações de chamadas de API são geradas, e todas elas serão chamadas por diferentes conjuntos de credenciais fornecidos em OPENAPI_CREDS.
/orgs/test-org/repos?type=all
/repos/ngalongc/public-repo
/repos/ngalongc/private-repo
/repos/reconless/public-repo
/repos/reconless/private-repo
Vá para https://gitlab.com/-/profile/personal_access_tokens e crie um token de acesso api e substitua o valor aqui. Este token de acesso do GitLab é usado para baixar os resultados da varredura do runner do GitLab.
<YOU_GITLAB_API_ACCESS_TOKEN>
Este deve ser o valor da url base do seu servidor de API
https://example.com/api/v3
Captura de tela da notificação do Slack quando alterações na API são detectadas

Captura de tela do resultado da varredura nos artefatos

Relatório de exemplo: https://ngalog-gitlab.gitlab.io/-/openapi_security_scanner/-/jobs/966841401/artifacts/sample.html
GET/users/{user_id}/activities, as respostas são diferentes toda vez que são chamadas, portanto detectar mudanças neste tipo de API não é significativoAs contribuições são o que tornam a comunidade open source um lugar incrível para aprender, inspirar e criar. Quaisquer contribuições que você fizer são muito apreciadas.
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)Distribuído sob a Licença MIT. Veja LICENSE para mais informações.
Ron Chan - @ngalongc
Link do Projeto: https://gitlab.com/ngalog-gitlab/openapi_security_scanner