Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
cloudfoundry_uaa — CVE-2016-4468 | Kitploit
도구/GitHubGitHub/shanika04/cloudfoundry_uaa
Authentication & AuthorizationCloud Infrastructure SecurityCloud SecurityDevSecOpsIdentity & Access Management (IAM)API Security
GitHubshanika04/cloudfoundry_uaa

cloudfoundry_uaa

CVE-2016-4468

저장소 보기
5년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
# CloudFoundry 사용자 계정 및 인증(UAA) 서버

Build Status Coverage Status

UAA는 Cloud Foundry에서 사용되는 멀티 테넌트 ID 관리 서비스이지만, 독립형 OAuth2 서버로도 사용할 수 있습니다. 주요 역할은 OAuth2 공급자로, 클라이언트 애플리케이션이 Cloud Foundry 사용자를 대신하여 작업할 때 사용할 토큰을 발급하는 것입니다. 또한 Cloud Foundry 자격 증명을 사용하여 사용자를 인증할 수 있으며, 해당 자격 증명(또는 다른 자격 증명)을 사용하여 SSO 서비스로 작동할 수 있습니다. 사용자 계정 관리 및 OAuth2 클라이언트 등록을 위한 엔드포인트와 다양한 기타 관리 기능을 제공합니다.

관련 정보

  • 토큰: 토큰, 범위 및 권한에 대한 참고
  • 기술 포럼: cf-dev 메일링 리스트
  • 문서: docs/
  • API 문서: UAA-APIs.rst
  • 명세: OAuth 2 권한 부여 프레임워크
  • LDAP: UAA LDAP 통합

빠른 시작

요구 사항:

  • Java 8

이것이 작동하면 바로 사용할 수 있습니다:

root@kitploit:~
$ git clone git://github.com/cloudfoundry/uaa.git
$ cd uaa
$ ./gradlew run

모든 앱은 동일한 포트(8080)에서 /uaa, /app 및 /api로 함께 실행됩니다.

UAA는 uaa.log라는 파일에 로그를 기록하며, 다음 명령을 사용하여 찾을 수 있습니다:-

root@kitploit:~
$ sudo find / -name uaa.log

해당 파일은 다음과 같은 위치에서 찾을 수 있습니다:-

root@kitploit:~
/private/var/folders/7v/518b18d97_3f4c8fzxphy6f8zcm51c/T/cargo/conf/logs/

Cloud Foundry에 배포

앱을 빌드하여 Cloud Foundry에 푸시할 수도 있습니다. 예를 들어, 권장하는 방법은 매니페스트 파일을 사용하는 것이지만, 명령줄에서 모든 작업을 수행할 수 있습니다.

root@kitploit:~
$ ./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_CONFIG_YAML에 전체 구성 YAML이 포함된 구성 매니페스트를 제공할 수도 있습니다.

로컬 서버에서의 명령줄 사용 데모

먼저 위에서 설명한 대로 UAA 서버를 실행합니다:

root@kitploit:~
$ ./gradlew run

그런 다음 다른 터미널을 시작하고 프로젝트 기본 디렉터리에서 로그인 엔드포인트에 시스템 정보를 요청합니다:

root@kitploit:~
$ 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"]
  }
}

그런 다음 UAA 루비 젬을 사용하여 로그인을 시도할 수 있습니다. ruby 1.9가 설치되어 있는지 확인한 다음:

root@kitploit:~
$ gem install cf-uaac
$ uaac target http://localhost:8080/uaa
$ uaac token get marissa koala

(또는 사용자 이름/비밀번호를 생략하면 입력하라는 메시지가 표시됩니다).

이 과정은 OAuth2 암시적 승인(implicit grant)을 사용하여 서버에서 액세스 토큰을 인증하고 얻습니다. 이는 CF와 같은 클라이언트에 의도된 접근 방식과 유사합니다. 토큰은 ~/.uaac.yml에 저장되므로 해당 파일을 살펴보고 cf 대상에 대한 액세스 토큰을 찾아내십시오 (또는 위의 로그인 명령줄에 --verbose를 사용하여 콘솔에 기록된 토큰을 확인할 수 있습니다).

그런 다음 리소스 서버로 로그인하여 토큰 세부 정보를 검색할 수 있습니다:

root@kitploit:~
$ uaac target http://localhost:8080/uaa
$ uaac token decode

