닥터킴의 연구소

[KVE 발급 #2] 국내 주요 기업 모바일 앱 개인정보 접근 취약점 발견기 본문

사이버보안/모바일해킹

[KVE 발급 #2] 국내 주요 기업 모바일 앱 개인정보 접근 취약점 발견기

drkim7 2025. 9. 8. 01:16

안녕하세요! 이번에는 두 번째 KVE 발급 사례를 공유하려 합니다. 첫 번째 사례와 동일하게 앱에서 발견한 권한 기반 정보 접근 취약점으로 KVE를 발급받게 되었습니다. 보안상의 이유로 기업명은 비공개하며, 발견 과정을 공유해보겠습니다.


[취약점 발견 과정]

1. 사용자 프로필 시스템 분석

첫 번째 취약점을 분석하던 중, 사용자 개인정보를 관리하는 프로필 관리 시스템에서 추가적인 보안 이슈를 발견했습니다.

이 시스템은 계정 정보를 열람하고 관리할 수 있는 핵심 기능을 담당하고 있었습니다.


2. GDA4.11을 이용한 심층 리버스 엔지니어링

GDA(GJoy Dex Analysez)을 활용한 정적 분석을 통해 애플리케이션의 내부 구조를 심층 분석했습니다.

특히 API 관련 문자열과 엔드포인트 정보를 추출하는 과정에서 중요한 단서를 발견했습니다.

정적 분석간 파악한 API 목록들. 퍼징이 가능한 API 목록들이 많이 보인다.

 

의심스러운 클래스 내 사용자 관련 주요 엔드포인트 식별확인

 

 

GDA4.11 분석 결과에서 확인된 주요 발견사항입니다.

// RemoteData$EndPoint 클래스에서 발견된 API 구조
public final class RemoteData$EndPoint extends Enum {
    public static final RemoteData$EndPoint MemberInfo;
    public static final RemoteData$EndPoint Config;
    public static final RemoteData$EndPoint Splash;
    // 기타 엔드포인트들
    
    static {
        RemoteData$EndPoint.MemberInfo = new RemoteData$EndPoint(
            "MemberInfo", 1, "/api/xxxx/xxxx/xxxx/xxx/member/info"
        );
        // 다른 엔드포인트 초기화
    }
}
  • 디컴파일된 소스코드에서 전체 API 엔드포인트 구조 완전 추출
  • MemberInfo 엔드포인트에서 사용자 정보 처리 로직 식별
  • 권한 검증 로직의 클라이언트 측 구현 패턴 분석
  • 서버 통신 파라미터 구조 및 데이터 흐름 파악
  • 특히 member/xxx/xxx/info 경로에서 보안 검토 필요성 확인

3. 트래픽 분석 기법 적용

GDA 을 통해 확인된 API 구조 정보를 바탕으로 네트워크 분석 도구를 통해 실제 통신을 심층 분석했습니다.

이 과정에서 권한 검증 로직에서 구조적 취약점을 발견했습니다.


4. 권한 바운더리 취약점 식별

개인정보 열람 기능을 심화 분석한 결과, 서버 측 권한 경계 설정에서 설계 결함을 발견했습니다.

특히 사용자 신원 검증과 리소스 접근 권한 간의 연결고리에서 보안 공백이 존재했습니다.

// 발견된 권한 검증 구조 (개념적)
{
  "requestContext": {
    "authenticatedUser": true,
    "accessTarget": "[동적_리소스_식별자]",
    "permissionScope": "PROFILE_ACCESS"
  }
}

[권한 아키텍처 심층 분석]

1. Identity-Resource Binding 결함

앱의 권한 관리 구조를 리버스 엔지니어링한 결과, 사용자 신원 확인과 리소스 소유권 검증 사이에 결합 실패가 존재함을 발견했습니다.

// 추정되는 권한 검증 로직
class AccessControlManager {
    fun verifyAccess(context: RequestContext): Boolean {
        
        // 사용자 인증 확인(정상 작동)
        if (!context.isAuthenticated) return false
        
        // 리소스 소유권 확인(결함 존재)
        return hasResourcePermission(context.targetResource)
        // 실제 소유자와 요청자 일치 여부 미확인
    }
}

2. 클라이언트-서버 Trust Boundary 위반

심층 분석 결과 서버에서 클라이언트 제공 컨텍스트 정보에 대한 과도한 신뢰 관계가 형성되어 있음을 확인했습니다.

이는 전형적인 Trust Boundary Violation 사례로 분류됩니다.

https://codeql.github.com/codeql-query-help/java/java-trust-boundary-violation/

 

Trust boundary violation — CodeQL query help documentation

A trust boundary violation occurs when a value is passed from a less trusted context to a more trusted context. For example, a value that is generated by a less trusted source, such as a user, may be passed to a more trusted source, such as a system proces

codeql.github.com

 


[Exploit Vector 검증]

1. Advanced Request Manipulation

발견된 권한 검증 결함을 활용하여 정교한 요청 조작 기법을 개발했습니다.

1. 정상 사용자로 인증 및 세션 확립
2. 앱 내부 정보 수집을 통한 타겟 리소스 식별
3. 고급 요청 조작 기법을 활용한 권한 경계 우회
4. 서버 응답 분석 및 정보 추출 확인

2. Privilege Escalation 성공

개발된 익스플로잇을 통해 수평적 권한 상승 에 성공했으며, 다음과 같은 민감 정보에 무단 접근이 가능함을 확인했습니다.

  • 개인 식별 정보(PII)
  • 연락처 정보
  • 서비스 활동 이력
  • 계정 메타데이터
  • 시간 기반 활동 패턴


3. 대규모 정보 수집 가능성 검증

단일 취약점을 통한 개별 접근을 넘어, 자동화된 대량 수집 스크립트 개발 가능성을 검증했습니다.

이론적으로 전체 사용자 베이스에 대한 정보 수집이 가능한 구조였습니다.


[취약점 기술적 분석]

1. 근본 원인 분석

이번 취약점은 Broken Access Control with Context Manipulation으로 분류되며, 현대적 권한 관리 시스템의 설계 결함을 보여주는 사례입니다

 

https://www.invicti.com/blog/web-security/broken-access-control/

 

Broken Access Control: How to Detect and Prevent the #1 OWASP Top 10 Security Risk

Learn about security vulnerabilities caused by broken access control, complete with attack techniques and best practices for prevention. Discover how to secure your applications and prevent unauthorized access.

www.invicti.com

 

  • 컨텍스트 기반 인가 실패: 요청 컨텍스트와 실제 권한 간 검증 부재
  • 리소스 소유권 검증 누락: 사용자-리소스 바인딩 확인 로직 결함
  • 클라이언트 신뢰 경계 위반: 조작 가능한 클라이언트 정보에 대한 과도한 신뢰
  • 세션-권한 분리 실패: 인증된 세션과 실제 권한 범위 간 연결 오류

2. 보안 프레임워크 관점

OWASP Top 10 분류:
- A01:2021 – Broken Access Control
- A04:2021 – Insecure Design

NIST Privacy Framework:
- GOVERN-P (GV-P): Governance 실패
- CONTROL-P (CT-P): Data Processing Control 결함

3. CVSS v3.1 기준 자체 평가

평가 점수: 8.1 (높음)
- 공격 벡터: 네트워크
- 공격 복잡도: 낮음
- 필요 권한: 낮음 (인증된 사용자)
- 사용자 상호작용: 불필요  
- 영향 범위: 변경되지 않음
- 기밀성 영향: 높음
- 무결성 영향: 없음
- 가용성 영향: 없음

[Enterprise-Grade 보안 대응 방안]

1. Zero Trust 기반 권한 관리 재설계

// 권한 검증 아키텍처
@Component  
class ZeroTrustAccessController {
    
    fun validateResourceAccess(
        sessionContext: AuthenticatedSession,
        targetResource: ResourceIdentifier
    ): AccessDecision {
        
        // 세션 무결성 검증
        val validSession = sessionValidator.verify(sessionContext)
        
        // 리소스 소유권 강제 검증
        val resourceOwnership = resourceService.verifyOwnership(
            validSession.userId, targetResource
        )
        
        // 컨텍스트 일관성 검증
        val contextIntegrity = contextValidator.verify(
            validSession, targetResource
        )
        
        return AccessDecision.allow()
            .onlyIf(validSession && resourceOwnership && contextIntegrity)
    }
}

2. API Gateway 레벨 보안 정책 강화

Enterprise API Gateway에서 모든 개인정보 관련 요청에 대해 다단계 권한 검증을 수행하도록 정책을 강화해야 합니다.

# API Gateway 보안 정책 예시
security_policies:
  personal_data_access:
    - stage: "pre_validation"
      rule: "session_integrity_check"
      action: "block_if_invalid"
    - stage: "authorization"  
      rule: "resource_ownership_verification"
      action: "enforce_strict_matching"
    - stage: "post_validation"
      rule: "access_audit_logging"
      action: "comprehensive_logging"

3. 개인정보 처리 최소화 정책

Privacy by Design 원칙에 따라 API 응답에서 개인정보 노출을 최소화하고 동적 마스킹을 적용해야 합니다.


4. 실시간 이상 행위 탐지 시스템

AI/ML 기반 이상 탐지 엔진을 구축하여 비정상적인 개인정보 접근 패턴을 실시간으로 감지하고 차단하는 시스템이 필요합니다.

 


[최종 결과 및 성과]

KVE 발급 정보:

  • 취약점 번호: KVE-2025-XXXX
  • 발급 소요기간: 15일
  • 취약점 유형: Broken Access Control


[인사이트]

이번 취약점을 통해 얻은 핵심 교훈을 정리해봤습니다.

  • 컨텍스트 보안의 중요성: 단순한 인증을 넘어 요청 컨텍스트 전체의 무결성 검증 필요
  • 제로 트러스트 원칙: 클라이언트에서 오는 모든 정보는 조작 가능하다고 가정
  • 개인정보 최소화: 꼭 필요한 정보만 수집하고 노출하는 Privacy by Design
  • 권한 경계의 명확성: 사용자-리소스 간 소유권 관계의 명확한 정의와 검증

앞으로도 국내 기업들의 디지털 서비스 보안성 강화에 기여하는 연구를 지속하겠습니다.