
Scanner de sécurité d'autorisation automatisé pour les API basées sur OpenAPI. Teste les points de terminaison GET avec plusieurs ensembles d'identifiants pour détecter les escalades de privilèges et les bugs de contrôle d'accès défaillant via l'analyse différentielle des réponses.
Les problèmes de sécurité d'autorisation dans les applications web modernes ne peuvent pas être facilement détectés par les scanners de sécurité. Quelques exemples de Shopify, LINE, NordVPN. L'une des raisons est que les scanners de sécurité recherchent principalement des SQLi, XSS, RCE au lieu des bugs de sécurité d'autorisation, et les scanners n'ont généralement pas connaissance du comportement attendu de l'application web. C'est pourquoi la majorité des bugs d'autorisation sont actuellement découverts manuellement. Le scanner de sécurité OpenAPI a été créé pour aider à découvrir les problèmes de sécurité d'autorisation à la fois de manière automatisée et par révision manuelle. Il se comporte comme un outil de test unitaire externe pour s'assurer que tout se comporte comme il se doit.
Regardez cette vidéo pour suivre ou continuez à lire.
Forkez ou clonez ce projet et suivez les instructions ci-dessous pour commencer.
Le flux de travail pour utiliser ce scanner ressemblerait à ceci :
Pour les développeurs, l'utilisation de cet outil ajoute une couche supplémentaire de garantie que l'API se comporte comme prévu, tant en interne qu'en externe. Et le scanner peut être déclenché à chaque déploiement de code en déclenchant le pipeline https://docs.gitlab.com/ee/ci/triggers/.
Pour les chasseurs de primes de bugs, l'utilisation de cet outil garantit que vous restez toujours à jour sur l'API ciblée, car nous savons tous que même un point de terminaison spécifique n'était pas vulnérable auparavant, il pourrait le devenir à l'avenir pour diverses raisons. Il est donc plus facile d'automatiser la partie manuelle de la chasse aux bugs avec cet outil.
Assurez-vous d'avoir l'autorisation de scanner l'API ciblée.
Vous aurez besoin d'un fichier yaml OpenAPI de l'application web et remplacez-le par le contenu de api.yaml dans le dépôt.
Remplacez le contenu de api.yaml par le fichier yaml OpenAPI de la cible, puis allez dans Settings -> CI/CD -> Développez Variables du projet GitLab et saisissez les variables dans les formats ci-dessous.
Les identifiants fournis ici seront passés aux appels API sous la forme d'un en-tête Authorization: Bearer.
Il est recommandé de préparer des jetons d'accès pour au moins deux comptes utilisateur avec des permissions différentes, et vous pouvez également créer plusieurs jetons d'accès par compte utilisateur pour tester les comportements corrects pour différents jetons d'accès à portées différentes.
{
"<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>"
}
]
}
Les points de terminaison fournis ici doivent être des appels API basés sur GET, et vous pouvez également inclure la requête dans le corps JSON. Dans l'exemple ci-dessous, le point de terminaison est /org/{orgs}/repos et la requête est type=all. Pour le point de terminaison /repos/{owner}/{repo}, il n'y aura pas de requête.
{
"/orgs/{org}/repos":{
"type":"all"
},
"/repos/{owner}/{repo}":{
}
}
Les variables de chemin peuvent être fournies ici, et le scanner générera toutes les combinaisons à partir des valeurs des variables de chemin.
{
"org":[
"test-org"
],
"owner":[
"ngalongc",
"reconless"
],
"repo":[
"public-repo",
"private-repo"
]
}
Dans ce cas, les appels API combinés suivants sont générés, et ils seront tous appelés par différents ensembles d'identifiants fournis dans OPENAPI_CREDS.
/orgs/test-org/repos?type=all
/repos/ngalongc/public-repo
/repos/ngalongc/private-repo
/repos/reconless/public-repo
/repos/reconless/private-repo
Allez sur https://gitlab.com/-/profile/personal_access_tokens et créez un jeton d'accès api et remplacez la valeur ici. Ce jeton d'accès GitLab est utilisé pour télécharger les résultats du scan depuis l'exécuteur GitLab.
<YOU_GITLAB_API_ACCESS_TOKEN>
Ce doit être la valeur de l'URL de base de votre serveur API.
https://example.com/api/v3
Capture d'écran de la notification Slack lorsque des changements d'API sont détectés
Capture d'écran du résultat du scan dans les artefacts
Rapport exemple : https://ngalog-gitlab.gitlab.io/-/openapi_security_scanner/-/jobs/966841401/artifacts/sample.html
GET/users/{user_id}/activities, les réponses sont différentes à chaque appel, donc détecter les changements de ce type d'API n'est pas significatifLes contributions sont ce qui rend la communauté open source un endroit formidable pour apprendre, inspirer et créer. Toute contribution que vous apportez est grandement appréciée.
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)Distribué sous la licence MIT. Voir LICENSE pour plus d'informations.
Ron Chan - @ngalongc
Lien du projet : https://gitlab.com/ngalog-gitlab/openapi_security_scanner