
CVE-2016-4468
UAA — это мультитенантный сервис управления идентификацией, используемый в Cloud Foundry, но также доступный как автономный OAuth2-сервер. Его основная роль — выступать в качестве OAuth2-провайдера, выпуская токены для клиентских приложений, которые они используют при выполнении действий от имени пользователей Cloud Foundry. Он также может аутентифицировать пользователей с их учетными данными Cloud Foundry и может выступать в качестве SSO-сервиса, используя эти (или другие) учетные данные. Он имеет конечные точки для управления учетными записями пользователей и регистрации OAuth2-клиентов, а также различные другие функции управления.
Требования:
Если это сработает, значит, всё в порядке:
$ git clone git://github.com/cloudfoundry/uaa.git
$ cd uaa
$ ./gradlew run
Все приложения работают вместе, запущенные на одном порту
(8080): /uaa, /app и /api.
UAA будет вести журнал в файле uaa.log, который можно найти с помощью следующей команды:-
$ sudo find / -name uaa.log
который вы найдете в каталоге, похожем на:-
/private/var/folders/7v/518b18d97_3f4c8fzxphy6f8zcm51c/T/cargo/conf/logs/
Вы также можете собрать приложение и отправить его в Cloud Foundry, например. Рекомендуемый способ — использовать манифест, но вы можете сделать всё из командной строки.
$ ./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
В шагах выше замените:
myuaa на уникальное имя приложения2.3.2-SNAPSHOT на соответствующую метку версии из вашей сборки<domain> — это домен вашего приложения. В будущем мы будем получать его из системного окруженияСначала запустите сервер UAA, как описано выше:
$ ./gradlew run
Затем откройте другой терминал и из корневого каталога проекта запросите у конечной точки входа информацию о системе:
$ 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"]
}
}
Затем вы можете попробовать войти в систему с помощью ruby-gem'а UAA. Убедитесь, что у вас есть ruby 1.9, затем
$ gem install cf-uaac
$ uaac target http://localhost:8080/uaa
$ uaac token get marissa koala
(или не указывайте имя пользователя / пароль, чтобы система запросила их).
Это выполняет аутентификацию и получает от сервера токен доступа с использованием
неявного предоставления OAuth2, аналогично подходу, предназначенному для такого клиента, как CF.
Токен хранится в ~/.uaac.yml, поэтому загляните в этот файл
и извлеките токен доступа для вашего целевого cf (или используйте
--verbose в приведенной выше командной строке входа, чтобы увидеть его в журнале вашей
консоли).
Затем вы можете войти в систему как сервер ресурсов и получить сведения о токене:
$ uaac target http://localhost:8080/uaa
$ uaac token decode
В stdout вы должны увидеть ваше имя пользователя и client id исходного предоставления токена, например:
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
Эта команда предполагает, что доступна база данных MySQL с настройками доступа по умолчанию, и будет использовать следующие настройки JDBC:
driver = 'org.mariadb.jdbc.Driver'
url = 'jdbc:mysql://localhost:3306/uaa'
user = 'root'
password = 'changeme'
schemas = ['uaa']
Аналогичным образом, если вы выполните команду
$ ./gradlew -Dspring.profiles.active=default,postgresql run
она использует настройки, определенные как
driver = 'org.postgresql.Driver'
url = 'jdbc:postgresql:uaa'
user = 'root'
password = 'changeme'
Эти настройки продублированы в двух местах для интеграции с Gradle. Они определены как значения по умолчанию в XML-файлах конфигурации Spring, а также в основном файле build.gradle. Причина их наличия в файле сборки Gradle в том, что Gradle всегда выполняет задачу flywayClean перед запуском приложения UAA. Если вы не хотите очищать БД, вы можете задать переменную
-Dflyway.clean=false
в составе командной строки. Это отключает задачу flywayClean в скрипте gradle. Другой способ отключить flywayClean — не указывать профили Spring в командной строке, а задать профили в файлах uaa.yml и login.yml.
Тот же пример с командной строкой должен работать с UAA, запущенным на run.pivotal.io (за исключением части декодирования токена, поскольку у вас не будет секрета клиента). В этом случае нет необходимости запускать локальный сервер uaa, поэтому просто запросите у внешней конечной точки входа информацию о системе:
$ curl -H "Accept: application/json" login.run.pivotal.io
{
"prompts":{"username":["text","Username"],
"password":["password","Password"]
}
}
Затем вы можете попробовать войти в систему с помощью ruby-gem'а UAA. Убедитесь, что у вас есть ruby 1.9, затем
$ gem install cf-uaac
$ uaac target uaa.run.pivotal.io
$ uaac token get [yourusername] [yourpassword]
(или не указывайте имя пользователя / пароль, чтобы система запросила их).
Это выполняет аутентификацию и получает от сервера токен доступа с использованием неявного предоставления OAuth2, точно так же, как это делает клиент типа CF.
Вы можете запустить интеграционные тесты с помощью