Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
git-vuln-finder — Git 커밋 메시지에서 잠재적인 소프트웨어 취약점 찾기 | Kitploit
도구/GitHubGitHub/cve-search/git-vuln-finder
OSINT (Open Source Intelligence)Vulnerability AnalysisCode Analysis
GitHubcve-search/git-vuln-finder

git-vuln-finder

Git 커밋 메시지에서 잠재적인 소프트웨어 취약점 찾기

저장소 보기웹사이트
426582년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

git-vuln-finder

git-vuln-finder 로고

Workflow

git 커밋 메시지에서 잠재적인 소프트웨어 취약점을 찾습니다. 출력 형식은 소프트웨어 취약점에 대한 수정 사항이 포함될 수 있는 관련 커밋이 있는 JSON입니다. 검색은 커밋 메시지에 대한 정규식 집합을 기반으로 합니다. CVE ID가 있는 경우 출력에 자동으로 추가됩니다. 입력은 모든 git 리포지토리 또는 GH 아카이브 소스일 수 있습니다.

요구 사항

  • jq (sudo apt install jq)
  • Python poetry

설치

라이브러리로 사용

git-vuln-finder는 poetry로 설치할 수 있습니다. poetry가 설치되어 있지 않다면 curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python을 실행할 수 있습니다.

root@kitploit:~
$ poetry install
$ poetry shell
$ git-vuln-finder -h

pip을 사용할 수도 있습니다. 그런 다음 임포트하십시오:

root@kitploit:~
Python 3.8.0 (default, Dec 11 2019, 21:43:13)
[GCC 9.2.1 20191008] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from git_vuln_finder import find
>>> all_potential_vulnerabilities, all_cve_found, found = find("~/git/curl")

>>> [commit for commit, summary in all_potential_vulnerabilities.items() if summary['state'] == 'cve-assigned']
['9069838b30fb3b48af0123e39f664cea683254a5', 'facb0e4662415b5f28163e853dc6742ac5fafb3d',
... snap ...
 '8a75dbeb2305297640453029b7905ef51b87e8dd', '1dc43de0dccc2ea7da6dddb7b98f8d7dcf323914', '192c4f788d48f82c03e9cef40013f34370e90737', '2eb8dcf26cb37f09cffe26909a646e702dbcab66', 'fa1ae0abcde5df8d0b3283299e3f246bedf7692c', 'c11c30a8c8d727dcf5634fa0cc6ee0b4b77ddc3d', '75ca568fa1c19de4c5358fed246686de8467c238', 'a20daf90e358c1476a325ea665d533f7a27e3364', '042cc1f69ec0878f542667cb684378869f859911']

 >>> print(json.dumps(all_potential_vulnerabilities['9069838b30fb3b48af0123e39f664cea683254a5'], sort_keys=True, indent=4, separators=(",", ": ")))
 {
     "author": "Daniel Stenberg",
     "author-email": "[email protected]",
     "authored_date": 1567544372,
     "branches": [
         "master"
     ],
     "commit-id": "9069838b30fb3b48af0123e39f664cea683254a5",
     "committed_date": 1568009674,
     "cve": [
         "CVE-2019-5481",
         "CVE-2019-5481"
     ],
     "language": "en",
     "message": "security:read_data fix bad realloc()\n\n... that could end up a double-free\n\nCVE-2019-5481\nBug: https://curl.haxx.se/docs/CVE-2019-5481.html\n",
     "origin": "https://github.com/curl/curl.git",
     "origin-github-api": "https://api.github.com/repos///github.com/curl/curl/commits/9069838b30fb3b48af0123e39f664cea683254a5",
     "pattern-matches": [
         "double-free"
     ],
     "pattern-selected": "(?i)(double[-| ]free|buffer overflow|double free|race[-| ]condition)",
     "state": "cve-assigned",
     "stats": {
         "deletions": 4,
         "files": 1,
         "insertions": 2,
         "lines": 6
     },
     "summary": "security:read_data fix bad realloc()",
     "tags": []
 }

명령줄 도구로 사용

root@kitploit:~
$ git clone https://github.com/cve-search/git-vuln-finder.git
$ cd https://github.com/cve-search/git-vuln-finder.git
$ pip install .
$ git-vuln-finder --help

pip을 사용할 수도 있습니다. pipx는 Python 패키지에서 제공하는 스크립트(시스템 전체에서 사용 가능)를 별도의 가상 환경에 설치하여 시스템 및 서로로부터 보호합니다.

사용법

