프론트엔드 보안 취약점 개선

Dae-Hee·2024년 12월 9일
post-thumbnail

프론트엔드 개발에서는 의존성 관리를 제대로 하지 않으면 보안 취약점이 발생할 가능성이 있다.
특히, 하위 의존성에서 발생한 문제가 상위 프로젝트로 전파될 경우,
예상치 못한 보안 위협에 노출될 수 있습니다.

이번 글에서는 프론트엔드 프로젝트의 보안 취약점을 개선하는 방법과 하위 의존성 문제를 효과적으로 관리하는 방법을 정리해 보겠습니다.

보안 체크 방법

1. Dependabot
GitHub의 Dependabot은 의존성에서 보안 취약점을 자동으로 점검하고 업데이트를 제안하는 도구입니다. 설정 파일을 통해 주기적으로 의존성을 업데이트하도록 구성할 수 있습니다.

# .github/dependabot.yml

version: 2
updates:
  - package-ecosystem: "pnpm"
    directory: "/"
    schedule:
      interval: "weekly"
보안 취약점이 있는 의존성에 대해 PR을 자동으로 생성
패키지별로 세부적인 관리 가능

2. pnpm audit
pnpm의 내장 명령어인 pnpm audit을 사용하면 의존성 트리를 점검하여 보안 취약점을 확인할 수 있습니다.

# 점검 명령어
pnpm audit

# 취약점 자동 수정
pnpm audit --fix
하위 의존성까지 점검
자동 수정이 가능한 경우 잠금 파일을 업데이트

하위 의존성에 대해

1. 하위 의존성(transitive dependencies)이란?
하위 의존성은 직접 설치한 패키지가 내부적으로 의존하는 다른 패키지를 의미합니다.
이는 패키지 간의 모듈화를 통해 기능을 재사용하기 위한 필수적인 구조입니다.

예시)

  • 직접 의존성: express
  • 하위 의존성: qs, path-to-regexp, body-parser 등

2. 하위 의존성의 보안 문제
하위 의존성에서 발생한 취약점이 상위 의존성 또는 전체 프로젝트에 영향을 줄 수 있습니다.

문제 사례)

  • lodash의 오래된 버전에서 발생한 Prototype Pollution 취약점
  • path-to-regexp의 정규 표현식 역추적 문제로 인한 DoS 공격 가능성

하위 의존성 개선 방법

1. 하위 의존성 업데이트 방법
상위 의존성 업데이트: 하위 의존성은 보통 상위 의존성의 버전에 따라 고정됩니다.
따라서 직접 의존성을 최신 버전으로 업데이트하는 것이 가장 효과적입니다.

pnpm update <패키지명>

2. 하위 의존성 강제 업데이트

  • 특정 하위 의존성을 강제로 업데이트하려면 resolutions 필드를 사용합니다.

설정 예시 (package.json) - 적용 후 재설치

{
  "resolutions": {
    "path-to-regexp": "^6.0.0"
  }
}
// 또는 pnpm 사용 시
{
  "pnpm": {
    "overrides": {
      "ws": "^8.17.1"
    }
  }
}

3. 호환성 주의사항

  • 상위 의존성과의 버전 충돌: 하위 의존성을 강제로 업데이트하면 상위 의존성이 예상한 동작을 하지 않을 수 있습니다.

  • 의존성 업데이트 후 반드시 프로젝트를 빌드하고 테스트하여 예상치 못한 문제를 방지해야 합니다.


대표적인 하위 의존성 문제와 보안 문제 예시

1. Prototype Pollution

  • 문제 패키지: lodash (특정 버전)
    설명: 객체의 프로토타입을 오염시켜 악의적인 데이터 변조 가능

2. Denial of Service (DoS)

  • 문제 패키지: path-to-regexp
    설명: 정규 표현식의 역추적 문제로 인해 CPU 사용률 급증 및 서비스 중단 가능

3. 취약한 HTTP 헤더 처리

  • 문제 패키지: ws
    많은 HTTP 헤더를 처리하는 요청으로 인해 리소스 고갈

0개의 댓글