외부 입력을 통한 시스템 설정 조작 (External Configuration Control)
External Control of System or Configuration Setting
설명
애플리케이션이 사용자 입력을 기반으로 데이터베이스의 설정을 변경할 수 있도록 허용하는 경우, 공격자는 이를 악용하여 데이터베이스 구성을 조작할 수 있습니다.
예를 들어, java.sql.Connection.setCatalog()에 사용자 입력값을 전달하면 공격자가 의도하지 않은 데이터베이스로 전환할 수 있으며, 이는 데이터 손실 또는 서비스 중단을 초래할 수 있습니다.
잠재적 영향
데이터베이스 조작: 공격자가 다른 데이터베이스로 연결을 변경하여 원하지 않는 데이터에 접근하거나 수정할 수 있습니다.
서비스 중단: 존재하지 않는 데이터베이스로 설정하면 애플리케이션이 정상적으로 작동하지 않을 수 있습니다.
권한 상승: 잘못된 데이터베이스 설정이 적용되면 공격자가 더 높은 권한을 가진 데이터베이스에 접근할 가능성이 있습니다.
해결 방법
사용자 입력을 기반으로 데이터베이스 설정을 변경하지 않기
데이터베이스 설정은 애플리케이션 내부에서 정의된 값만 사용해야 합니다.
허용된 값만 선택 가능하도록 제한하기
사용자 입력을 직접 사용하지 않고, 미리 정의된 목록에서 선택하도록 구현합니다.
보안 정책 적용
데이터베이스 연결 설정은 애플리케이션이 시작될 때만 설정하고, 런타임 중에는 변경할 수 없도록 구성합니다.
취약한 코드 및 안전한 코드 예시
취약한 코드
안전한 코드
설명:
취약한 코드:
사용자 입력을 검증 없이
setCatalog()메서드에 전달하여 공격자가 임의의 데이터베이스로 변경할 수 있습니다.
안전한 코드:
허용된 데이터베이스 목록을 정의하고(
ALLOWED_CATALOGS), 사용자 입력이 이 목록에 포함된 경우에만setCatalog()를 실행하도록 제한합니다.
참조
Last updated