
Automatisierter Autorisierungs-Sicherheitsscanner für OpenAPI-basierte APIs. Testet GET-Endpunkte mit mehreren Anmeldedatensätzen, um Privilegieneskalation und Schwachstellen in der Zugangskontrolle durch differentielle Antwortanalyse zu erkennen.
Autorisierungssicherheitslücken in modernen Webanwendungen können von Sicherheitsscannern nicht einfach erkannt werden. Einige Beispiele von Shopify, LINE, NordVPN. Einer der Gründe ist, dass Sicherheitsscanner hauptsächlich nach SQLi, XSS, RCE suchen, anstatt nach Autorisierungssicherheitsfehlern, und die Scanner kennen in der Regel nicht das erwartete Verhalten der Webanwendung. Deshalb werden die meisten Autorisierungsfehler heute hauptsächlich manuell entdeckt. OpenAPI Security Scanner wurde entwickelt, um Autorisierungssicherheitslücken sowohl durch Automatisierung als auch durch manuelle Überprüfung zu entdecken. Er verhält sich wie ein externes Unit-Test-Tool, das sicherstellt, dass alles so funktioniert, wie es sollte.
Schauen Sie sich dieses Video an, um mitzumachen, oder lesen Sie weiter.
Forken oder klonen Sie dieses Projekt und folgen Sie den nachstehenden Anweisungen, um loszulegen.
Der Arbeitsablauf zur Verwendung dieses Scanners sieht etwa wie folgt aus:
Für Entwickler bietet dieses Tool eine zusätzliche Sicherheitsebene, dass sich die API sowohl intern als auch extern wie erwartet verhält. Der Scanner kann bei jeder Codebereitstellung ausgelöst werden, indem die Pipeline ausgelöst wird: https://docs.gitlab.com/ee/ci/triggers/.
Für Bug Bounty-Jäger stellt dieses Tool sicher, dass Sie die Ziel-API immer im Griff haben, denn wir alle wissen, dass selbst ein zuvor nicht anfälliger Endpunkt in Zukunft aus verschiedenen Gründen anfällig werden kann. Daher ist es einfacher, den manuellen Teil der Bug-Jagd mit diesem Tool zu automatisieren.
Stellen Sie sicher, dass Sie die Berechtigung haben, die Ziel-API zu scannen.
Sie benötigen eine OpenAPI-YAML-Datei der Webanwendung und ersetzen den Inhalt von api.yaml im Repository.
Ersetzen Sie den Inhalt von api.yaml durch die OpenAPI-YAML-Datei des Ziels, und gehen Sie zu den GitLab-Projekteinstellungen (Settings -> CI/CD -> Abschnitt Variables erweitern) und geben Sie die Variablen in den folgenden Formaten ein.
Die hier angegebenen Anmeldedaten werden an die API-Aufrufe im Format Authorization: Bearer Header übergeben.
Es wird empfohlen, Zugriffstoken für mindestens zwei Benutzerkonten mit unterschiedlichen Berechtigungen vorzubereiten. Sie können auch mehrere Zugriffstoken pro Benutzerkonto erstellen, um das korrekte Verhalten für unterschiedlich eingeschränkte Zugriffstoken zu testen.
{
"<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>"
}
]
}
Die hier angegebenen Endpunkte sollten GET-basierte API-Aufrufe sein. Sie können die Abfrage auch im JSON-Body einfügen. Im folgenden Beispiel ist der Endpunkt /org/{orgs}/repos und die Abfrage dafür type=all. Für den Endpunkt /repos/{owner}/{repo} gibt es keine Abfrage.
{
"/orgs/{org}/repos":{
"type":"all"
},
"/repos/{owner}/{repo}":{
}
}
Die Pfadvariablen können hier angegeben werden. Der Scanner generiert alle Kombinationen aus den Werten der Pfadvariablen.
{
"org":[
"test-org"
],
"owner":[
"ngalongc",
"reconless"
],
"repo":[
"public-repo",
"private-repo"
]
}
In diesem Fall werden die folgenden Kombinationen von API-Aufrufen generiert, die alle mit den verschiedenen in OPENAPI_CREDS angegebenen Anmeldedatensätzen aufgerufen werden.
/orgs/test-org/repos?type=all
/repos/ngalongc/public-repo
/repos/ngalongc/private-repo
/repos/reconless/public-repo
/repos/reconless/private-repo
Gehen Sie zu https://gitlab.com/-/profile/personal_access_tokens und erstellen Sie ein api-Zugriffstoken und ersetzen Sie den Wert hier. Dieses GitLab-Zugriffstoken wird verwendet, um die Scanergebnisse vom GitLab-Runner herunterzuladen.
<IHRE_GITLAB_API_ACCESS_TOKEN>
Dies sollte der Wert der Basis-URL Ihres API-Servers sein.
https://example.com/api/v3
Screenshot der Slack-Benachrichtigung, wenn API-Änderungen erkannt werden
Screenshot des Scanergebnisses in den Artefakten
Beispielbericht: https://ngalog-gitlab.gitlab.io/-/openapi_security_scanner/-/jobs/966841401/artifacts/sample.html
GET-basierte Endpunkte getestet werden/users/{user_id}/activities sind die Antworten bei jedem Aufruf unterschiedlich, daher ist die Erkennung von Änderungen bei dieser Art von API nicht sinnvollBeiträge machen die Open-Source-Community zu einem so fantastischen Ort zum Lernen, Inspirieren und Gestalten. Jeder Beitrag, den Sie leisten, ist sehr willkommen.
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)Verteilt unter der MIT-Lizenz. Siehe LICENSE für weitere Informationen.
Ron Chan - @ngalongc
Projektlink: https://gitlab.com/ngalog-gitlab/openapi_security_scanner