root@kitploit:~
usage: git-vuln-finder [-h] [-v] [-r R] [-o O] [-s S] [-p P] [-c] [-t] [-gh GH]

git 커밋 메시지에서 잠재적인 소프트웨어 취약점을 찾습니다.

선택적 인수:
  -h, --help  이 도움말 메시지를 표시하고 종료합니다.
  -v          출력 상세도를 높입니다.
  -r R        분석할 git 리포지토리
  -o O        출력 형식: [json]
  -s S        발견된 커밋의 상태
  -p P        사용할 매칭 패턴: [vulnpatterns, cryptopatterns, cpatterns] - 패턴 'all'은 모든 패턴을 한 번에 매칭하는 데 사용됩니다.
  -c          커밋 메시지에서 발견된 CVE 패턴 목록만 출력합니다(기본적으로 비활성화됨).
  -t          특정 커밋과 일치하는 태그 포함
  -gh GH      gharchive용 특수 옵션, PushEvent를 JSON 형식으로 포함하는 파일 전달

자세한 정보: https://github.com/cve-search/git-vuln-finder

패턴

git-vuln-finder는 3개의 기본 패턴과 함께 제공되며, 이를 선택하여 커밋 메시지에 설명된 잠재적 취약점을 찾을 수 있습니다:

  • vulnpatterns는 웹 애플리케이션 및 일반 보안 커밋 메시지를 특히 대상으로 하는 일반적인 취약점 패턴입니다. 학술 논문을 기반으로 합니다.
  • cryptopatterns는 커밋 메시지에 언급된 암호화 오류에 대한 취약점 패턴입니다.
  • cpatterns는 C/C++ 계열 언어에서 볼 수 있는 표준 취약점 패턴 집합입니다.

Curl git 리포지토리의 샘플 부분 출력

root@kitploit:~
$ git-vuln-finder -r ~/git/curl | jq .
...
 "6df916d751e72fc9a1febc07bb59c4ddd886c043": {
    "message": "loadlibrary: Only load system DLLs from the system directory\n\nInspiration provided by: Daniel Stenberg and Ray Satiro\n\nBug: https://curl.haxx.se/docs/adv_20160530.html\n\nRef: Windows DLL hijacking with curl, CVE-2016-4802\n",
    "language": "en",
    "commit-id": "6df916d751e72fc9a1febc07bb59c4ddd886c043",
    "summary": "loadlibrary: Only load system DLLs from the system directory",
    "stats": {
      "insertions": 180,
      "deletions": 8,
      "lines": 188,
      "files": 7
    },
    "author": "Steve Holme",
    "author-email": "[email protected]",
    "authored_date": 1464555460,
    "committed_date": 1464588867,
    "branches": [
      "master"
    ],
    "pattern-selected": "(?i)(denial of service |\bXXE\b|remote code execution|\bopen redirect|OSVDB|\bvuln|\bCVE\b |\bXSS\b|\bReDoS\b|\bNVD\b|malicious|x−frame−options|attack|cross site |exploit|malicious|directory traversal |\bRCE\b|\bdos\b|\bXSRF \b|\bXSS\b|clickjack|session.fixation|hijack|\badvisory|\binsecure |security |\bcross−origin\b|unauthori[z|s]ed |infinite loop)",
    "pattern-matches": [
      "hijack"
    ],
    "origin": "[email protected]:curl/curl.git",
    "origin-github-api": "https://api.github.com/repos/curl/curl/commits/6df916d751e72fc9a1febc07bb59c4ddd886c043",
    "tags": [],
    "cve": [
      "CVE-2016-4802"
    ],
    "state": "cve-assigned"
  },
  "c2b3f264cb5210f82bdc84a3b89250a611b68dd3": {
    "message": "CONNECT_ONLY: don't close connection on GSS 401/407 reponses\n\nPreviously, connections were closed immediately before the user had a\nchance to extract the socket when the proxy required Negotiate\nauthentication.\n\nThis regression was brought in with the security fix in commit\n79b9d5f1a42578f\n\nCloses #655\n",
    "language": "en",
    "commit-id": "c2b3f264cb5210f82bdc84a3b89250a611b68dd3",
    "summary": "CONNECT_ONLY: don't close connection on GSS 401/407 reponses",
    "stats": {
      "insertions": 4,
      "deletions": 2,
      "lines": 6,
      "files": 1
    },
    "author": "Marcel Raad",
    "author-email": "[email protected]",
    "authored_date": 1455523116,
    "committed_date": 1461704516,
    "branches": [
      "master"
    ],
    "pattern-selected": "(?i)(denial of service |\bXXE\b|remote code execution|\bopen redirect|OSVDB|\bvuln|\bCVE\b |\bXSS\b|\bReDoS\b|\bNVD\b|malicious|x−frame−options|attack|cross site |exploit|malicious|directory traversal |\bRCE\b|\bdos\b|\bXSRF \b|\bXSS\b|clickjack|session.fixation|hijack|\badvisory|\binsecure |security |\bcross−origin\b|unauthori[z|s]ed |infinite loop)",
    "pattern-matches": [
      "security "
    ],
    "origin": "[email protected]:curl/curl.git",
    "origin-github-api": "https://api.github.com/repos/curl/curl/commits/c2b3f264cb5210f82bdc84a3b89250a611b68dd3",
    "tags": [],
    "state": "under-review"
  },
