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.0.tar.gz (88.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.2.0-py3-none-any.whl (53.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: vibescan_cli-0.2.0.tar.gz
  • Upload date:
  • Size: 88.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.2.0.tar.gz
Algorithm Hash digest
SHA256 872bf6d02f2c64a76f757f9a9d6cc83a1a7359d889be4b81012d8a5e5ae094c9
MD5 9420d3e452c6b4539f03edc876aba132
BLAKE2b-256 3c91efd1f620841a3566364f5e1508cb41317c8f2d9787b6d22527cba0b5f638

See more details on using hashes here.

File details

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

File metadata

  • Download URL: vibescan_cli-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 53.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.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e5239e75ef87952668581f2027ff31d8cbfa3fdc0b28bb20f9338de7eedf1a71
MD5 9a701cf6880e381894110e6abdd74e46
BLAKE2b-256 568f1c0b6f62fffe0ba6062cd4d46cca6a4b2e71e09710ba8dffaa453b965fc9

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