
CVE-2016-4468
O UAA é um serviço de gerenciamento de identidade multi-inquilino, usado no Cloud Foundry, mas também disponível como um servidor OAuth2 independente. Sua função principal é como um provedor OAuth2, emitindo tokens para aplicações cliente usarem quando agem em nome de usuários do Cloud Foundry. Ele também pode autenticar usuários com suas credenciais do Cloud Foundry e pode atuar como um serviço SSO usando essas credenciais (ou outras). Possui endpoints para gerenciamento de contas de usuário e para registro de clientes OAuth2, bem como várias outras funções de gerenciamento.
Requisitos:
Se isso funcionar, você está no caminho certo:
$ git clone git://github.com/cloudfoundry/uaa.git
$ cd uaa
$ ./gradlew run
Os aplicativos funcionam juntos com os aplicativos rodando na mesma porta (8080) como /uaa, /app e /api.
O UAA registrará em um arquivo chamado uaa.log, que pode ser encontrado usando o seguinte comando:-
$ sudo find / -name uaa.log
que você deve encontrar em algo como:-
/private/var/folders/7v/518b18d97_3f4c8fzxphy6f8zcm51c/T/cargo/conf/logs/
Você também pode construir o aplicativo e enviá-lo para o Cloud Foundry, por exemplo. Nossa maneira recomendada é usar um arquivo de manifesto, mas você pode fazer tudo na linha de 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
Nas etapas acima, substitua:
myuaa por um nome de aplicativo único2.3.2-SNAPSHOT pelo rótulo de versão apropriado da sua compilação<domain> pelo domínio do seu aplicativo. No futuro, faremos o parsing disso a partir do ambiente do sistema.Primeiro execute o servidor UAA conforme descrito acima:
$ ./gradlew run
Em seguida, inicie outro terminal e, a partir do diretório base do projeto, peça ao endpoint de login para informá-lo sobre o 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"]
}
}
Então você pode tentar fazer login com a gem ruby UAA. Certifique-se de ter ruby 1.9, então
$ gem install cf-uaac
$ uaac target http://localhost:8080/uaa
$ uaac token get marissa koala
(ou omita o nome de usuário / senha para ser solicitado).
Isso autentica e obtém um token de acesso do servidor usando a concessão implícita OAuth2, semelhante à abordagem destinada a um cliente como o CF. O token é armazenado em ~/.uaac.yml, então examine esse arquivo e retire o token de acesso para o seu destino cf (ou use --verbose na linha de comando de login acima para vê-lo registrado no seu console).
Então você pode fazer login como um servidor de recursos e recuperar os detalhes do token:
$ uaac target http://localhost:8080/uaa
$ uaac token decode
Você deve ver seu nome de usuário e o id do cliente da concessão original do token no stdout, por exemplo:
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
Este comando assume que existe um banco de dados MySQL disponível com as configurações padrão de acesso e responderá às seguintes configurações JDBC.
driver = 'org.mariadb.jdbc.Driver'
url = 'jdbc:mysql://localhost:3306/uaa'
user = 'root'
password = 'changeme'
schemas = ['uaa']
De maneira semelhante, se você executar o comando
$ ./gradlew -Dspring.profiles.active=default,postgresql run
Ele usa as configurações definidas como
driver = 'org.postgresql.Driver'
url = 'jdbc:postgresql:uaa'
user = 'root'
password = 'changeme'
Essas configurações são duplicadas em dois lugares para a integração Gradle. Elas são definidas como padrão nos arquivos de configuração Spring XML e são definidas no arquivo build.gradle principal. A razão pela qual estão no arquivo de compilação Gradle é para que, durante a execução, o Gradle execute sempre a tarefa flywayClean antes de iniciar o aplicativo UAA. Se você não quiser limpar o banco de dados, pode definir a variável
-Dflyway.clean=false
como parte da sua linha de comando. Isso desabilita a tarefa flywayClean no script gradle. Outra maneira de desabilitar o flywayClean é não especificar os perfis Spring na linha de comando, mas definir os perfis nos arquivos uaa.yml e login.yml.
O mesmo exemplo de linha de comando deve funcionar contra um UAA rodando no run.pivotal.io (exceto pela parte de decodificação do token, pois você não terá o segredo do cliente). Neste caso, não há necessidade de executar um servidor uaa local, então simplesmente peça ao endpoint de login externo para informá-lo sobre o sistema:
$ curl -H "Accept: application/json" login.run.pivotal.io
{
"prompts":{"username":["text","Username"],
"password":["password","Password"]
}
}
Então você pode tentar fazer login com a gem ruby UAA. Certifique-se de ter ruby 1.9, então
$ gem install cf-uaac
$ uaac target uaa.run.pivotal.io
$ uaac token get [yourusername] [yourpassword]
(ou omita o nome de usuário / senha para ser solicitado).
Isso autentica e obtém um token de acesso do servidor usando a concessão implícita OAuth2, a mesma usada por um cliente como o CF.
Você pode executar os testes de integração com