표준 출력에서 사용자 이름과 원래 토큰 부여의 클라이언트 ID를 볼 수 있습니다. 예:

root@kitploit:~
  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

기본 MySQL 및 PostgreSQL 설정에 대한 로컬 시스템 실행(및 Flyway 마이그레이션 스크립트 정보)

root@kitploit:~
$ ./gradlew -Dspring.profiles.active=default,mysql run

이 명령은 액세스에 대한 기본 설정으로 MySQL 데이터베이스를 사용할 수 있다고 가정하며 다음 JDBC 설정에 응답합니다.

root@kitploit:~
driver = 'org.mariadb.jdbc.Driver'
url = 'jdbc:mysql://localhost:3306/uaa'
user = 'root'
password = 'changeme'
schemas = ['uaa']

마찬가지로 다음 명령을 실행하면

root@kitploit:~
$ ./gradlew -Dspring.profiles.active=default,postgresql run

다음과 같이 정의된 설정을 사용합니다.

root@kitploit:~
driver = 'org.postgresql.Driver'
url = 'jdbc:postgresql:uaa'
user = 'root'
password = 'changeme'

이 설정은 Gradle 통합을 위해 두 곳에 중복되어 있습니다. Spring XML 구성 파일에 기본값으로 정의되어 있으며, 기본 build.gradle 파일에도 정의되어 있습니다. 이들이 Gradle 빌드 파일에 있는 이유는 UAA 애플리케이션을 시작하기 전에 Gradle이 항상 flywayClean 작업을 실행하도록 하기 위해서입니다. DB를 정리하지 않으려면 다음 변수를 정의할 수 있습니다.

root@kitploit:~
-Dflyway.clean=false

이를 명령줄의 일부로 지정하십시오. 그러면 Gradle 스크립트에서 flywayClean 작업이 비활성화됩니다. flywayClean을 비활성화하는 또 다른 방법은 명령줄에서 Spring 프로파일을 지정하지 않고 uaa.yml 및 login.yml 파일에 프로파일을 설정하는 것입니다.

run.pivotal.io에서의 명령줄 사용 데모

동일한 명령줄 예제는 run.pivotal.io에서 실행 중인 UAA에 대해서도 작동합니다(클라이언트 시크릿이 없기 때문에 토큰 디코딩 부분은 제외). 이 경우 로컬 UAA 서버를 실행할 필요가 없으므로 외부 로그인 엔드포인트에 시스템 정보를 요청하기만 하면 됩니다:

root@kitploit:~
$ curl -H "Accept: application/json" login.run.pivotal.io
{
  "prompts":{"username":["text","Username"],
    "password":["password","Password"]
  }
}

그런 다음 UAA 루비 젬을 사용하여 로그인을 시도할 수 있습니다. ruby 1.9가 설치되어 있는지 확인한 다음:

root@kitploit:~
$ gem install cf-uaac
$ uaac target uaa.run.pivotal.io
$ uaac token get [yourusername] [yourpassword]

(또는 사용자 이름/비밀번호를 생략하면 입력하라는 메시지가 표시됩니다).

이 과정은 OAuth2 암시적 승인을 사용하여 서버에서 액세스 토큰을 인증하고 얻습니다. 이는 CF와 같은 클라이언트가 사용하는 것과 동일합니다.

통합 테스트

다음 명령으로 통합 테스트를 실행할 수 있습니다:

root@kitploit:~
$ ./gradlew integrationTest

이 명령은 로컬 Apache Tomcat 인스턴스에서 실행 중인 UAA 서버에 대해 통합 테스트를 실행합니다. 예를 들어 서비스 URL은 기본적으로 http://localhost:8080/uaa로 설정됩니다.

CLOUD_FOUNDRY_CONFIG_PATH를 지정하여 URL을 변경할 수 있는 uaa.yml을 읽어올 수 있으며, (적절한 경우) 서버 실행을 위한 컨텍스트 루트를 설정할 수 있습니다(자세한 내용은 아래 참조).

사용자 지정 YAML 구성

런타임 매개변수를 수정하려면 uaa.yml을 제공할 수 있습니다. 예:

root@kitploit:~
$ cat > /tmp/config/uaa.yml
uaa:
  host: uaa.appcloud21.dev.mozycloud
  test:
    username: [email protected] # defaults to [email protected]
    password: changeme
    email: [email protected]

