Skip to main content

Scan your vibe-coded project for leaked secrets and security issues

Project description

๐Ÿ›ก๏ธ VibeScan

Push ์ „์—, ์ฝ”๋“œ๋ฅผ ์ ๊ฒ€ํ•˜์„ธ์š”.

VibeScan์€ ๋ฐ”์ด๋ธŒ์ฝ”๋”ฉ(AI ๊ธฐ๋ฐ˜ ์ฝ”๋”ฉ) ์‹œ๋Œ€์— ๋งž์ถ˜ ๋กœ์ปฌ ์ฝ”๋“œ ๋ณด์•ˆ ์ ๊ฒ€ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
๋ฏผ๊ฐ์ •๋ณด ๋…ธ์ถœ, ๋ณด์•ˆ ์ทจ์•ฝ์ , ์„ค์ • ์‹ค์ˆ˜๋ฅผ ์ดˆ๋ณด์ž๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์„ค๋ช…ํ˜• ๋ฆฌํฌํŠธ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

pip install vibescan
vibescan scan ./my-project

Your code never leaves your machine. VibeScan runs entirely locally.


์™œ VibeScan์ธ๊ฐ€

AI๊ฐ€ ๋งŒ๋“ค์–ด์ค€ ์ฝ”๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ pushํ•˜๋ฉด ์ด๋Ÿฐ ์ผ์ด ์ƒ๊น๋‹ˆ๋‹ค.

  • .env์— ์‹ค์ œ API ํ‚ค๊ฐ€ ๋“ค์–ด๊ฐ„ ์ฑ„๋กœ GitHub์— ์˜ฌ๋ผ๊ฐ
  • docker-compose.yml์— DB ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ํ‰๋ฌธ์œผ๋กœ ๋…ธ์ถœ
  • serviceAccountKey.json์ด ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— ๋ฐฉ์น˜
  • NEXT_PUBLIC_SECRET_KEY ๊ฐ™์€ ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— ๋…ธ์ถœ

๊ธฐ์กด ๋ณด์•ˆ ๋„๊ตฌ๋Š” ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ์–ด๋ ต๊ณ , ์ˆ˜์ • ๋ฐฉ๋ฒ•๋„ ์•Œ๋ ค์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
VibeScan์€ ์™œ ์œ„ํ—˜ํ•œ์ง€, ์–ด๋–ป๊ฒŒ ๊ณ ์น˜๋Š”์ง€๊นŒ์ง€ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.


์ฃผ์š” ๊ธฐ๋Šฅ

๐Ÿ” Secret ํƒ์ง€ (14๊ฐœ ์นดํ…Œ๊ณ ๋ฆฌ)

์นดํ…Œ๊ณ ๋ฆฌ ์˜ˆ์‹œ
ํ™˜๊ฒฝ๋ณ€์ˆ˜ ํŒŒ์ผ .env, .env.production ๋…ธ์ถœ
์„ค์ • ํŒŒ์ผ ํ•˜๋“œ์ฝ”๋”ฉ config.py, application.yml์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ
ํด๋ผ์šฐ๋“œ ์ธ์ฆ ํŒŒ์ผ serviceAccountKey.json, terraform.tfstate
Docker/์ธํ”„๋ผ docker-compose.yml์˜ ํ‰๋ฌธ ๋น„๋ฐ€๋ฒˆํ˜ธ
CI/CD ํŒŒ์ดํ”„๋ผ์ธ GitHub Actions yml์— ์‹œํฌ๋ฆฟ ์ง์ ‘ ์ž…๋ ฅ
IDE ์„ค์ • .npmrc, .vscode/launch.json์˜ ํ† ํฐ
SSH ํ‚ค/์ธ์ฆ์„œ *.pem, *.key, *.jks
์ฝ”๋“œ ๋‚ด ํ•˜๋“œ์ฝ”๋”ฉ sk-, AKIA, ghp_ ํŒจํ„ด, DB ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด
ํ”„๋ก ํŠธ์—”๋“œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ NEXT_PUBLIC_, VITE_ + ์‹œํฌ๋ฆฟ ์กฐํ•ฉ
๋ฐ์ดํ„ฐ ํŒŒ์ผ .sqlite, .sql, Jupyter Notebook ์ถœ๋ ฅ
๋ฌธ์„œ ๋‚ด ์‹ค์ˆ˜ README curl ์˜ˆ์‹œ์— ์‹ค์ œ ํ† ํฐ
๋ชจ๋ฐ”์ผ ์•ฑ ํŒŒ์ผ AndroidManifest.xml, Info.plist์˜ API ํ‚ค
DB/์‹œ์Šคํ…œ ์„ค์ • .pgpass, .kube/config
์—๋””ํ„ฐ ์ž”์—ฌ๋ฌผ .bash_history, .htaccess, Vim swap

