
CVE-2016-4468
UAA è un servizio di gestione delle identità multi-tenant, utilizzato in Cloud Foundry, ma disponibile anche come server OAuth2 autonomo. Il suo ruolo principale è quello di provider OAuth2, emettendo token che le applicazioni client utilizzano quando agiscono per conto degli utenti di Cloud Foundry. Può anche autenticare gli utenti con le loro credenziali Cloud Foundry e può fungere da servizio SSO usando quelle credenziali (o altre). Dispone di endpoint per la gestione degli account utente, per la registrazione di client OAuth2 e per varie altre funzioni di gestione.
Requisiti:
Se funziona, sei a posto:
$ git clone git://github.com/cloudfoundry/uaa.git
$ cd uaa
$ ./gradlew run
Tutte le app funzionano insieme, con le applicazioni in esecuzione sulla stessa porta (8080) come /uaa, /app e /api.
UAA registrerà un log in un file chiamato uaa.log, che può essere trovato usando il seguente comando:-
$ sudo find / -name uaa.log
che dovresti trovare in un percorso simile a:-
/private/var/folders/7v/518b18d97_3f4c8fzxphy6f8zcm51c/T/cargo/conf/logs/
Puoi anche compilare l'app e caricarla su Cloud Foundry, ad esempio. Il nostro metodo consigliato è usare un file manifest, ma puoi fare tutto dalla riga di comando.
$ ./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
Nei passaggi precedenti, sostituisci:
myuaa con un nome applicazione univoco2.3.2-SNAPSHOT con l'etichetta di versione appropriata dalla tua build<domain> è il dominio della tua app. In futuro lo leggeremo dall'ambiente di sistema.Prima esegui il server UAA come descritto sopra:
$ ./gradlew run
Poi apri un altro terminale e, dalla directory base del progetto, chiedi all'endpoint di login di fornirti informazioni sul sistema:
$ 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"]
}
}
Poi puoi provare ad accedere con la gemma ruby di UAA. Assicurati di avere ruby 1.9, quindi
$ gem install cf-uaac
$ uaac target http://localhost:8080/uaa
$ uaac token get marissa koala
(oppure ometti nome utente / password per ricevere il prompt).
Questo autentica e ottiene un token di accesso dal server usando la concessione implicita OAuth2, simile all'approccio previsto per un client come CF. Il token viene salvato in ~/.uaac.yml, quindi esamina quel file ed estrai il token di accesso per il tuo target cf (oppure usa --verbose nella riga di comando di login sopra per vederlo registrato nella tua console).
Poi puoi accedere come resource server e recuperare i dettagli del token:
$ uaac target http://localhost:8080/uaa
$ uaac token decode
Dovresti vedere il tuo nome utente e il client id della concessione del token originale su stdout, ad esempio:
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
Questo comando presuppone che sia disponibile un database MySQL con le impostazioni di accesso predefinite e risponde alle seguenti impostazioni JDBC.
driver = 'org.mariadb.jdbc.Driver'
url = 'jdbc:mysql://localhost:3306/uaa'
user = 'root'
password = 'changeme'
schemas = ['uaa']
In modo simile, se esegui il comando
$ ./gradlew -Dspring.profiles.active=default,postgresql run
Vengono usate le impostazioni definite come
driver = 'org.postgresql.Driver'
url = 'jdbc:postgresql:uaa'
user = 'root'
password = 'changeme'
Queste impostazioni sono duplicate in due punti per l'integrazione con Gradle. Sono definite come predefinite nei file di configurazione Spring XML e nel file principale build.gradle. Il motivo per cui si trovano nel file di build Gradle è che Gradle esegua sempre l'attività flywayClean prima di avviare l'applicazione UAA. Se non vuoi pulire il database, puoi definire la variabile
-Dflyway.clean=false
come parte della riga di comando. Questo disabilita l'attività flywayClean nello script gradle. Un altro modo per disabilitare flywayClean è non specificare i profili spring nella riga di comando, ma impostare i profili nei file uaa.yml e login.yml.
Lo stesso esempio da riga di comando dovrebbe funzionare con un UAA in esecuzione su run.pivotal.io (tranne per la decodifica del token, perché non avrai il client secret). In questo caso non è necessario eseguire un server uaa locale: basta chiedere all'endpoint di login esterno di fornire informazioni sul sistema:
$ curl -H "Accept: application/json" login.run.pivotal.io
{
"prompts":{"username":["text","Username"],
"password":["password","Password"]
}
}
Puoi quindi provare ad accedere con la gemma ruby di UAA. Assicurati di avere ruby 1.9, quindi
$ gem install cf-uaac
$ uaac target uaa.run.pivotal.io
$ uaac token get [yourusername] [yourpassword]
(oppure ometti nome utente / password per ricevere il prompt).
Questo autentica e ottiene un token di accesso dal server usando la concessione implicita OAuth2, la stessa usata da un client come CF.
Puoi eseguire i test di integrazione con