그런 다음 uaa/uaa 디렉터리에서:

root@kitploit:~
$ CLOUD_FOUNDRY_CONFIG_PATH=/tmp/config ./gradlew test

웹앱은 시작 시 다음 위치에서 YAML 콘텐츠를 찾습니다(나중 항목이 이전 항목을 재정의합니다).

root@kitploit:~
classpath:uaa.yml
file:${CLOUD_FOUNDRY_CONFIG_PATH}/uaa.yml
file:${UAA_CONFIG_FILE}
${UAA_CONFIG_URL}
System.getEnv('UAA_CONFIG_YAML') -> environment variable, if set must contain valid Yaml

예를 들어, UAA를 Cloud Foundry 애플리케이션으로 배포하려면 다음과 같은 애플리케이션 매니페스트를 제공할 수 있습니다:

root@kitploit:~
---
  applications:
  - name: standalone-uaa-cf-war
    memory: 512M
    instances: 1
    host: standalone-uaa
    path: cloudfoundry-identity-uaa-3.0.0-SNAPSHOT.war
    env:
      JBP_CONFIG_SPRING_AUTO_RECONFIGURATION: '[enabled: false]'
      JBP_CONFIG_TOMCAT: '{tomcat: { version: 7.0.+ }}'
      SPRING_PROFILES_ACTIVE: hsqldb,default
      UAA_CONFIG_YAML: |
        uaa.url: http://standalone-uaa.cfapps.io
        login.url: http://standalone-uaa.cfapps.io
        smtp:
          host: mail.server.host
          port: 3535

또는 대안으로, set-env 명령을 사용하여 환경 변수에 대한 YAML 구성을 문자열로 설정할 수 있습니다:

root@kitploit:~
cf set-env sample-uaa-cf-war UAA_CONFIG_YAML '{ uaa.url: http://standalone-uaa.myapp.com, login.url: http://standalone-uaa.myapp.com, smtp: { host: mail.server.host, port: 3535 } }'

또한 UAA가 읽는 모든 단순 유형 속성은 시스템 환경 변수 자체로 완전히 확장되어 읽힐 수 있습니다. uaa.url이 UAA_URL이라는 환경 변수로 변환되는 방식을 확인하십시오.

root@kitploit:~
---
  applications:
  - name: standalone-uaa-cf-war
    memory: 512M
    instances: 1
    host: standalone-uaa
    path: cloudfoundry-identity-uaa-3.0.0-SNAPSHOT.war
    env:
      JBP_CONFIG_SPRING_AUTO_RECONFIGURATION: '[enabled: false]'
      JBP_CONFIG_TOMCAT: '{tomcat: { version: 7.0.+ }}'
      SPRING_PROFILES_ACTIVE: hsqldb,default
      UAA_URL: http://standalone-uaa.cfapps.io
      LOGIN_URL: http://standalone-uaa.cfapps.io
      UAA_CONFIG_YAML: |
        smtp:
          host: mail.server.host
          port: 3535

Gradle을 사용하여 PostgreSQL 또는 MySQL로 테스트

기본 uaa 단위 테스트(./gradlew test integrationTest)는 hsqldb를 사용합니다.

PostgreSQL을 사용하여 단위 테스트를 실행하려면:

root@kitploit:~
$ ./gradlew -Dspring.profiles.active=default,postgresql test integrationTest

선택적으로 Spring 프로파일을 uaa.yml 파일에 구성할 수 있습니다:

root@kitploit:~
 $ echo "spring_profiles: default,postgresql" > src/main/resources/uaa.yml

MySQL을 사용하여 단위 테스트를 실행하려면:

root@kitploit:~
$ ./gradlew -Dspring.profiles.active=default,mysql test integrationTest

common 및 scim 모듈의 데이터베이스 구성은 Spring XML 구성 파일에 기본값으로 정의되어 있습니다. uaa.yml에서 구성하여 변경할 수 있습니다.

기본값은 다음과 같습니다:

root@kitploit:~
PostgreSQL: User: root Password: changeme Database: uaa Host: localhost Port: 5432
MySQL:      User: root Password: changeme Database: uaa Host: localhost Port: 3306

구성 요소

