
CVE Intel은 공개 취약점 정보와 공격 증거를 모아 패치 우선순위를 정하도록 돕는 로컬 우선 데스크톱 앱이다. Rust로 작성됐으며 명령줄 인터페이스(CLI), REST API, MCP 서버도 제공해 보안·IT·개발팀과 AI 코딩 도구가 활용할 수 있다. 제작자는 최대 40개 공개 데이터 소스를 조회하고 41개 MCP 도구를 제공하며, 계정이나 자체 서버 없이 작동한다고 설명한다.
- CVE, 프로젝트 폴더, 잠금 파일, SBOM, 컨테이너 이미지, 설치된 소프트웨어, 도메인, IP 주소, 파일 해시 등을 조회할 수 있다.
- 심각도만이 아니라 악용 가능성, CISA의 KEV 등재 여부, 공개 익스플로잇 증거를 반영해 위험도를 0~100으로 계산한다.
- 조회와 기록은 기본적으로 로컬에 저장된다. AI도 기본 설정에서는 로컬 모델을 쓰지만, 클라우드 제공자를 선택하면 질문과 조회 결과가 해당 업체로 전송된다.
저장소와 설치 파일은 CVE Intel GitHub 저장소와 최신 릴리스에서 확인할 수 있다. 제작자는 보안 분석가, IT·운영팀, 의존성을 점검하는 개발자와 취약점 관리를 배우는 사람을 대상으로 꼽는다.
어떤 정보를 보여주나
CVE Intel은 NVD, CVE.org, CISA KEV, FIRST의 EPSS, ENISA EUVD 등을 조회해 취약점 설명, 위험 점수, 공격자가 이미 악용하는지 여부, 각 신호의 근거와 다음 조치를 제시한다. 제품·패키지 감시 목록을 만들면 새 CVE, KEV 등재, EPSS 상승, 익스플로잇 추가, CVSS 변경, 수정 버전 공개 등을 기록한다. 이번 주에 여러 출처에서 무엇이 달라졌는지도 위협 현황 화면에서 볼 수 있다.
입력할 수 있는 대상은 CVE ID, 프로젝트 폴더, 잠금 파일이나 SBOM, 컨테이너 이미지, 이 컴퓨터에 설치된 소프트웨어, 본인이 관리하는 도메인과 의심스러운 IP·해시·도메인 등이다. 의존성 파일은 최대 10,000개 패키지를 OSV.dev에 대조한다. 패키지 이름과 버전만 전송하며 파일 자체는 컴퓨터에서 읽는다. CVE Intel은 취약점을 찾고 판단을 돕지만 시스템을 탐색하거나 포트 스캔·공격을 하지 않고 수정 사항도 적용하지 않는다.
위험 점수는 CVSS 심각도, 향후 30일간 악용될 확률을 추정하는 EPSS, CISA KEV 등재, 공개 PoC 증거를 조합한다. CISA KEV에 있는 CVE는 항상 CRITICAL이며 최소 76점이다. 이 점수는 CVE Intel 자체의 점수로, 원문은 다음 식과 범위를 제시한다.
Risk = CVSS×0.20 + EPSS×0.35 + KEV×0.30 + PoC×0.15 (boosters up to ×1.27, capped at 100)
구간은 0~25 LOW, 26~50 MEDIUM, 51~75 HIGH, 76~100 CRITICAL이며 점수 체계 버전은 1.1이다. CVSS는 취약점의 심각도를, EPSS는 악용 가능성을 나타낸다. CISA KEV만 KEV 점수와 강제 CRITICAL 판정을 적용한다. 심층 분류에서는 CISA가 공개한 SSVC 평가도 제공한다. ENISA EUVD나 VulnCheck KEV의 악용 표시는 SSVC의 Exploitation 입력을 높일 수 있지만 위험 점수 자체는 바꾸지 않는다.
표준·심층 분류에는 패치 커밋, 취약점 유형, CVSS 조건과 PoC 공개 여부 등을 바탕으로 한 익스플로잇 속도 추정도 나온다. 표시는 Hours, Days, Weeks, Unknown 또는 이미 PoC나 KEV 등재가 있는 경우의 Exploit exists다. 제작자는 이를 추정치로 표시하고 신뢰도를 최대 medium으로 제한하며, 공개 패치가 없으면 Days보다 빠른 값으로 표시하지 않는다고 설명한다. 이 추정치도 위험 점수에는 영향을 주지 않는다.
데스크톱 앱에서 시작하기
계정과 API 키 없이 사용할 수 있다. 운영체제에 맞는 파일을 최신 릴리스에서 내려받는다. 앱, CLI, MCP 서버, REST API는 하나의 실행 파일에 들어 있다.
- Windows:
CVE-Intel_<version>_windows-x64-setup.exe또는…-portable.exe를 실행한다. - macOS(Apple Silicon 및 Intel):
CVE-Intel_<version>_macos-universal.dmg를 열고 앱을 Applications로 옮긴다. - Linux:
CVE-Intel_<version>_linux-x64.AppImage또는.deb를 사용한다. AppImage는 실행 권한을 준 뒤 실행한다.
각 파일 옆에는 .sha256 체크섬이 제공된다. 빌드는 아직 코드 서명이 되지 않아 Windows SmartScreen과 macOS Gatekeeper가 처음 실행할 때 경고할 수 있다. macOS에서는 앱을 우클릭해 Open을 선택하라고 안내한다.
앱을 연 뒤 Landscape에서 이번 주 공개 출처의 변화를 살펴볼 수 있다. CVE Triage에 CVE-2024-3400 같은 ID를 입력해 분류하거나, 프로젝트 폴더를 창에 끌어 놓아 의존성을 검사한다. Scan에서 This computer를 고르면 이 컴퓨터의 설치 소프트웨어를 점검한다. ⌘K(Windows·Linux에서는 Ctrl+K)로 Quick Find를 열어 CVE, IP, 해시, 도메인, URL 또는 package:ecosystem:version 형식의 값을 입력하면 종류에 맞는 조회를 실행한다. 설정의 Data source API keys에서 선택적으로 무료 API 키를 추가할 수 있고, Local Model에서 모델을 내려받거나 MCP Server에서 AI 코딩 도구를 연결할 수도 있다.
감시 목록과 판단 기록
감시 목록은 벤더, 제품, 패키지, CVE의 변경 사항을 새 CVE, KEV 등재, 랜섬웨어 사용, EPSS 상승, 익스플로잇, CVSS 변경, 수정 버전 등으로 기록한다. 첫 조회는 알림 없는 기준점으로 저장된다. 목록은 이 컴퓨터의 ~/.cve-intel/watch.db에 저장되고 소유자만 접근할 수 있다. 앱이 열려 있을 때 기본 6시간 간격으로 새로 고칠 수 있으며 설정에서 주기를 바꾸거나 끌 수 있다. AI 에이전트는 MCP로 목록을 읽을 수 있지만 변경할 수 없다.
Decisions에서는 취약점을 즉시 패치, 날짜까지 연기, 위험 수용, 영향 없음, 완화됨으로 기록하고 판단의 전제가 된 조건을 지정한다. CISA KEV 미등재, EPSS 기준 미만, 공개 익스플로잇 없음, 아직 수정본 없음 등의 기계 확인 조건은 현재 증거를 바탕으로 선택된다. 인터넷에 노출되지 않음, WAF 뒤에 있음, 보완 통제가 있음 등 수동으로 입력하는 조건에는 검토 날짜를 둘 수 있다.
새 KEV 등재, EPSS 임계값 돌파, 익스플로잇이나 수정본 공개, NVD 분석 공개 등으로 전제가 깨지면 판단은 오래된 것으로 표시되고 구체적 이유가 감시 목록 피드에 기록된다. 연기 기한이 지나거나 수동 전제의 검토 날짜가 되면 각각 만료 또는 검토 필요로 표시된다. 재판단은 이전 기록을 이력으로 남기며, 완료 처리에는 패치됨·영구 수용·수정하지 않음·기타를 기록할 수 있다. 최근 30·90·365일 동안 보류한 취약점이 이후 KEV에 들어가거나 익스플로잇을 얻고 EPSS가 오른 사례, 즉시 패치 판단이 확인된 사례도 집계한다. 기록은 ~/.cve-intel/decisions.db에 로컬로 저장되며 OpenVEX 또는 CycloneDX VEX로 내보낼 수 있다.
분류·비교·검사
CVE Triage는 여러 출처의 점수와 분석 상태를 나란히 보여주고 출처 간 불일치도 표시한다. 예를 들어 점수가 2점 이상 차이 나는 경우, NVD가 아직 분석하지 않은 경우, 높은 점수에도 6개월간 공격이 확인되지 않은 경우, CISA KEV 이외 출처가 악용을 보고한 경우, 배포판이 자체 빌드에 영향이 없다고 밝힌 경우 등을 드러낸다. 결과에는 Sources agree, Sources disagree 또는 Thin evidence가 표시되며, 이 합의 표시는 점수를 바꾸지 않는다.
Compare CVEs에는 2~10개의 CVE를 붙여 넣어 패치 순서를 비교한다. CISA KEV 등재 항목이 먼저 오고 위험 점수가 다음 기준이 된다. 동점이면 랜섬웨어 사용, EPSS, 익스플로잇 성숙도, CVSS, KEV 기한 순으로 판단하며 각 순위의 이유를 보여준다. 비교 화면은 점수 구성요소, KEV 날짜, EPSS 추세, 익스플로잇 출처, CVSS 공격 경로와 영향, 제품·CWE 등을 나란히 보여준다.
의존성 검사에서는 프로젝트 폴더를 끌어 놓거나 잠금 파일·SBOM을 붙여 넣는다. 하위 폴더도 검색하지만 node_modules, 가상 환경, vendor, 빌드 결과물과 숨김 폴더는 건너뛴다. 잠금 파일로 버전이 고정된 경우 그 옆의 package.json이나 go.sum은 중복 검사하지 않는다. 패키지가 여러 파일에 있으면 한 번만 확인하며 결과에는 관련 파일을 표시한다. 지원 형식에는 package-lock.json, yarn.lock, Pipfile.lock, poetry.lock, uv.lock, Cargo.lock, go.sum, go.mod, composer.lock, Gemfile.lock, CycloneDX·SPDX SBOM, requirements.txt, package.json, pom.xml, purl 등이 포함된다.
검사 결과는 심각도만이 아니라 실제 악용 위험 순으로 정렬한다. 같은 문제를 GitHub, PyPI, 배포판이 각각 보고해도 한 번만 표시하며, 수정 버전과 이전 검사 이후 새로 생기거나 해결되거나 더 위험해진 항목을 확인할 수 있다. 저장한 검사는 이 컴퓨터에만 남는다. Save SBOM은 읽은 패키지와 앱, 취약점·위험 신호·수정 버전·기록된 판단을 담은 CycloneDX 1.5 문서를 만든다. 이 문서는 잠금 파일이나 이미지 등에서 읽은 항목을 바탕으로 한 인벤토리이며 공급자, 해시, 라이선스, 의존성 그래프는 포함하지 않는다. 원문은 이런 항목을 제공하는 Syft나 cdxgen 같은 빌드 시점 생성기를 권위 있는 출처로 유지하라고 설명한다.
Chains 탭은 한 취약점씩 나열하는 대신 네트워크 진입부터 코드 실행, 권한 상승, 자격 증명 접근, 지속성까지 이어질 수 있는 공격 경로를 묶는다. 각 단계의 근거는 CVSS 벡터, 취약점 유형, CTID의 KEV→ATT&CK 매핑 또는 CAPEC 추론이다. 체인 점수는 발견 항목의 위험 점수와 별개이며, 가장 많은 체인을 끊는 수정 지점을 표시한다. 대상의 모든 발견 항목이 함께 존재한다고 가정하고 도달 가능성이나 완화책은 알 수 없다는 점도 결과에 명시한다.
Scan → This computer는 Windows 레지스트리의 설치 앱과 Windows 빌드, 또는 macOS의 Applications, ~/Applications, Homebrew, macOS 버전을 확인한다. 인식하는 소프트웨어와 운영체제의 공급자·제품·버전을 NVD에 보내며, 인식하지 못한 앱은 기본적으로 검사하지 않는다. 선택적으로 앱 이름을 NVD 제품 사전에 조회할 수 있지만, NVD의 공급자와 앱 게시자가 일치하는 경우에만 결과를 유지한다. API 키가 없으면 NVD 요청 제한 때문에 첫 검사에서 위험도가 높은 앱을 먼저 확인한다. 버전이 없는 항목은 검사하지 않은 것으로 표시한다.
컨테이너 이미지는 Docker 없이 docker save 또는 OCI 아카이브(.tar, .tar.gz), OCI 레이아웃 폴더를 읽는다. 이미지 전체를 디스크에 풀지 않고 레이어별로 읽는다. OSV가 다루지 않는 배포판이나 오래된 RPM 데이터베이스는 취약점 없음으로 간주하지 않고 검사하지 않은 항목으로 표시한다. 다중 플랫폼 이미지는 별도 플랫폼을 지정하지 않으면 이 컴퓨터의 아키텍처를 검사한다.
docker save myapp:latest -o myapp.tar
cve-intel scan image myapp.tar --fail-on kev
Public exposure는 본인 소유이거나 평가 권한이 있는 도메인·공개 IP를 대상으로 한다. 인증서 투명성 로그에서 도메인 하위 호스트 이름을 찾고 주소를 확인한 다음, Shodan 또는 무료 Shodan InternetDB가 이미 관찰한 서비스·소프트웨어 버전·CVE를 확인한다. 도구는 대상에 직접 접속하거나 포트 스캔하지 않는다. CDN이나 호스팅 업체 주소는 제공자 소프트웨어일 수 있어 제외하며, 배너를 바탕으로 Shodan이 추정한 CVE는 검증된 항목이 아니라 보고된 항목으로 표시한다.
cve-intel scan exposure example.com --authorized --list-only # names and addresses only
cve-intel scan exposure example.com 203.0.113.10 --authorized --max-ips 20
로컬 AI와 데이터 전송
Ask AI는 질문 속 CVE, IP, 해시, 도메인을 먼저 찾아 관련 조회를 실행한 뒤 결과를 모델에 제공한다. 기본 로컬 모델은 질문이 컴퓨터를 떠나지 않도록 실행되지만 작은 모델은 세부 사항을 틀릴 수 있으므로, 실제 조치 전에는 CVE Triage에서 확인하라고 안내한다. 모델이 아직 실행되지 않으면 조회 결과를 그대로 보여준다.
Local Model 화면에서 llama.cpp 실행 환경과 모델을 설치할 수 있다. 기본 모델은 Qwen 2.5 3B Instruct로 약 1.9GB를 내려받고 RAM 6GB가 필요하다. 1B·1.5B 모델은 RAM 4GB, Qwen 2.5 7B는 10GB가 필요하다. Apple silicon에서는 GPU로 실행되는 MLX 모델도 제공한다. 로컬 모델 서버는 127.0.0.1에서만 수신한다. Ollama, LM Studio 또는 자체 llama-server를 이미 쓰는 경우 OpenAI 호환 주소를 지정할 수 있다.
설정에서 OpenAI, Anthropic 또는 Google Gemini를 선택하면 각 질문과 조회 결과가 해당 제공자에게 전송되고, 이용 약관이 적용된다. 앱은 해당 사실을 화면에 표시한다. API 키는 ~/.cve-intel/settings.db에 소유자 전용 권한으로 저장되며 화면에 표시하거나 로그에 남기지 않는다. 외부 제공자를 선택하지 않는 한 AI는 로컬 모델을 사용한다.
모든 네트워크 통신은 데이터 출처, 선택한 클라우드 AI 제공자, 사용자가 시작한 모델·실행 환경 다운로드를 향한 HTTPS다. API 키는 기록·캐시·도구 응답에 포함하지 않는다. 공개 정보만 이용하는 노출 확인도 대상에 직접 연결하지 않는다. 데스크톱 앱의 활동 로그는 조회·질문·응답, 설정과 모델 변경, 에이전트가 MCP로 호출한 도구, 접속한 호스트를 기록하며 API 키 값은 기록하지 않는다. 최근 20,000개 항목을 유지하고 앱에서 검색·일시 중지·삭제할 수 있다. CLI와 cve-intel mcp는 활동 로그를 남기지 않는다.
개발자용 인터페이스
같은 실행 파일을 GUI, CLI, MCP 서버, REST 서버로 사용할 수 있다. 인자를 주면 CLI나 서버 모드로 실행한다. CLI에서는 CVE 분류, 비교, 의존성·이미지·호스트 검사, 감시 목록과 판단 관리, 위협 현황 조회 등을 수행한다. --json으로 기계 판독 결과를 받을 수 있고 cve-intel <command> --help에서 각 명령의 옵션을 확인한다.
cve-intel triage CVE-2024-3400 --depth deep
cve-intel ask "Should we patch CVE-2021-44228?" --model qwen2.5-3b
cve-intel quick-find 185.220.101.34
cve-intel scan deps . --fail-on kev
cve-intel compare CVE-2024-3400 CVE-2023-44487
cve-intel landscape --days 7 --markdown
CI에서는 scan deps가 조건에 따라 빌드를 실패시킬 수 있다. --fail-on kev는 KEV 등재, --fail-on exploited는 KEV 또는 공개·무기화된 익스플로잇, --fail-on high는 HIGH·CRITICAL 위험을 기준으로 삼는다. 자문 점수의 심각도만 기준으로 삼으려면 --fail-on-severity critical을 사용할 수 있다. 기본 설정에서는 확인할 수 없었던 패키지나 출처 오류가 빌드를 실패시키지 않으며, --strict를 쓰면 확인 불가 항목도 실패 조건이 된다. 종료 코드는 0(조건 미충족), 1(오류 또는 엄격 검사 실패), 2(잘못된 인자), 3(실패 조건 충족)이다. SARIF로 GitHub code scanning에 결과를 올릴 수 있고 Markdown·JSON·CycloneDX 출력도 지원한다.
REST 서버는 기본적으로 127.0.0.1:8000에서 실행되며 /api/v1 아래에 조회 API를, /mcp에 MCP를 제공한다. 데스크톱 앱이 시작한 서버도 같은 엔드포인트를 제공한다. API에는 취약점 분류·검색, 위협 현황, 감시 목록과 검사 기록 조회, 도구 실행, 데이터 출처 확인, 로컬 모델 질의 등이 포함된다.
보안상 주의할 차이가 있다. 앱에서 시작한 MCP 서버는 127.0.0.1에만 바인딩하고 Host, Origin, Sec-Fetch-Site 헤더를 검사해 웹페이지에서 오는 교차 사이트 요청을 거부한다. 로그인은 없으므로 같은 컴퓨터의 프로그램은 저장된 키를 사용할 수 있다. 반면 cve-intel serve는 인증이 없고 교차 출처 요청을 허용해 브라우저의 웹페이지도 실행 중인 서버에 접근할 수 있다. 제작자는 루프백에만 노출하고 사용 후 서버를 중지하거나, 인증된 리버스 프록시 뒤에 두라고 안내한다.
MCP 서버는 HTTP 또는 stdio로 연결할 수 있다. 앱에서 MCP Server 화면을 열어 사용할 에이전트를 선택하면 실행 파일 경로와 주소가 들어간 설정 절차를 복사할 수 있다. Claude Code, Cursor, VS Code, Claude Desktop, Windsurf 등 설정 안내를 제공한다. 서버는 41개 도구와 리소스·프롬프트를 제공하며 감시 목록과 검사 이력 도구는 읽기 전용이다. stdio 연결은 앱이 닫혀 있어도 별도 실행 파일을 띄워 사용할 수 있다.
원문에는 프로젝트를 직접 빌드하거나 Docker에서 GUI 없는 서버를 실행하는 방법, 전체 CLI·REST·MCP 명세와 설정이 개발자 문서에 정리돼 있다. 공개 데이터의 최신성은 출처와 캐시 주기에 달려 있으며, EPSS는 매일 갱신되고 일부 피드는 최대 하루 캐시될 수 있다. AI 답변은 근거가 아니므로 실제 보고서나 티켓에는 앱의 문구보다 원본 출처와 조회 날짜를 인용하라고 프로젝트는 안내한다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요