설명
tempfile.mktemp()는 파일을 생성하지 않고 사용 가능한 이름만 반환하므로, 이후 파일을 열기 전 다른 프로세스가 같은 경로를 차지할 수 있습니다. 이러한 경쟁 조건은 안전하지 않은 임시 파일 생성으로 이어집니다. Race Condition이 발생할 경우 공격자가 생성된 임시 파일을 악용하여 데이터를 탈취하거나 덮어쓸 수 있는 위험이 있습니다.
잠재적 영향
- 데이터 유출: 공격자가 임시 파일에 접근하여 민감한 정보를 탈취할 수 있습니다.
- 데이터 변조: 공격자가 임시 파일을 덮어써서 데이터를 변조할 수 있습니다.
- 권한 상승: 공격자가 임시 파일을 조작하여 권한을 상승시킬 수 있습니다.
해결 방법
- 안전한 임시 파일 생성:
tempfile.mkstemp()또는tempfile.NamedTemporaryFile()함수를 사용하여 안전하게 임시 파일을 생성합니다. - 임시 파일 접근 제한: 임시 파일의 접근 권한을 적절히 설정하여 보안을 강화합니다.
- 임시 파일 사용 후 삭제: 임시 파일 사용 후 즉시 삭제하여 불필요한 노출을 방지합니다.
예시
변경 전
python
# Unsafe temporary file creation
import tempfile
filename = tempfile.mktemp() # Noncompliant
tmp_file = open(filename, "w+")
변경 후
tempfile.mkstemp 활용
python
# Safe temporary file creation with mkstemp
import tempfile
import os
fd, filename = tempfile.mkstemp()
try:
with os.fdopen(fd, "w+") as tmp_file:
tmp_file.write("Sensitive information")
finally:
# 사용후 파일을 삭제합니다
os.remove(filename)
tempfile.NamedTemporaryFile 활용
python
# Safe temporary file creation with NamedTemporaryFile
import tempfile
with tempfile.NamedTemporaryFile(delete=True) as tmp_file:
tmp_file.write(b"Sensitive information")
tmp_file.flush()
print(f"Temporary file created at {tmp_file.name}")
# 임시 파일 사용
tmp_file.seek(0)
data = tmp_file.read()
# `delete=True` 를 설정하였기에 임시 파일은 자동으로 삭제됩니다.
설명:
- 변경 전:
tempfile.mktemp()가 이름을 반환한 뒤open()으로 파일을 생성하기 전의 시간차에 다른 프로세스가 파일이나 링크를 먼저 만들 수 있습니다. - 변경 후:
tempfile.mkstemp()또는tempfile.NamedTemporaryFile()을 사용하여 임시 파일을 안전하게 생성할 수 있습니다. 추가로tempfile.NamedTemporaryFile(delete=True)을 사용하여 파일이 안전하게 생성되고 자동으로 삭제되도록 할수도 있습니다.