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.4.tar.gz (88.5 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.4-py3-none-any.whl (53.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: vibescan_cli-0.2.4.tar.gz
  • Upload date:
  • Size: 88.5 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.4.tar.gz
Algorithm Hash digest
SHA256 fab2b7bd16ea067157e6440b9f72779b9be997ed1c696a9a2e337a171f885c7f
MD5 ad2083b7cc5050bcab604ed55bf8c084
BLAKE2b-256 f523a1f330f8e6ec9d3f4214e6f28310819491700a6b3094c60ac3485e7b0d9a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: vibescan_cli-0.2.4-py3-none-any.whl
  • Upload date:
  • Size: 53.7 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.4-py3-none-any.whl
Algorithm Hash digest
SHA256 a8bd16d2da076652912b80b7093797a8cdfa6b8fdd3850d70151ec3f0c106d7b
MD5 69da50e6b59481b74e0dcffffa75ee1a
BLAKE2b-256 022033800fa7691ae2cf50aaeafc9a1f19efe00b2859520c1a1a6d6e94b84440

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