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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0139b5894b634cb2109c988cdf54b8c17bb6a2dc9a2262003c1f46658cbeb40d
|
|
| MD5 |
309e65963ff0efa5c75710a402f25221
|
|
| BLAKE2b-256 |
580b0130a3d485475fa2585dbccab0c2840856ff81a6518c982c642997751b5b
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0d29d7745109bc3b34cc8242c95695c6ca79b04f6b1001aee8a7562c4f1f55d7
|
|
| MD5 |
636b9911d3e605c7e6a64c4f33be10af
|
|
| BLAKE2b-256 |
f287f3132ece7d99aa6569d7fa748b2e1d6aeac81efc1b365f62ed66d863842a
|