본문으로 건너뛰기
>_ITDITD웹 보안 플랫폼

보안 가이드

osv-scanner 설치와 사용법: 의존성에서 CVE 찾아내기

osv-scanner는 락파일을 읽어 의존성에 알려진 취약점(CVE)이 있는지 기계적으로 점검하는 무료 도구입니다. Go/Homebrew/Scoop/Docker로 설치하고, 락파일이나 컨테이너를 스캔하고, CI에 연동하며, osv-scanner·npm/pnpm audit·Dependabot 중 무엇을 쓸지 — 본 사이트의 운영 관점으로 정리합니다.

게시 2026-06-11 업데이트 2026-06-11 5분 읽기

대상: 자기 앱의 의존성에 알려진 취약점(CVE)이 숨어 있지 않은지 확인하고 싶은 모든 사람, 특히 "AI의 도움으로 만들었는데 의존성 안전이 불안하다"는 경우. 공격 절차는 없습니다 — 오직 방어: 자기 자신의 발밑(자기 락파일) 점검뿐입니다.

본 사이트의 견해: 올바른 도구는 당신의 환경이 결정한다

솔직히 본 사이트 자신은 osv-scanner가 아니라 pnpm audit을 씁니다(본 사이트는 GitHub에 저장소를 두지 않고 트리가 단일 npm이라, 번들된 audit으로 충분합니다). osv-scanner가 정답이 되는 경우는 ① 여러 생태계(npm + PyPI + Go…) ② GitHub 의존성 없는 독립 스캔이 필요 ③ 점검할 컨테이너 이미지가 있음일 때입니다. 인기 있어서가 아니라 — 당신의 환경에 맞기 때문에 고르세요.

1. osv-scanner란

Go로 작성된 Google제 오픈소스 스캐너입니다. 취약점 데이터는 언어를 가로지르는 공개 취약점 데이터베이스 OSV.dev에서 옵니다. npm audit 같은 언어 한정 도구와의 결정적 차이는 폭입니다: npm, PyPI(Python), Go, Rust, Maven(Java) 등 여러 락파일을 읽습니다.

무료
라이선스 / 데이터 소스
다중
npm/PyPI/Go/Rust +
OSV.dev
취약점 데이터
수 분
설치 소요 시간

원리는 단순합니다: 락파일에서 실제로 해석된 버전을 열거하고, 각 패키지+버전을 OSV와 대조해 해당 CVE와 수정 버전을 돌려줍니다. 매니페스트(package.json^ 하한)가 아니라 락파일을 읽는다는 점이 중요합니다 — 이는 실행 중인 버전으로 판단한다는 원칙과 들어맞습니다.

2. 설치하기

OS와 취향에 맞는 것을 고르세요 — 모두 공식 지원입니다.

Homebrew (macOS / Linux)

brew install osv-scanner

Scoop (Windows)

scoop install osv-scanner

Go

go install github.com/google/osv-scanner/v2/cmd/osv-scanner@latest

Binary / Docker

download from releases, or ghcr.io/google/osv-scanner
설치는 한 줄 — 하나만 고르세요. go install은 Go 1.26+ 필요.

아무것도 설치하지 않고 CI에서만 쓰고 싶다면, Docker 이미지에서 바로 실행하세요.

# confirm it's installed
osv-scanner --version

3. 실행하기

주로 "디렉터리 전체를 재귀 스캔"하거나 "락파일을 지정"하는 두 가지입니다.

# scan the whole project recursively (auto-detects lockfiles)
osv-scanner scan -r ./
 
# name a lockfile (npm / pnpm / yarn, etc.)
osv-scanner scan -L pnpm-lock.yaml
 
# emit JSON (to feed CI or another tool)
osv-scanner scan -L package-lock.json --format json
 
# inspect a container image
osv-scanner scan image my-app:latest

Docker로 실행하기(설치 불필요):

docker run --rm -v "$(pwd):/src" ghcr.io/google/osv-scanner:latest scan -r /src

출력 읽기

적중 항목마다 패키지 이름, 현재 버전, CVE/Advisory ID, 그리고 수정 버전이 나옵니다. 할 일은 하나입니다: 수정 버전 이상으로 올리고, 락파일을 갱신하고, 다시 실행해 사라졌는지 확인하는 것. CVE를 더 파고들려면(심각도, 익스플로잇 현황) ID를 CVE/KEV 조회에 붙여넣어 CVSS와 실제로 악용되고 있는지(KEV)를 한 화면에서 확인하세요.

전부 한 번에 고칠 필요는 없다

목록이 길다고 모든 것을 내던질 필요는 없습니다. "실제로 악용되고 있는가(KEV)"와 "CVSS가 얼마나 높은가"를 곱해 우선순위를 매기세요. 활발히 악용되는 중간 점수가, 결코 닿지 않는 경로의 높은 점수보다 우선입니다. 수정의 전체 접근법은 Next.js CVE 위생에 정리되어 있습니다.

