무결성 검증 없는 원격 코드 다운로드

무결성 검증 없는 원격 코드 다운로드

설명

원격에서 받은 스크립트나 플러그인 코드를 해시, 서명, 고정된 신뢰 체인 없이 저장하거나 실행하면 변조된 코드가 애플리케이션 권한으로 실행될 수 있습니다.

잠재적 영향

  • 네트워크 변조나 저장소 탈취로 악성 코드가 실행될 수 있습니다.
  • 배포 환경에 지속성 있는 백도어나 임의 파일이 설치될 수 있습니다.

해결 방법

  • 다운로드한 코드의 SHA-256 해시나 디지털 서명을 검증합니다.
  • 가능하면 런타임 다운로드 대신 패키지 관리자, 잠금 파일, 서명 검증을 사용합니다.

예시

변경 전

python
code = requests.get(url).text
exec(code)

변경 후

python
data = requests.get(url, timeout=5).content
digest = hashlib.sha256(data).hexdigest()
if not hmac.compare_digest(digest, expected_digest):
    raise ValueError("bad digest")

설명:

  • 변경 전: 원격에서 받은 스크립트나 플러그인 코드를 해시, 서명, 고정된 신뢰 체인 없이 저장하거나 실행하면 네트워크 변조, 저장소 탈취, DNS 변조로 악성 코드가 주입될 수 있습니다.
  • 변경 후: 다운로드한 코드의 SHA-256 해시나 디지털 서명을 고정된 신뢰 기준과 비교합니다.

참조