외부 입력을 통한 시스템 설정 조작 (External Configuration Control)

External Control of System or Configuration Setting

설명

애플리케이션이 사용자 입력을 기반으로 데이터베이스의 설정을 변경할 수 있도록 허용하는 경우, 공격자는 이를 악용하여 데이터베이스 구성을 조작할 수 있습니다. 예를 들어, java.sql.Connection.setCatalog()에 사용자 입력값을 전달하면 공격자가 의도하지 않은 데이터베이스로 전환할 수 있으며, 이는 데이터 손실 또는 서비스 중단을 초래할 수 있습니다.

잠재적 영향

  • 데이터베이스 조작: 공격자가 다른 데이터베이스로 연결을 변경하여 원하지 않는 데이터에 접근하거나 수정할 수 있습니다.

  • 서비스 중단: 존재하지 않는 데이터베이스로 설정하면 애플리케이션이 정상적으로 작동하지 않을 수 있습니다.

  • 권한 상승: 잘못된 데이터베이스 설정이 적용되면 공격자가 더 높은 권한을 가진 데이터베이스에 접근할 가능성이 있습니다.

해결 방법

  1. 사용자 입력을 기반으로 데이터베이스 설정을 변경하지 않기

    • 데이터베이스 설정은 애플리케이션 내부에서 정의된 값만 사용해야 합니다.

  2. 허용된 값만 선택 가능하도록 제한하기

    • 사용자 입력을 직접 사용하지 않고, 미리 정의된 목록에서 선택하도록 구현합니다.

  3. 보안 정책 적용

    • 데이터베이스 연결 설정은 애플리케이션이 시작될 때만 설정하고, 런타임 중에는 변경할 수 없도록 구성합니다.

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

취약한 코드

안전한 코드

설명:

  • 취약한 코드:

    • 사용자 입력을 검증 없이 setCatalog() 메서드에 전달하여 공격자가 임의의 데이터베이스로 변경할 수 있습니다.

  • 안전한 코드:

    • 허용된 데이터베이스 목록을 정의하고(ALLOWED_CATALOGS), 사용자 입력이 이 목록에 포함된 경우에만 setCatalog()를 실행하도록 제한합니다.

참조

Last updated