โš ๏ธ ์œ„ํ—˜ ์ฝ”๋“œ ํŒจํ„ด

Python: eval(), exec(), subprocess(shell=True), pickle.loads(), DEBUG=True, verify=False
JS/TS: eval(), innerHTML, dangerouslySetInnerHTML, child_process.exec(), jwt.decode without verify
SQL: f-string/template literal ์ฟผ๋ฆฌ ์กฐํ•ฉ (์ธ์ ์…˜)

๐Ÿ“‹ Git Hygiene

.gitignore ์กด์žฌ ์—ฌ๋ถ€, .env* / *.pem / *.key / terraform.tfstate ๋“ฑ์˜ ignore ๋“ฑ๋ก ์—ฌ๋ถ€ ๊ฒ€์‚ฌ

๐Ÿ—๏ธ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

README, .env.example, ํ…Œ์ŠคํŠธ ํŒŒ์ผ, ๋ผ์ด์„ ์Šค, ์˜์กด์„ฑ ๋ฒ„์ „ ๊ณ ์ • ๊ฒ€์‚ฌ


์‚ฌ์šฉ๋ฒ•

# ๊ธฐ๋ณธ ์Šค์บ” (์ฝ˜์†” ์ถœ๋ ฅ)
vibescan scan ./project

# HTML ๋ฆฌํฌํŠธ ์ƒ์„ฑ
vibescan scan ./project --html report.html

# JSON ๋ฆฌํฌํŠธ ์ƒ์„ฑ (CI/CD ์—ฐ๋™)
vibescan scan ./project --json report.json

# MEDIUM ์ด์ƒ๋งŒ ํ‘œ์‹œ
vibescan scan ./project --min-severity medium

# ํŠน์ • ๊ทœ์น™ ์ œ์™ธ
vibescan scan ./project --ignore-rule SEC001

์ถœ๋ ฅ ์˜ˆ์‹œ

๐Ÿ” Scanning 147 files...

CRITICAL  config.py:23         Hardcoded AWS access key detected (AKIA...)
CRITICAL  docker-compose.yml:8 POSTGRES_PASSWORD in plaintext
HIGH      src/api.js:45        API key hardcoded: sk-proj-...
HIGH      .env not in .gitignore
MEDIUM    settings.py:1        DEBUG = True (production risk)
MEDIUM    app.js:12            cors({ origin: '*' }) allows all domains
LOW       No README.md found

โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”
  Scanned 147 files  โ€ข  Found 7 issues
  CRITICAL: 2  HIGH: 2  MEDIUM: 2  LOW: 1
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”

์‹ฌ๊ฐ๋„ ์ฒด๊ณ„

๋“ฑ๊ธ‰ ๊ธฐ์ค€ ์˜ˆ์‹œ
CRITICAL ์ฆ‰์‹œ ์•…์šฉ ๊ฐ€๋Šฅ, ๊ธˆ์ „์  ํ”ผํ•ด AWS ํ‚ค, DB ๋น„๋ฐ€๋ฒˆํ˜ธ, ์„œ๋น„์Šค ๊ณ„์ • ํ‚ค
HIGH ๋ณด์•ˆ ์ทจ์•ฝ์ , ๊ณต๊ฒฉ ๊ฒฝ๋กœ API ํ‚ค ํ•˜๋“œ์ฝ”๋”ฉ, eval(), SQL ์ธ์ ์…˜
MEDIUM ์ž ์žฌ์  ์œ„ํ—˜, ๋ชจ๋ฒ” ์‚ฌ๋ก€ ์œ„๋ฐ˜ DEBUG=True, CORS ์ „์ฒด ํ—ˆ์šฉ
LOW ์ฝ”๋“œ ํ’ˆ์งˆ, ์œ ์ง€๋ณด์ˆ˜์„ฑ README ๋ถ€์žฌ, TODO ์ž”์กด