...
  • git 메시지에서 CVE ID 추출
root@kitploit:~
  "98d132cf6a879faf0147aa83ea0c07ff326260ed": {
    "message": "Add a macro for testing assertion in both debug and production builds\n\nIf we have an assert then in a debug build we want an abort() to occur.\nIn a production build we wan
t the function to return an error.\n\nThis introduces a new macro to assist with that. The idea is to replace\nexisting use of OPENSSL_assert() with this new macro. The problem with\nOPENSSL
_assert() is that it aborts() on an assertion failure in both debug\nand production builds. It should never be a library's decision to abort a\nprocess (we don't get to decide when to kill t
he life support machine or\nthe nuclear reactor control system). Additionally if an attacker can\ncause a reachable assert to be hit then this can be a source of DoS attacks\ne.g. see CVE-20
17-3733, CVE-2015-0293, CVE-2011-4577 and CVE-2002-1568.\n\nReviewed-by: Tim Hudson <[email protected]>\n(Merged from https://github.com/openssl/openssl/pull/3496)",
    "commit-id": "98d132cf6a879faf0147aa83ea0c07ff326260ed",
    "summary": "Add a macro for testing assertion in both debug and production builds",
    "stats": {
      "insertions": 18,
      "deletions": 0,
      "lines": 18,
      "files": 1
    },
    "author": "Matt Caswell",
    "author-email": "[email protected]",
    "authored_date": 1495182637,
    "committed_date": 1495457671,
    "branches": [
      "master"
    ],
    "pattern-selected": "(?i)(denial of service |\bXXE\b|remote code execution|\bopen redirect|OSVDB|\bvuln|\bCVE\b |\bXSS\b|\bReDoS\b|\bNVD\b|malicious|x−frame−options|attack|cross site |ex
ploit|malicious|directory traversal |\bRCE\b|\bdos\b|\bXSRF \b|\bXSS\b|clickjack|session.fixation|hijack|\badvisory|\binsecure |security |\bcross−origin\b|unauthori[z|s]ed |infinite loop)",
    "pattern-matches": [
      "attack"
    ],
    "cve": [
      "CVE-2017-3733",
      "CVE-2015-0293",
      "CVE-2011-4577",
      "CVE-2002-1568"
    ],
    "state": "cve-assigned"
  }

특수 gharchive 옵션 사용법

root@kitploit:~
$ git-vuln-finder -gh ../tests/gharchive_test.json

gh 매개변수의 값은 테스트하려는 각 PushEvent의 배열을 포함하는 json 파일이어야 합니다.

root@kitploit:~
[
   {
    "id": "19351512310",
    "type": "PushEvent",
    "actor": {
      "id": 32466128,
      "login": "DavidCruciani",
      "display_login": "DavidCruciani",
      "gravatar_id": "",
      "url": "https://api.github.com/users/DavidCruciani",
      "avatar_url": "https://avatars.githubusercontent.com/u/32466128?"
    },
    "repo": {
      "id": 424660123,
      "name": "ail-project/ail-feeder-gharchive",
      "url": "https://api.github.com/repos/ail-project/ail-feeder-gharchive"
    },
    "payload": {
      "push_id": 8628652926,
      "size": 1,
      "distinct_size": 1,
      "ref": "refs/heads/main",
      "head": "910ed71a2819546a3f3bcce1ebb9e3984a8c8d86",
      "before": "40a9ef5dc6b2add5184a0a58401bfe9058faa8df",
      "commits": [
        {
          "sha": "910ed71a2819546a3f3bcce1ebb9e3984a8c8d86",
          "author": {
            "email": "[email protected]",
            "name": "David Cruciani"
          },
          "message": "chg: [feeder] case sensitive",
          "distinct": true,
          "url": "https://api.github.com/repos/ail-project/ail-feeder-gharchive/commits/910ed71a2819546a3f3bcce1ebb9e3984a8c8d86"
        }
      ]
    },
    "public": true,
    "created_at": "2021-12-15T16:06:43Z",
    "org": {
      "id": 62389074,
      "login": "ail-project",
      "gravatar_id": "",
      "url": "https://api.github.com/orgs/ail-project",
      "avatar_url": "https://avatars.githubusercontent.com/u/62389074?"
    }
  }
]

