위험한 권한 설정 (Dangerous Permissions)

Incorrect Permission Assignment for Critical Resource

설명

애플리케이션이 RuntimePermission 또는 ReflectPermission을 과도하게 허용할 경우, 공격자가 악용하여 보안 체계를 우회할 수 있습니다. 특히, createClassLoadersuppressAccessChecks 권한을 부여하면 실행 환경이 손상될 수 있으며, 악성 코드가 동적으로 로드될 가능성이 있습니다.

잠재적 영향

  • 임의 코드 실행: 공격자가 악성 클래스를 로드하여 실행할 수 있음.

  • 보안 검사를 우회: suppressAccessChecks 권한을 부여하면 Java의 접근 제어 메커니즘을 우회할 수 있음.

  • 보안 샌드박스 탈출: 보안 제한이 적용된 환경에서도 민감한 내부 API를 호출할 가능성이 있음.

해결 방법

  1. 불필요한 권한 제거

    • RuntimePermission("createClassLoader")ReflectPermission("suppressAccessChecks") 권한을 제거합니다.

  2. 보안 정책 적용

    • 권한이 필요한 경우, 최소 권한 원칙을 적용하여 반드시 필요한 경우에만 허용합니다.

  3. 정적 분석 도구 활용

    • 코드 내에서 위험한 권한이 설정되지 않았는지 정기적으로 검사합니다.

취약한 코드 및 안전한 코드 예시

취약한 코드

안전한 코드

설명:

  • 취약한 코드:

    • RuntimePermission("createClassLoader")을 허용하여 공격자가 자체적인 클래스 로더를 만들어 악성 클래스를 로드할 수 있음.

    • ReflectPermission("suppressAccessChecks")을 허용하여 보호된 필드 및 메서드에 접근할 수 있음.

  • 안전한 코드:

    • 불필요한 권한을 제거하여 보안 강화를 수행.

참조

Last updated