🔍 GitHub CVE Scanner - 사용 가이드
React 및 Next.js 프로젝트에서 알려진 취약점을 찾기 위해 GitHub 저장소를 스캔하는 스크립트입니다.
📋 감지된 취약점
스캐너는 다음 CVE를 확인합니다:
🚀 사용 방법
사전 요구 사항
- 최신 웹 브라우저 (Chrome, Firefox, Edge 등)
- GitHub 액세스 (선택 사항: 개인 저장소용 Personal Access Token)
단계별 안내
1. 브라우저 콘솔 열기
- GitHub 페이지에 접속합니다 (예:
https://github.com)
- DevTools를 엽니다:
- Chrome/Edge:
F12 또는 Ctrl+Shift+I (Windows) / Cmd+Option+I (Mac)
- Firefox:
F12 또는 Ctrl+Shift+K (Windows) / Cmd+Option+K (Mac)
- Console 탭으로 이동합니다
2. 스크립트 복사 및 실행
main.js 파일을 엽니다
- 파일의 전체 내용을 복사합니다
- 브라우저 콘솔에 붙여넣습니다
Enter를 눌러 실행합니다
3. 스캔 설정
스크립트는 일련의 대화식 질문을 합니다:
3.1. 인증 (첫 번째 질문)
🔐 개인 저장소도 스캔할까요?
OK = PAT 입력
Cancel = 공개 저장소만
- OK: GitHub Personal Access Token (PAT)을 입력하라는 메시지가 표시됩니다
- 개인 저장소를 스캔할 수 있습니다
- 조직에 액세스하는 데 필요합니다
- Cancel: 공개 저장소만 스캔됩니다
PAT 생성 방법:
https://github.com/settings/tokens에 접속합니다
- "Generate new token" → "Generate new token (classic)"을 클릭합니다
- 설명적인 이름을 입력합니다
repo 범위를 선택합니다 (저장소에 대한 전체 액세스)
- "Generate token"을 클릭합니다
- 토큰을 즉시 복사합니다 (다시 표시되지 않습니다)
3.2. 스캔 범위 (인증된 경우)
🔍 무엇을 스캔하시겠습니까?
OK = 조직
Cancel = 사용자 프로필
- OK: 조직 스캔
- Cancel: 사용자 프로필만 스캔
3.3. 조직 선택 (Organizations를 선택한 경우)
🏢 모든 조직을 스캔하시겠습니까?
OK = 모든 조직
Cancel = 단일 조직
옵션 A - 모든 조직 (OK):
- 스크립트는 인증된 사용자의 모든 조직을 자동으로 가져옵니다
- 모든 조직의 모든 저장소를 스캔합니다
옵션 B - 특정 조직 (Cancel):
3.4. 사용자 프로필 (인증되지 않았거나 Profile을 선택한 경우)
- GitHub 프로필 페이지에 있는 경우 스크립트가 자동으로 감지합니다
- 그렇지 않으면 다음 메시지가 표시됩니다:
GitHub 사용자 이름을 입력하세요:
📊 기능
✨ 브랜치별 확인
스크립트는 각 저장소의 모든 브랜치를 확인합니다(기본 브랜치뿐만 아니라). 이를 통해 개발, 스테이징 또는 기타 활성 브랜치의 취약점도 감지됩니다.
🏢 조직 지원
- GitHub 조직의 저장소 스캔
- 모든 조직 또는 특정 조직 스캔 옵션
- 조직 URL 또는 이름 입력 지원
🔒 비공개 저장소 액세스
유효한 Personal Access Token을 사용하여 스크립트는 다음을 수행할 수 있습니다:
- 비공개 저장소에 액세스
- 비공개 조직 스캔
- 비공개 저장소의 브랜치 확인
📈 결과
실행 후 스크립트는 다음을 표시합니다:
결과 테이블
콘솔에 다음 내용을 포함하는 테이블을 표시합니다:
- Repo: 저장소 이름
- Branch: 확인된 브랜치 이름
- Next: Next.js 버전 (있는 경우)
- React: React 버전 (있는 경우)
- ReactDOM: react-dom 버전 (있는 경우)
- RSCWebpack: react-server-dom-webpack 버전 (있는 경우)
- RSCParcel: react-server-dom-parcel 버전 (있는 경우)
- RSCTurbopack: react-server-dom-turbopack 버전 (있는 경우)
- Status: 취약점 상태
✅ Safe: 감지된 취약점 없음
⚠️ CVE-XXXX-XXXXX: 취약점 발견됨
요약
📊 요약:
전체 저장소: 15
스캔된 브랜치: 23
package.json 있음: 20
건너뜀: 3 (package.json 없음)
⚠️ 5개의 취약한 저장소 발견!
또는
✅ 취약점이 발견되지 않았습니다!
⚙️ 기술 설정
- API 요청 간 지연: 200ms (속도 제한 방지)
- 스캔 간 지연: 30ms
- 페이지당 결과: 100개 항목
- 비공개 저장소 지원: 예 (PAT 사용)
- 브랜치 확인: 각 저장소의 모든 브랜치
🔧 문제 해결
오류: "Token invalid"
- 토큰이 올바르게 복사되었는지 확인하세요
- 토큰에
repo 범위가 있는지 확인하세요
- 토큰이 만료되지 않았는지 확인하세요
오류: "No repositories found"
- 사용자/조직이 존재하는지 확인하세요
- 조직을 스캔하는 경우 액세스 권한이 있는지 확인하세요
- 프로필/조직에 저장소가 있는지 확인하세요
오류: "No organizations found"
- 유효한 토큰으로 인증되었는지 확인하세요
- 조직의 구성원인지 확인하세요
- 토큰에 조직 액세스 권한이 있어야 합니다
스캔이 너무 느린 경우
- 스크립트는 속도 제한을 방지하기 위해 의도적으로 지연을 추가합니다
- 브랜치가 많은 저장소는 더 오래 걸립니다
- 저장소가 많은 조직은 더 오래 걸립니다
📝 중요 참고 사항
- 속도 제한: 스크립트는 자동 지연을 통해 GitHub API 한도를 준수합니다
- 개인정보: 토큰은 브라우저에서만 로컬로 사용되며 외부 서버로 전송되지 않습니다
- 정확성: 스캐너는 저장소 루트의
package.json만 확인합니다
- 브랜치: 모든 브랜치가 확인되지만
package.json이 있는 브랜치만 보고됩니다
- 버전: 스캐너는 CVE 정의에 따라 취약한 버전을 감지합니다
🛡️ 보안
- 스크립트는 브라우저에서 완전히 실행됩니다 (클라이언트 측)
- 어떤 데이터도 외부 서버로 전송되지 않습니다
- Personal Access Token은 GitHub API 요청에만 사용됩니다
- 필요한 최소 범위의 토큰을 사용하는 것이 좋습니다
📄 라이선스
MIT License
🔄 버전
3.0.0
React 및 Next.js 프로젝트의 보안 취약점을 탐지하기 위해 개발됨