์•„ํ‚คํ…์ฒ˜

CLI Parser โ†’ Config Loader โ†’ File Collector โ†’ Rule Engine โ†’ Aggregator โ†’ Reporter
                                    โ”‚
                              ProjectContext
                           (ํ…์ŠคํŠธ ํŒŒ์ผ, ์ „์ฒด ๋ชฉ๋ก,
                            .gitignore ํŒจํ„ด)
  • 100% ๋กœ์ปฌ โ€” ๋„คํŠธ์›Œํฌ ํ†ต์‹  ์—†์Œ, ์˜คํ”„๋ผ์ธ ๋™์ž‘
  • ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ตฌ์กฐ โ€” ๊ทœ์น™ ์ถ”๊ฐ€ ์‹œ ์ƒˆ ํด๋ž˜์Šค๋งŒ ์ž‘์„ฑ
  • ์•ˆ์ „ ์„ค๊ณ„ โ€” ์‹ฌ๋ณผ๋ฆญ ๋งํฌ ๊ฑด๋„ˆ๋›ฐ๊ธฐ, ์ธ์ฝ”๋”ฉ ์•ˆ์ „ ์ฒ˜๋ฆฌ, ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ ๋ณดํ˜ธ
  • CI/CD ํ˜ธํ™˜ โ€” CRITICAL/HIGH ๋ฐœ๊ฒฌ ์‹œ exit code 1 ๋ฐ˜ํ™˜

๊ธฐ์ˆ  ์Šคํƒ

๊ตฌ๋ถ„ ์„ ํƒ
์–ธ์–ด Python 3.10+
CLI typer
์ฝ˜์†” ์ถœ๋ ฅ rich
ํŒจํ„ด ํƒ์ง€ regex (re), ast
HTML ๋ฆฌํฌํŠธ Jinja2
ํŒจํ‚ค์ง€ ๋ฐฐํฌ PyPI
ํ…Œ์ŠคํŠธ pytest

๋กœ๋“œ๋งต

  • PRD ์ž‘์„ฑ
  • ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„
  • MVP ๊ตฌํ˜„ (File Collector + Secret Rule + Console Reporter)
  • Git Hygiene / Dangerous Pattern / Structure Rule
  • ํ…Œ์ŠคํŠธ (196 tests passing)
  • JSON / HTML Reporter
  • PyPI ๋ฐฐํฌ
  • ์†Œ๊ฐœ ์›น์‚ฌ์ดํŠธ
  • Git History Scan
  • VSCode Extension
  • GitHub Actions ์—ฐ๋™
  • AI ๊ธฐ๋ฐ˜ ์ฝ”๋“œ ์„ค๋ช…

๋ณด์•ˆ ์›์น™

Your code never leaves your machine.
VibeScan runs entirely locally.
No network. No upload. No tracking.

๋ผ์ด์„ ์Šค

MIT License


๊ด€๋ จ ๋ฌธ์„œ


๊ฐœ๋ฐœ ๋ธ”๋กœ๊ทธ

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vibescan_cli-0.1.0.tar.gz (58.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vibescan_cli-0.1.0-py3-none-any.whl (38.6 kB view details)

Uploaded Python 3

File details

Details for the file vibescan_cli-0.1.0.tar.gz.

File metadata

  • Download URL: vibescan_cli-0.1.0.tar.gz
  • Upload date:
  • Size: 58.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for vibescan_cli-0.1.0.tar.gz
Algorithm Hash digest
SHA256 c66c121a8abf4916fa11ee9eb1d7ab8d0f60dd839bdf06b5c7a3c9e2f768b695
MD5 60955bf804b725dab45379b3b6ba4331
BLAKE2b-256 b00947fc658940b587050e6a9605d93a0112770055d1fb7d2c7f651d763d1668

See more details on using hashes here.

File details

Details for the file vibescan_cli-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: vibescan_cli-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 38.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for vibescan_cli-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c8177bafacfa2bdce4bde042ee6cf24b400eba55623f47a3c822732199c4d3fc
MD5 7b5f5500a37fee80c0df74de605e496c
BLAKE2b-256 64af6bd9781d61bd0b8023e64c3ca9f5e58fb3c93851f57ba77ea518f85e4a00

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page