4. 지속화하기(CI / cron에 연동)

손으로 한 번 돌리는 것은 무의미합니다. 모든 빌드 전 또는 cron으로 매일 돌 때 효과가 납니다. osv-scanner는 취약점을 찾으면 0이 아닌 코드로 종료하므로, CI 단계에 넣어두면 위험한 의존성이 끼어드는 순간 빌드가 멈춥니다.

1

CI 단계로 한 줄 추가

테스트 주변에 osv-scanner scan -r ./를 추가하세요. 0이 아닌 종료가 파이프라인을 실패시킵니다 — 위험한 의존성이 머지 전에 막힙니다.
2

GitHub라면 공식 Action도 가능

저장소가 GitHub에 있다면 google/osv-scanner-action도 선택지입니다. 하지만 독립 실행, GitHub 비의존 실행이야말로 osv-scanner의 강점입니다.
3

GitHub가 없다면 cron을 쓴다

배포 서버나 로컬 cron에서 매일 돌리고, 적중 항목을 로그나 이메일로 보내세요. 본 사이트는 모든 배포 전 + 매일 cron으로 의존성 감사를 돌립니다(아래).

5. 도구 간 선택하기

올바른 수는 "언제나 osv-scanner"가 아니라 — 당신의 환경에 가장 자연스러운 것입니다.

osv-scanner가 맞는 경우

  • npm 외에 여러 가지를 섞는다(PyPI / Go / Rust / Java, 다중 언어)
  • GitHub 비의존 독립 스캔을 원한다(cron, 임의의 CI)
  • 컨테이너 이미지를 점검하고 싶다
  • 무료를 유지하고 싶다, 공개 데이터 소스(OSV.dev) 위에서

억지로 쓸 필요는 없다

  • 단일 npm/pnpm 프로젝트 → 번들된 **npm audit / pnpm audit**으로 충분한 경우가 많다
  • GitHub 중심 작업 → Dependabot이 PR까지 열어준다
  • "인기 있어서" → 그건 선택 이유가 아니다

요컨대 osv-scanner, pnpm audit, Dependabot은 경쟁자가 아니라 — 역할이 다른 도구입니다. 언어를 가로지르는 폭과 GitHub 비의존이 필요한가? osv-scanner. 단일 npm? 번들된 audit. GitHub 중심? Dependabot — 그리고 겹쳐 쓸 수도 있습니다. 중요한 것은 "셋 중 적어도 하나는 항상, 자동으로 돌린다"입니다. 공급망 오염(예: Codecov 침해xz-utils 백도어)에 맞서 지속적인 의존성 점검은 1차 방어선입니다.

본 사이트는 직접 어떻게 하는가

본 사이트는 의존성 자가 감사를 **모든 배포 전 + 매일 cron으로 pnpm audit**을 통해 돌립니다(high/critical이면 빌드 실패 후 이메일 발송). osv-scanner를 고르지 않은 이유는 본 사이트가 GitHub에 저장소를 두지 않고 트리가 단일 npm이기 때문입니다 — "무료, 추가 바이너리 없음, GitHub 비의존"은 이미 pnpm audit으로 충족됩니다. 이는 우리가 쓴 표준을 우리 자신에게 적용한 것이며, 제품 신뢰성의 일부입니다. 그리고 지금 당장, 설치 없이 한 번 시험해 보고 싶다면, 브라우저만으로 동작하는 의존성 취약점 스캐너도 제공합니다(락파일을 붙여넣기만 하면 되고, 아무것도 페이지를 떠나지 않습니다).

다음으로 읽기

FAQ

Qosv-scanner는 무슨 일을 하나요?
A

프로젝트의 락파일(package-lock.json / pnpm-lock.yaml 등)을 읽은 뒤, 해석된 의존성 버전을 Google의 OSV.dev 데이터베이스와 대조해 알려진 취약점(CVE)을 점검합니다. 공격 도구가 아니라 — 당신 자신의 발밑을 방어적으로 점검하는 도구입니다.

QDependabot과 무엇이 다른가요?
A

Dependabot은 저장소가 GitHub에 있다고 전제하고 해당 CVE에 맞는 PR을 열어주는 GitHub 전용 기능입니다. osv-scanner는 GitHub 의존성이 없는 독립 실행 바이너리입니다 — 로컬에서, 어떤 CI에서든, cron에서든 실행할 수 있습니다. GitHub를 쓰지 않는 환경과 다중 언어 트리에 잘 맞습니다.

Qnpm audit / pnpm audit으로 충분하지 않나요?
A

단일 npm/pnpm 프로젝트라면 번들된 audit으로 충분한 경우가 많습니다. osv-scanner는 npm, PyPI, Go, Rust 등을 섞어 쓰거나, 추가 도구·GitHub 의존성 없이 독립 스캔을 원할 때 빛을 발합니다. 데이터 소스(OSV.dev)도 무료입니다.