과도한 전역 쓰기 및 읽기 권한
World-Writable File Read
설명
멀티 유저 환경에서 파일에 전역 쓰기(world-writable) 권한이 있으면, 다른 사용자가 그 파일 내용을 임의로 바꿀 수 있습니다. 애플리케이션이 해당 파일을 신뢰하고 읽으면, 공격자는 설정값이나 데이터 조작을 통해 동작을 바꾸거나 오동작을 유도할 수 있습니다. 예를 들어 설정 파일, 토큰/키 파일, 화이트리스트 등 신뢰 입력을 가정하는 파일을 월드 쓰기로 둔 뒤 읽으면, 제3자가 내용을 바꿔 서비스 설정 변조, 임의 경로 로드, 의도치 않은 외부 연결 등을 유발할 수 있습니다.
잠재적 영향
데이터 변조: 다른 사용자가 파일 내용을 바꿔 잘못된 설정/데이터로 애플리케이션 동작을 변경할 수 있음
설정 위·변조: config, allowlist 등을 조작해 기능 비활성화, 우회, 위험한 옵션 활성화를 유도할 수 있음
서비스 장애(DoS): 중요 파일을 빈 내용/쓰레기로 덮어써 애플리케이션 예외 발생 및 중단을 초래할 수 있음
보안 통제 우회: 인증/접속 제어 관련 파일을 조작해 우회 또는 권한 상승 상황을 만들 수 있음
해결 방법
최소 권한 원칙: 전역 쓰기 허용 금지. 필요 시 소유자 한정으로 설정(File.setWritable(true, true) 또는 POSIX에서 OTHERS_WRITE 제거)
안전한 생성: Files.createFile/createTempFile 후 즉시 POSIX 권한을 rw------- 등으로 제한하고 사용
읽기 전 검증/축소: 읽기 직전에 Others/Group 쓰기 권한이 있는지 점검 후 제거(setWritable(false, false) 등)
그룹/ACL 사용: 여러 사용자 쓰기가 꼭 필요하면 전역이 아닌 특정 그룹 또는 ACL로 제한
민감 파일 경로 보호: 신뢰 디렉터리(소유자만 쓰기 가능) 아래에 저장하고, 심볼릭 링크 따라가기 금지 옵션 고려
취약한 코드 및 안전한 코드 예시
취약한 코드
안전한 코드
설명:
취약한 코드: 파일에 월드 쓰기 권한을 부여한 채로 같은 파일을 신뢰하고 읽습니다. 다른 사용자가 내용을 덮어쓰거나 삭제할 수 있어 설정 변조, 잘못된 동작, 서비스 장애가 발생할 수 있습니다.
안전한 코드: 읽기 전에 Others/Group 쓰기 권한을 제거하고(최소 권한), POSIX 권한을 rw-------로 강제하여 소유자만 쓰기 가능하도록 제한했습니다. 이렇게 하면 제3자의 임의 수정이 차단되어 신뢰 가능한 입력만 읽게 됩니다.
참조
Last updated