안전하지 않은 임시 파일 생성

Insecure Temporary File Creation

설명

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)을 사용하여 파일이 안전하게 생성되고 자동으로 삭제되도록 할수도 있습니다.

참조