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.2.3.tar.gz (89.1 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.2.3-py3-none-any.whl (54.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: vibescan_cli-0.2.3.tar.gz
  • Upload date:
  • Size: 89.1 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.2.3.tar.gz
Algorithm Hash digest
SHA256 a56fc974a3fec0bd5c17eee096e94f18984d3b2b2c10fefd313b5a7f03e12ca7
MD5 19fdd098a7fc5c0300f9c36269604435
BLAKE2b-256 380c2f0d1454a63871762451292646f75c052b04c50b6acdfdf5e3cde09bf23e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: vibescan_cli-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 54.4 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.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 e317223bc4b09eced5908d273c6aa5e1c020283244e877701b125c6f63e557a9
MD5 e0d33b69e0db3d3c8732d494fef517d1
BLAKE2b-256 c3e9d74bc684b947799c4f8f5ade1344eb23f875b9425943d4e98ec24293ff25

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