실제로 여기에는 여러 프로젝트가 있습니다. 주요 uaa 서버 애플리케이션, 클라이언트 라이브러리 및 일부 샘플이 포함됩니다:

  1. uaa - 손쉬운 배포를 위한 WAR 프로젝트

  2. server - UAA의 REST API 구현(SCIM 포함) 및 UI를 포함하는 JAR 프로젝트

  3. model - 클라이언트 라이브러리와 서버에서 모두 사용되는 JAR 프로젝트

  4. client-lib - Java 클라이언트 API를 제공하는 JAR 프로젝트

  5. api (샘플) - 배포된 앱의 목록을 반환하는 OAuth2 리소스 서비스

  6. app (샘플) - 위의 두 가지를 모두 사용하는 사용자 애플리케이션

CloudFoundry 용어로 설명하면:

  • uaa는 OAuth2 액세스 토큰을 발급하여 백엔드 서비스와 앱에 대한 인증 서비스 및 권한 위임을 제공합니다.

  • api는 리소스 소유자(최종 사용자)를 대신하여 다른 애플리케이션이 액세스하려는 리소스를 제공하는 서비스입니다.

  • app은 사용자를 대신하여 Single Sign-On 및 api 서비스 액세스가 필요한 웹앱입니다.

코드 구성

프로젝트는 클라이언트, 모델, 서버 등의 수평 계층으로 구성됩니다. 이 모든 프로젝트 내에서 Java 패키지는 영역, 공급자, 클라이언트 등의 내부 서비스를 중심으로 수직적으로 구성됩니다.

UAA 서버

인증 서비스는 uaa입니다. 일반적인 Spring MVC 웹앱입니다. Tomcat 또는 선택한 컨테이너에 일반적인 방식으로 배포하거나, ./gradlew run을 실행하여 소스 트리의 uaa 디렉터리에서 직접 실행할 수 있습니다. Gradle로 실행하면 포트 8080에서 수신하며 URL은 http://localhost:8080/uaa입니다.

UAA 서버는 UAA-APIs 문서에 정의된 API를 지원합니다. 요약하면:

  1. OAuth2 /oauth/authorize 및 /oauth/token 엔드포인트

  2. 필요한 로그인 프롬프트를 조회할 수 있는 /login_info 엔드포인트

  3. 리소스 서버가 OAuth2 클라이언트가 제출한 액세스 토큰에 대한 정보를 얻을 수 있는 /check_token 엔드포인트

  4. 리소스 서버가 토큰 서명을 검증하기 위한 검증 키를 얻을 수 있는 /token_key 엔드포인트

  5. SCIM 사용자 프로비저닝 엔드포인트

  6. 인증 /userinfo를 지원하는 OpenID Connect 엔드포인트. 부분적인 OpenID 지원.

명령줄 클라이언트는 UAA-API 문서에 설명된 대로 자격 증명을 /oauth/authorize 엔드포인트에 직접 제출하여 인증을 수행할 수 있습니다. Spring Security OAuth에는 클라이언트가 Java인 경우 복잡한 작업을 처리할 수 있는 ImplicitAccessTokenProvider가 있습니다.

기본적으로 uaa는 컨텍스트 루트 /uaa로 시작됩니다.

사용 사례

  1. 인증

    root@kitploit:~
     GET /login
    

    기본 양식 로그인 인터페이스입니다.

  2. OAuth2 토큰 부여 승인

    root@kitploit:~
     GET /oauth/authorize?client_id=app&response_type=code...
    

    표준 OAuth2 권한 부여 엔드포인트입니다.

  3. 액세스 토큰 얻기

    root@kitploit:~
     POST /oauth/token
    

    표준 OAuth2 권한 부여 엔드포인트입니다.

구성

애플리케이션에는 Spring XML의 자리 표시자에 기본값을 제공하는 uaa.yml과 login.yml이라는 두 개의 구성 파일이 있습니다. XML에서 ${placeholder.name}이 보이는 곳마다 동일한 이름의 시스템 속성(JVM에 -D 지정) 또는 사용자 지정 uaa.yml이나 login.yml(위에서 설명한 대로)을 제공하여 재정의할 수 있습니다.

uaa.yml과 login.yml은 시작 중에 하나의 구성으로 병합됩니다.

구성 파일의 모든 비밀번호와 클라이언트 시크릿은 일반 텍스트이지만, UAA 데이터베이스에는 BCrypt로 암호화되어 삽입됩니다.

