
CVE-2016-4468
Der UAA ist ein Multi-Tenant-Identity-Management-Dienst, der in Cloud Foundry verwendet wird, aber auch als eigenständiger OAuth2-Server verfügbar ist. Seine Hauptaufgabe ist als OAuth2-Anbieter, der Token für Client-Anwendungen ausstellt, wenn diese im Namen von Cloud Foundry-Benutzern handeln. Er kann Benutzer auch mit ihren Cloud Foundry-Anmeldedaten authentifizieren und als SSO-Dienst mit diesen (oder anderen) Anmeldedaten fungieren. Er hat Endpunkte zur Verwaltung von Benutzerkonten und zur Registrierung von OAuth2-Clients sowie verschiedene andere Verwaltungsfunktionen.
Voraussetzungen:
Wenn dies funktioniert, sind Sie startklar:
$ git clone git://github.com/cloudfoundry/uaa.git
$ cd uaa
$ ./gradlew run
Alle Apps arbeiten zusammen, wobei die Apps auf demselben Port (8080) als /uaa, /app und /api laufen.
UAA loggt in eine Datei namens uaa.log, die mit folgendem Befehl gefunden werden kann:
$ sudo find / -name uaa.log
die Sie in etwa unter folgendem Pfad finden sollten:
/private/var/folders/7v/518b18d97_3f4c8fzxphy6f8zcm51c/T/cargo/conf/logs/
Sie können die App auch erstellen und in Cloud Foundry pushen, z. B. Unsere empfohlene Methode ist die Verwendung einer Manifestdatei, aber Sie können alles über die Befehlszeile erledigen.
$ ./gradlew :cloudfoundry-identity-uaa:war
$ cf push myuaa --no-start -m 512M -p uaa/build/libs/cloudfoundry-identity-uaa-2.3.2-SNAPSHOT.war
$ cf set-env myuaa SPRING_PROFILES_ACTIVE default,hsqldb
$ cf set-env myuaa UAA_URL http://myuaa.<domain>
$ cf set-env myuaa LOGIN_URL http://myuaa.<domain>
$ cf set-env myuaa JBP_CONFIG_SPRING_AUTO_RECONFIGURATION '[enabled: false]'
$ cf set-env myuaa JBP_CONFIG_TOMCAT '{tomcat: { version: 7.0.+ }}'
$ cf start myuaa
Ersetzen Sie in den obigen Schritten:
myuaa durch einen eindeutigen Anwendungsnamen2.3.2-SNAPSHOT durch die entsprechende Versionsbezeichnung aus Ihrem Build<domain> durch Ihre App-Domain. Wir werden dies in Zukunft aus der Systemumgebung parsen.UAA_CONFIG_YAML die vollständige Konfiguration als YAML enthält.Führen Sie zuerst den UAA-Server wie oben beschrieben aus:
$ ./gradlew run
Starten Sie dann ein weiteres Terminal und fragen Sie vom Projektverzeichnis aus den Login-Endpunkt nach Informationen über das System:
$ curl -H "Accept: application/json" localhost:8080/uaa/login
{
"timestamp":"2012-03-28T18:25:49+0100",
"commit_id":"111274e",
"prompts":{"username":["text","Username"],
"password":["password","Password"]
}
}
Dann können Sie versuchen, sich mit dem UAA Ruby-Gem anzumelden. Stellen Sie sicher, dass Sie Ruby 1.9 haben, dann
$ gem install cf-uaac
$ uaac target http://localhost:8080/uaa
$ uaac token get marissa koala
(oder lassen Sie Benutzername / Passwort weg, um dazu aufgefordert zu werden).
Dies authentifiziert und erhält ein Zugriffstoken vom Server mithilfe des OAuth2-Implicit-Grant, ähnlich dem Ansatz, der für einen Client wie CF vorgesehen ist. Das Token wird in ~/.uaac.yml gespeichert. Schauen Sie in diese Datei und extrahieren Sie das Zugriffstoken für Ihr cf-Ziel (oder verwenden Sie --verbose in der obigen Login-Befehlszeile, um es auf Ihrer Konsole zu protokollieren).
Dann können Sie sich als Ressourcenserver anmelden und die Token-Details abrufen:
$ uaac target http://localhost:8080/uaa
$ uaac token decode
Sie sollten Ihren Benutzernamen und die Client-ID der ursprünglichen Token-Gewährung auf stdout sehen, z. B.
exp: 1355348409
user_name: marissa
scope: cloud_controller.read openid password.write scim.userids tokens.read tokens.write
email: [email protected]
aud: scim tokens openid cloud_controller password
jti: ea2fac72-3f51-4c8f-a7a6-5ffc117af542
user_id: ba14fea0-9d87-4f0c-b59e-32aaa8eb1434
client_id: cf
$ ./gradlew -Dspring.profiles.active=default,mysql run
Dieser Befehl geht davon aus, dass eine MySQL-Datenbank mit den Standardzugriffseinstellungen verfügbar ist und auf die folgenden JDBC-Einstellungen reagiert.
driver = 'org.mariadb.jdbc.Driver'
url = 'jdbc:mysql://localhost:3306/uaa'
user = 'root'
password = 'changeme'
schemas = ['uaa']
In ähnlicher Weise, wenn Sie den Befehl ausführen
$ ./gradlew -Dspring.profiles.active=default,postgresql run
verwendet er die folgenden Einstellungen:
driver = 'org.postgresql.Driver'
url = 'jdbc:postgresql:uaa'
user = 'root'
password = 'changeme'
Diese Einstellungen sind an zwei Stellen für die Gradle-Integration dupliziert.
Sie sind als Standardeinstellungen in den Spring-XML-Konfigurationsdateien definiert und in der Hauptdatei build.gradle. Der Grund, warum sie in der Gradle-Build-Datei stehen, ist, dass Gradle vor dem Start der UAA-Anwendung immer die FlywayClean-Aufgabe ausführt. Wenn Sie die Datenbank nicht bereinigen möchten, können Sie die Variable
-Dflyway.clean=false
als Teil Ihrer Befehlszeile definieren. Dies deaktiviert die FlywayClean-Aufgabe im Gradle-Skript.
Eine andere Möglichkeit, FlywayClean zu deaktivieren, besteht darin, die Spring-Profile nicht über die Befehlszeile anzugeben, sondern die Profile in den Dateien uaa.yml und login.yml zu setzen.
Das gleiche Befehlszeilenbeispiel sollte auch gegen eine UAA funktionieren, die auf run.pivotal.io läuft (mit Ausnahme des Token-Decodierungsteils, da Sie das Client-Secret nicht haben). In diesem Fall muss kein lokaler UAA-Server laufen. Fragen Sie einfach den externen Login-Endpunkt nach Informationen über das System:
$ curl -H "Accept: application/json" login.run.pivotal.io
{
"prompts":{"username":["text","Username"],
"password":["password","Password"]
}
}
Sie können dann versuchen, sich mit dem UAA Ruby-Gem anzumelden. Stellen Sie sicher, dass Sie Ruby 1.9 haben, dann
$ gem install cf-uaac
$ uaac target uaa.run.pivotal.io
$ uaac token get [yourusername] [yourpassword]
(oder lassen Sie Benutzername / Passwort weg, um dazu aufgefordert zu werden).
Dies authentifiziert und erhält ein Zugriffstoken vom Server mithilfe des OAuth2-Implicit-Grant, der gleiche, der auch von einem Client wie CF verwendet wird.
Sie können die Integrationstests mit folgendem Befehl ausführen:
$ ./gradlew integrationTest