
Scanner di sicurezza per autorizzazioni automatizzato per API basate su OpenAPI. Testa gli endpoint GET con più set di credenziali per rilevare escalation dei privilegi e bug di controllo degli accessi tramite analisi differenziale delle risposte.
I problemi di sicurezza dell'autorizzazione nelle applicazioni web moderne non vengono facilmente rilevati dagli scanner di sicurezza. Alcuni esempi da Shopify, LINE, NordVPN. Uno dei motivi è che gli scanner di sicurezza cercano principalmente SQLi, XSS, RCE invece di cercare bug di sicurezza dell'autorizzazione, e di solito non hanno conoscenza di come l'applicazione web dovrebbe comportarsi. Ecco perché la maggior parte dei bug di autorizzazione vengono scoperti principalmente manualmente. OpenAPI Security Scanner è stato creato per aiutare a scoprire problemi di sicurezza dell'autorizzazione sia con automazione che con revisione manuale. Si comporta come uno strumento di test unitario esterno per garantire che tutto si comporti come dovrebbe.
Guarda questo video per seguire o continua a leggere.
Forka o clona questo progetto e segui le istruzioni qui sotto per iniziare.
Il flusso di lavoro per utilizzare questo scanner sarebbe simile a questo:
Per gli sviluppatori, l'uso di questo strumento aggiunge un ulteriore livello di garanzia che l'API si comporti come previsto sia internamente che esternamente. E lo scanner può essere attivato ad ogni distribuzione del codice attivando la pipeline https://docs.gitlab.com/ee/ci/triggers/.
Per i cacciatori di bug bounty, usare questo strumento può garantire di rimanere sempre aggiornati sull'API target, perché sappiamo tutti che anche un endpoint specifico non era vulnerabile prima, potrebbe diventarlo in futuro per vari motivi. Quindi è più facile automatizzare la parte manuale della caccia ai bug utilizzando questo strumento.
Assicurati di avere il permesso di scansionare l'API target.
Avrai bisogno di un file yaml OpenAPI dell'applicazione web e sostituiscilo con il contenuto di api.yaml nel repository.
Sostituisci il contenuto di api.yaml con il file yaml OpenAPI del target, vai su Settings -> CI/CD -> Espandi Variables del progetto GitLab e inserisci le variabili nei formati seguenti.
Le credenziali fornite qui verranno passate alle chiamate API nel formato dell'intestazione Authorization: Bearer.
Si consiglia di preparare token di accesso per almeno due account utente con permessi diversi, e puoi anche creare più di un token di accesso per account utente per testare comportamenti corretti per token di accesso con ambiti diversi.
{
"<user_a>":[
{
"scope":"<scope>",
"access_token":"<valore>",
"name":"<nome_del_token_di_accesso>"
},
{
"scope":"<scope>",
"access_token":"<valore>",
"name":"<nome_del_token_di_accesso>"
}
],
"<user_b>":[
{
"scope":"<scope>",
"access_token":"<valore>",
"name":"<nome_del_token_di_accesso>"
}
]
}
Gli endpoint forniti qui devono essere chiamate API basate su GET, e puoi anche includere la query nel corpo JSON. Nell'esempio qui sotto, l'endpoint è /org/{org}/repos e la query è type=all. Per l'endpoint /repos/{owner}/{repo}, non ci sarà alcuna query.
{
"/orgs/{org}/repos":{
"type":"all"
},
"/repos/{owner}/{repo}":{
}
}
Le variabili di percorso possono essere fornite qui, e lo scanner genererà tutte le combinazioni dai valori nelle variabili di percorso.
{
"org":[
"test-org"
],
"owner":[
"ngalongc",
"reconless"
],
"repo":[
"public-repo",
"private-repo"
]
}
In questo caso, vengono generate le seguenti combinazioni di chiamate API, e verranno tutte chiamate da diversi set di credenziali forniti in OPENAPI_CREDS.
/orgs/test-org/repos?type=all
/repos/ngalongc/public-repo
/repos/ngalongc/private-repo
/repos/reconless/public-repo
/repos/reconless/private-repo
Vai su https://gitlab.com/-/profile/personal_access_tokens e crea un token di accesso api e sostituisci il valore qui. Questo token di accesso GitLab viene utilizzato per scaricare i risultati della scansione dal runner GitLab.
<TUO_TOKEN_DI_ACCESSO_GITLAB_API>
Questo dovrebbe essere il valore dell'URL base del tuo server API
https://example.com/api/v3
Screenshot della notifica Slack quando vengono rilevati cambiamenti nell'API
Screenshot del risultato della scansione negli artefatti
Report di esempio: https://ngalog-gitlab.gitlab.io/-/openapi_security_scanner/-/jobs/966841401/artifacts/sample.html
GET/users/{user_id}/activities, le risposte sono diverse ogni volta che vengono chiamati, quindi rilevare i cambiamenti di questo tipo di API non è significativoI contributi sono ciò che rende la comunità open source un posto fantastico per imparare, ispirare e creare. Qualsiasi contributo che fornisci è molto apprezzato.
git checkout -b feature/CaratteristicaIncredibile)git commit -m 'Aggiungi qualche CaratteristicaIncredibile')git push origin feature/CaratteristicaIncredibile)Distribuito con licenza MIT. Vedi LICENSE per maggiori informazioni.
Ron Chan - @ngalongc
Link al Progetto: https://gitlab.com/ngalog-gitlab/openapi_security_scanner