임포트 사용법

모듈을 임포트하여 사용하려면 호출할 메서드는 find_event입니다.

root@kitploit:~
from git_vuln_finder import find_event

for element in event:
    for i in range(0,len(element["payload"]["commits"])):
        all_potential_vulnerabilities, all_cve_found, found = find_event(element["payload"]["commits"][i], element)

gharchive 옵션을 사용한 출력

root@kitploit:~
{
    "repo_name": "LeandroFChaves/gerenciador-alunos",
    "message": "[UI] - Ajustes no css da aplica\u00e7\u00e3o\n\n- Adicionado padding para a exibi\u00e7\u00e3o do conte\u00fado das p\u00e1ginas;\n- Alinhado os bot\u00f5es de a\u00e7\u00f5es dos forms a direita da table",
    "language": "pt",
    "commit-id": "73a1c68b520853198eaac199a41d141ee96dc64d",
    "author": "LeandroFChaves",
    "author-email": "[email protected]",
    "authored_date": "2021-10-01T03:00:07Z",
    "branches": "refs/heads/master",
    "pattern-selected": "(?i)(denial of service|\\bXXE\\b|remote code execution|\\bopen redirect|OSVDB|\\bvuln|\\bCVE\\b|\\bXSS\\b|\\bReDoS\\b|\\bNVD\\b|malicious|x\u2212frame\u2212options|attack|cross site|exploit|malicious|directory traversal|\\bRCE\\b|\\bdos\\b|\\bXSRF \\b|\\bXSS\\b|clickjack|session.fixation|hijack|\\badvisory|\\binsecure|security|\\bcross\u2212origin\\b|unauthori[z|s]ed|infinite loop)",
    "pattern-matches": [
        "dos"
    ],
    "origin-github-api": "https://api.github.com/repos/LeandroFChaves/gerenciador-alunos/commits/73a1c68b520853198eaac199a41d141ee96dc64d",
    "state": "under-review"
}

테스트 실행

root@kitploit:~
$ pytest

경고

git-vuln-finder는 특정 키워드를 기반으로 커밋 메시지에서 잠재적 취약점을 감지하는 자동 도구입니다. 발견된 취약점 정보(예: CVE 등록)를 사용하려는 경우, 진행하기 전에 소프트웨어 작성자와 발견된 취약점을 검토하시기 바랍니다.

라이선스 및 저자

이 소프트웨어는 자유 소프트웨어이며 AGPL 버전 3에 따라 라이선스가 부여됩니다.

  • Copyright (c) 2019-2023 Alexandre Dulaunoy - https://github.com/adulau/
  • Copyright (c) 2019-2023 프로젝트에 기여한 모든 기여자

감사의 말

  • 암호 취약점 패턴에 대한 논의를 해주신 Jean-Louis Huynen 님께 감사드립니다.
  • 모국어, 커밋 메시지 및 외부 패턴에 대한 논의를 해주신 Sebastien Tricaud 님께 감사드립니다.
  • git-vuln-finder를 Python 라이브러리로 만들고, 테스트를 추가하며 전체 설치 프로세스를 개선해 주신 Cedric Bonhomme 님께 감사드립니다.
  • gharchive 지원을 제공해 주신 David Cruciani 님께 감사드립니다.

기여

소프트웨어 및 특히 추가 취약점 패턴에 대한 기여를 환영합니다. 모든 기여자는 AUTHORS 파일에 추가되며, 이 오픈 소스 소프트웨어를 공동으로 소유합니다. 기여자는 개발자 출처 인증서(Developer Certificate of Origin)를 인정합니다.

참고 자료

  • 노트
  • https://csce.ucmss.com/cr/books/2017/LFS/CSREA2017/ICA2077.pdf (주로 커밋 메시지에서 참조된 CVE 사용) - 아카이브 (http://archive.is/xep9o)
  • https://asankhaya.github.io/pdf/automated-identification-of-security-issues-from-commit-messages-and-bug-reports.pdf (2개의 주요 정규식)
도구 다운로드