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.2.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.2-py3-none-any.whl (54.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: vibescan_cli-0.2.2.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.2.tar.gz
Algorithm Hash digest
SHA256 0139b5894b634cb2109c988cdf54b8c17bb6a2dc9a2262003c1f46658cbeb40d
MD5 309e65963ff0efa5c75710a402f25221
BLAKE2b-256 580b0130a3d485475fa2585dbccab0c2840856ff81a6518c982c642997751b5b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: vibescan_cli-0.2.2-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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 0d29d7745109bc3b34cc8242c95695c6ca79b04f6b1001aee8a7562c4f1f55d7
MD5 636b9911d3e605c7e6a64c4f33be10af
BLAKE2b-256 f287f3132ece7d99aa6569d7fa748b2e1d6aeac81efc1b365f62ed66d863842a

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