향후에는 일반 텍스트 비밀번호를 지정하지 않아도 되도록 bcrypt 형식으로 비밀번호를 제공할 수 있게 될 것입니다.

사용자 계정 데이터

기본값은 단일 테스트 사용자로 미리 채워진 인메모리 RDBMS 사용자 저장소를 사용하는 것입니다. marissa의 비밀번호는 koala입니다.

사용자 데이터에 PostgreSQL을 사용하려면 Spring 프로파일 postgresql을 활성화하십시오.

활성 프로파일은 uaa.yml에서 다음과 같이 구성할 수 있습니다:

root@kitploit:~
spring_profiles: postgresql,default

또는 명령줄에서 PostgreSQL을 지정하십시오:

root@kitploit:~
 $ ./gradlew -Dspring.profiles.active=default,postgresql run
 

API 샘플 애플리케이션

UAA에는 두 개의 샘플 애플리케이션이 포함되어 있습니다. /api와 /app입니다.

uaa 루트 디렉터리에서 ./gradlew run을 사용하여 실행하십시오. /uaa, /api, /app 세 앱이 모두 동시에 배포됩니다.

App 샘플 애플리케이션

이 앱은 브라우저를 주 대상으로 하는 사용자 인터페이스 앱으로, 인증(즉, SSO)에는 OpenId Connect를, 액세스 부여에는 OAuth2를 사용합니다. Auth 서비스로 인증한 다음 API 서비스의 리소스에 액세스합니다. uaa 루트 디렉터리에서 ./gradlew run으로 실행하십시오.

이 애플리케이션은 UAA 서버와 Login 애플리케이션의 위치(및 존재 여부)에 따라 여러 다른 프로파일로 작동할 수 있습니다. 기본적으로 localhost:8080/uaa에서 UAA를 찾지만, UAA_PROFILE이라는 환경 변수(또는 시스템 속성)를 설정하여 변경할 수 있습니다. 애플리케이션 소스 코드(samples/app/src/main/resources)에는 해당 서버의 다양한 예상 위치로 사전 구성된 여러 속성 파일이 있습니다. 모두 application-<UAA_PROFILE>.properties 형식이며, 채택된 명명 규칙은 localhost 배포의 경우 UAA_PROFILE이 local, vcap.me 배포의 경우 vcap, 스테이징 배포(VMware VPN 내부)의 경우 staging 등입니다. 프로파일 이름은 이중으로 결합되어 있습니다(예: 로그인 서버가 UAA 서버와 다른 위치에 있는 경우 local-vcap).

사용 사례

  1. 모든 앱 보기

    root@kitploit:~
     GET /app/apps
    

    브라우저는 일련의 인증 및 액세스 부여 단계를 거쳐 리디렉션된 후(어느 시점에는 사용자가 필요 없는 암시적 단계로 축소될 수 있음), 앱 목록이 표시됩니다.

  2. 현재 로그인한 사용자 세부 정보 보기 - OpenID 공급자에서 가져온 속성 모음

    root@kitploit:~
     GET /app
    

UAA에 기여하기

커뮤니티에 참여할 수 있는 몇 가지 방법은 다음과 같습니다:

  • 메일링 리스트에서 Cloud Foundry 커뮤니티에 참여하세요. 메일링 리스트에서 질문에 응답하고 토론에 참여하여 도움을 주시기 바랍니다.
  • 버그 및 새로운 기능에 대한 github 티켓을 생성하고, 관심 있는 티켓에 댓글을 달고 투표하세요.
  • Github는 사회적 코딩을 위한 공간입니다. 코드를 작성하고 싶다면 이 저장소의 포크에서 풀 리퀘스트를 통한 기여를 권장합니다. 이 방법으로 코드를 기여하려면, 해결하려는 특정 이슈를 다루는 기존 이슈가 있다면 해당 이슈를 참조하십시오. 항상 풀 리퀘스트는 "develop" 브랜치로 제출하십시오.
  • cloudfoundry.org 블로그를 구독하여 Cloud Foundry에 관한 향후 기사를 확인하세요.

감사의 말

  • YourKit은 완전한 기능을 갖춘 Java Profiler로 오픈 소스 프로젝트를 지원합니다. YourKit, LLC는 YourKit Java Profiler 및 YourKit .NET Profiler의 제작자이며, Java 및 .NET 애플리케이션 프로파일링을 위한 혁신적이고 지능적인 도구입니다.
도구 다운로드