Go로 작성된 취약점 스캐너로, https://osv.dev에서 제공하는 데이터를 사용합니다.
OSV-Scanner를 사용하여 프로젝트의 의존성에 영향을 미치는 기존 취약점을 찾아보세요. OSV-Scanner는 OSV 데이터베이스에 대한 공식 지원 프론트엔드와, 프로젝트의 의존성 목록을 해당 의존성에 영향을 미치는 취약점과 연결하는 OSV-Scalibr용 CLI 인터페이스를 제공합니다.
OSV-Scanner는 다양한 프로젝트 유형, 패키지 매니저 및 기능을 지원하며, 여기에는 다음이 포함되지만 이에 국한되지는 않습니다:
OSV-Scanner는 내부적으로 확장 가능한 OSV-Scalibr 라이브러리를 사용하여 이러한 기능을 제공합니다. 현재 지원되지 않는 언어나 패키지 매니저가 있다면 기능 요청을 제출해 주세요.
기반 데이터베이스인 OSV.dev는 폐쇄 소스 보안 권고 데이터베이스 및 스캐너와 비교하여 다음과 같은 몇 가지 이점이 있습니다:
위의 모든 것은 정확하고 실행 가능한 취약점 알림으로 이어져 해결에 필요한 시간을 줄여줍니다. 자세한 내용은 OSV.dev를 확인하세요!
OSV-Scanner를 설치하려면 문서의 설치 섹션을 참조하세요. OSV-Scanner 릴리스는 GitHub 저장소의 릴리스 페이지에서 찾을 수 있습니다. 권장 방법은 플랫폼에 맞는 사전 빌드된 바이너리를 다운로드하는 것입니다. 또는 go install github.com/google/osv-scanner/v2/cmd/osv-scanner@latest를 사용하여 소스에서 빌드할 수 있습니다.
자세한 내용은 상세 문서를 읽고 OSV-Scanner 사용 방법을 알아보세요. 각 기능에 대한 자세한 정보는 이 README에서 해당 제목을 클릭하세요.
$ osv-scanner scan source -r /path/to/your/dir
이 명령은 지정된 디렉터리를 재귀적으로 스캔하여 package.json, go.mod, pom.xml 등 지원되는 패키지 파일을 찾고 발견된 취약점을 출력합니다.
OSV-Scanner는 호출 분석(call analysis)을 사용하여 취약한 함수가 프로젝트에서 실제로 사용되고 있는지 확인하는 옵션을 제공하므로 오탐(false positive)이 줄어들고 실행 가능한 알림을 받을 수 있습니다.
OSV-Scanner는 취약점 스캔을 위해 벤더링된(vendored) C/C++ 코드도 감지할 수 있습니다. 자세한 내용은 여기를 참조하세요.
OSV-Scanner는 11개 이상의 언어 생태계와 19개 이상의 잠금 파일 유형을 지원합니다. 사용 중인 생태계가 지원되는지 확인하려면 상세 문서를 참조하세요.
OSV-Scanner는 또한 컨테이너 이미지에 대한 포괄적이고 레이어 인식 스캔을 지원하여 다음 운영 체제 패키지 및 언어별 의존성의 취약점을 감지합니다.
| 배포판 지원 | 언어 아티팩트 지원 |
|---|---|
| Alpine OS | Go |
| Debian | Java |
| Ubuntu | Node |
| Python |
지원에 대한 자세한 내용은 전체 문서를 참조하세요.
사용법:
$ osv-scanner scan image my-image-name:tag

deps.dev 데이터를 사용하여 의존성의 라이선스를 확인하세요. 요약을 보려면:
osv-scanner --licenses path/to/repository
허용 라이선스 목록(SPDX 형식)과 대조하려면:
osv-scanner --licenses="MIT,Apache-2.0" path/to/directory
로컬 OSV 데이터베이스로 프로젝트를 스캔합니다. 초기 데이터베이스 다운로드 후에는 네트워크 연결이 필요 없습니다. 데이터베이스는 수동으로 다운로드할 수도 있습니다.
osv-scanner --offline --download-offline-databases ./path/to/your/dir
[!WARNING] 가이드형 수정(
fix명령)은 신뢰할 수 없는 프로젝트에서 실행할 때 위험할 수 있습니다. 패키지 매니저가 프로젝트에 지정된 스크립트를 실행하거나 외부 레지스트리를 따르도록 유발할 수 있습니다. 진행하기 전에 소스 코드와 아티팩트를 신뢰할 수 있는지 확인하세요.
OSV-Scanner는 의존성 깊이, 최소 심각도, 수정 전략, 투자 수익률 등의 기준에 따라 패키지 버전 업그레이드를 제안하는 가이드형 수정 기능을 제공합니다. 현재 다음 파일의 취약점 수정을 지원합니다:
이 기능은 비대화형(headless) CLI 명령과 대화형 모드로 사용할 수 있습니다.
$ osv-scanner fix \
--max-depth=3 \
--min-severity=5 \
--ignore-dev \
--strategy=in-place \
-L path/to/package-lock.json
$ osv-scanner fix \
-M path/to/package.json \
-L path/to/package-lock.json

OSV-Scanner는 작동 중에 다음 외부 서비스와 통신합니다:
취약점 정보의 주요 데이터 소스입니다. OSV-Scanner는 이 API를 쿼리하여 패키지의 알려진 취약점을 확인하고 벤더링된 C/C++ 의존성을 식별합니다. 전송되는 데이터에는 패키지 이름, 버전, 생태계 및 파일 해시가 포함됩니다. --offline 모드를 사용하면 네트워크 요청을 비활성화하고 대신 로컬 데이터베이스로 스캔할 수 있습니다.
보조 패키지 정보에 사용됩니다:
--licenses 플래그): 패키지의 라이선스 정보를 검색합니다전송되는 데이터에는 패키지 이름, 버전 및 생태계가 포함됩니다. 소스 코드는 전송되지 않습니다.
의존성 해석에 (deps.dev 대신) 네이티브 레지스트리를 사용할 때 OSV-Scanner는 다음을 쿼리할 수 있습니다:
| 레지스트리 | URL | 용도 |
|---|---|---|
| Maven Central | repo.maven.apache.org/maven2 | Maven 패키지 메타데이터 및 POM 파일 |
| npm Registry | registry.npmjs.org | npm 패키지 메타데이터 |
| PyPI | pypi.org | Python 패키지 메타데이터 |
버그로 보이는 문제가 있다면 GitHub 이슈 추적 시스템을 사용해 주세요. 이슈를 등록하기 전에 기존 이슈를 검색하여 이미 다루어지고 있는지 확인해 주세요.
osv-scanner에 코드 기여코드 기여 방법에 대한 문서는 CONTRIBUTING.md를 참조하세요.