vibe-guard 1.0.1 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +34 -0
- package/README.md +81 -41
- package/dist/bin/vibe-guard.js +26 -39
- package/dist/bin/vibe-guard.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +36 -10
- package/dist/index.js.map +1 -1
- package/dist/rules/broken-access-control.d.ts +14 -0
- package/dist/rules/broken-access-control.d.ts.map +1 -0
- package/dist/rules/broken-access-control.js +189 -0
- package/dist/rules/broken-access-control.js.map +1 -0
- package/dist/rules/csrf-protection.d.ts +15 -0
- package/dist/rules/csrf-protection.d.ts.map +1 -0
- package/dist/rules/csrf-protection.js +254 -0
- package/dist/rules/csrf-protection.js.map +1 -0
- package/dist/rules/directory-traversal.d.ts.map +1 -1
- package/dist/rules/directory-traversal.js +37 -5
- package/dist/rules/directory-traversal.js.map +1 -1
- package/dist/rules/exposed-secrets.d.ts.map +1 -1
- package/dist/rules/exposed-secrets.js +29 -1
- package/dist/rules/exposed-secrets.js.map +1 -1
- package/dist/rules/hardcoded-sensitive-data.d.ts.map +1 -1
- package/dist/rules/hardcoded-sensitive-data.js +36 -2
- package/dist/rules/hardcoded-sensitive-data.js.map +1 -1
- package/dist/rules/index.d.ts +11 -1
- package/dist/rules/index.d.ts.map +1 -1
- package/dist/rules/index.js +31 -1
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/insecure-configuration.d.ts +13 -0
- package/dist/rules/insecure-configuration.d.ts.map +1 -0
- package/dist/rules/insecure-configuration.js +140 -0
- package/dist/rules/insecure-configuration.js.map +1 -0
- package/dist/rules/insecure-dependencies.d.ts.map +1 -1
- package/dist/rules/insecure-dependencies.js +19 -0
- package/dist/rules/insecure-dependencies.js.map +1 -1
- package/dist/rules/insecure-deserialization.d.ts +15 -0
- package/dist/rules/insecure-deserialization.d.ts.map +1 -0
- package/dist/rules/insecure-deserialization.js +189 -0
- package/dist/rules/insecure-deserialization.js.map +1 -0
- package/dist/rules/insecure-error-handling.d.ts +13 -0
- package/dist/rules/insecure-error-handling.d.ts.map +1 -0
- package/dist/rules/insecure-error-handling.js +140 -0
- package/dist/rules/insecure-error-handling.js.map +1 -0
- package/dist/rules/insecure-file-upload.d.ts +16 -0
- package/dist/rules/insecure-file-upload.d.ts.map +1 -0
- package/dist/rules/insecure-file-upload.js +255 -0
- package/dist/rules/insecure-file-upload.js.map +1 -0
- package/dist/rules/insecure-http.d.ts +1 -0
- package/dist/rules/insecure-http.d.ts.map +1 -1
- package/dist/rules/insecure-http.js +76 -3
- package/dist/rules/insecure-http.js.map +1 -1
- package/dist/rules/insecure-logging.d.ts +16 -0
- package/dist/rules/insecure-logging.d.ts.map +1 -0
- package/dist/rules/insecure-logging.js +225 -0
- package/dist/rules/insecure-logging.js.map +1 -0
- package/dist/rules/insecure-random-generation.d.ts +16 -0
- package/dist/rules/insecure-random-generation.d.ts.map +1 -0
- package/dist/rules/insecure-random-generation.js +254 -0
- package/dist/rules/insecure-random-generation.js.map +1 -0
- package/dist/rules/insecure-session-management.d.ts +15 -0
- package/dist/rules/insecure-session-management.d.ts.map +1 -0
- package/dist/rules/insecure-session-management.js +205 -0
- package/dist/rules/insecure-session-management.js.map +1 -0
- package/dist/rules/missing-authentication.d.ts.map +1 -1
- package/dist/rules/missing-authentication.js +80 -2
- package/dist/rules/missing-authentication.js.map +1 -1
- package/dist/rules/missing-security-headers.d.ts.map +1 -1
- package/dist/rules/missing-security-headers.js +23 -0
- package/dist/rules/missing-security-headers.js.map +1 -1
- package/dist/rules/open-cors.d.ts +0 -2
- package/dist/rules/open-cors.d.ts.map +1 -1
- package/dist/rules/open-cors.js +71 -14
- package/dist/rules/open-cors.js.map +1 -1
- package/dist/rules/sql-injection.d.ts.map +1 -1
- package/dist/rules/sql-injection.js +57 -11
- package/dist/rules/sql-injection.js.map +1 -1
- package/dist/rules/unvalidated-input.d.ts.map +1 -1
- package/dist/rules/unvalidated-input.js +76 -6
- package/dist/rules/unvalidated-input.js.map +1 -1
- package/dist/rules/xss-detection.d.ts +13 -0
- package/dist/rules/xss-detection.d.ts.map +1 -0
- package/dist/rules/xss-detection.js +237 -0
- package/dist/rules/xss-detection.js.map +1 -0
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +6 -0
- package/dist/scanner.js.map +1 -1
- package/dist/types/version.d.ts +2 -0
- package/dist/types/version.d.ts.map +1 -0
- package/dist/types/version.js +5 -0
- package/dist/types/version.js.map +1 -0
- package/package.json +33 -6
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,40 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.1.1] - 2025-01-27
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
- Enhanced npm package description with specific vulnerability types
|
|
12
|
+
- Added OS and CPU architecture metadata
|
|
13
|
+
- Improved package.json formatting and metadata
|
|
14
|
+
|
|
15
|
+
## [1.1.0] - 2025-01-27
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
- **Complete Security Rule Coverage**: All 20 security rules now working and tested
|
|
19
|
+
- **Enhanced Vulnerability Detection**: Improved patterns and edge case handling
|
|
20
|
+
- **Comprehensive Testing**: All rules tested against real vulnerability examples
|
|
21
|
+
- **Zero False Positives**: Clean code no longer triggers false alarms
|
|
22
|
+
- **Improved Documentation**: Updated README with all 20 rules categorized by severity
|
|
23
|
+
|
|
24
|
+
### Security Rules (20 Total)
|
|
25
|
+
- **Critical (7)**: Exposed secrets, hardcoded sensitive data, XSS detection
|
|
26
|
+
- **High (12)**: Missing authentication, SQL injection, directory traversal, open CORS, CSRF protection, insecure deserialization, broken access control, insecure file upload, insecure session management
|
|
27
|
+
- **Medium (12)**: Unvalidated input, insecure HTTP, insecure dependencies, missing security headers, insecure random generation, insecure logging, insecure error handling, insecure configuration
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
- Enhanced pattern detection for all security rules
|
|
31
|
+
- Improved false positive prevention mechanisms
|
|
32
|
+
- Updated package description and keywords
|
|
33
|
+
- Fixed circular dependency in package.json
|
|
34
|
+
- Enhanced distribution documentation
|
|
35
|
+
|
|
36
|
+
### Fixed
|
|
37
|
+
- All 20 security rules now properly detect vulnerabilities
|
|
38
|
+
- Eliminated false positives on clean code and test files
|
|
39
|
+
- Fixed edge cases in pattern matching
|
|
40
|
+
- Improved error handling and performance
|
|
41
|
+
|
|
8
42
|
## [1.0.1] - 2025-06-09
|
|
9
43
|
|
|
10
44
|
### Changed
|
package/README.md
CHANGED
|
@@ -1,51 +1,76 @@
|
|
|
1
1
|
# Vibe-Guard Security Scanner
|
|
2
2
|
|
|
3
|
-
**Catches the security mistakes we all make when
|
|
3
|
+
**Catches the security mistakes we all make when we code quickly**
|
|
4
4
|
|
|
5
|
-
Zero dependencies • Instant setup • Works everywhere •
|
|
5
|
+
Zero dependencies • Instant setup • Works everywhere • 20 essential security rules
|
|
6
6
|
|
|
7
|
-
## Quick Start (Choose Your
|
|
7
|
+
## Quick Start (Choose Your Style)
|
|
8
8
|
|
|
9
|
-
### Option 1:
|
|
9
|
+
### Option 1: Download Binary Directly (Recommended)
|
|
10
10
|
```bash
|
|
11
|
-
# macOS
|
|
12
|
-
curl -L https://
|
|
11
|
+
# macOS (Intel)
|
|
12
|
+
curl -L https://github.com/Devjosef/vibe-guard/releases/download/v1.0.1/vibe-guard-macos-x64 -o vibe-guard
|
|
13
|
+
chmod +x vibe-guard
|
|
14
|
+
./vibe-guard scan .
|
|
13
15
|
|
|
14
|
-
#
|
|
15
|
-
vibe-guard
|
|
16
|
-
|
|
16
|
+
# macOS (Apple Silicon)
|
|
17
|
+
curl -L https://github.com/Devjosef/vibe-guard/releases/download/v1.0.1/vibe-guard-macos-arm64 -o vibe-guard
|
|
18
|
+
chmod +x vibe-guard
|
|
19
|
+
./vibe-guard scan .
|
|
17
20
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
# macOS
|
|
21
|
-
curl -L https://github.com/user/vibe-guard/releases/latest/download/vibe-guard-macos -o vibe-guard
|
|
21
|
+
# Linux (x64)
|
|
22
|
+
curl -L https://github.com/Devjosef/vibe-guard/releases/download/v1.0.1/vibe-guard-linux-x64 -o vibe-guard
|
|
22
23
|
chmod +x vibe-guard
|
|
23
24
|
./vibe-guard scan .
|
|
24
25
|
|
|
25
|
-
# Linux
|
|
26
|
-
curl -L https://github.com/
|
|
26
|
+
# Linux (ARM64)
|
|
27
|
+
curl -L https://github.com/Devjosef/vibe-guard/releases/download/v1.0.1/vibe-guard-linux-arm64 -o vibe-guard
|
|
27
28
|
chmod +x vibe-guard
|
|
28
29
|
./vibe-guard scan .
|
|
29
30
|
|
|
30
31
|
# Windows
|
|
31
|
-
# Download vibe-guard-
|
|
32
|
+
# Download vibe-guard-windows-x64.exe from releases page
|
|
32
33
|
```
|
|
33
34
|
|
|
34
|
-
### Option
|
|
35
|
+
### Option 2: Package Managers
|
|
35
36
|
```bash
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
# Homebrew (macOS/Linux) - Personal Tap
|
|
38
|
+
brew tap Devjosef/vibe-guard
|
|
39
|
+
brew install vibe-guard
|
|
40
|
+
|
|
41
|
+
# Chocolatey (Windows) - Ready for submission
|
|
42
|
+
# choco install vibe-guard
|
|
43
|
+
|
|
44
|
+
# RPM (RHEL/CentOS) - Ready for submission
|
|
45
|
+
# rpm -i https://github.com/Devjosef/vibe-guard/releases/latest/download/vibe-guard.rpm
|
|
46
|
+
|
|
47
|
+
# DEB (Ubuntu/Debian) - Ready for submission
|
|
48
|
+
# curl -L https://github.com/Devjosef/vibe-guard/releases/latest/download/vibe-guard.deb -o vibe-guard.deb
|
|
49
|
+
# sudo dpkg -i vibe-guard.deb
|
|
40
50
|
```
|
|
41
51
|
|
|
42
|
-
### Option
|
|
52
|
+
### Option 3: Docker (for CI/CD)
|
|
43
53
|
```bash
|
|
54
|
+
# Pull the latest image
|
|
55
|
+
docker pull vibe-guard/vibe-guard:latest
|
|
56
|
+
|
|
44
57
|
# Scan current directory
|
|
45
|
-
docker run --rm -v $(pwd):/code vibe-guard scan /code
|
|
58
|
+
docker run --rm -v $(pwd):/code vibe-guard/vibe-guard:latest scan /code
|
|
46
59
|
|
|
47
60
|
# Scan specific file
|
|
48
|
-
docker run --rm -v $(pwd):/code vibe-guard scan /code/app.js
|
|
61
|
+
docker run --rm -v $(pwd):/code vibe-guard/vibe-guard:latest scan /code/app.js
|
|
62
|
+
|
|
63
|
+
# Use specific version
|
|
64
|
+
docker run --rm -v $(pwd):/code vibe-guard/vibe-guard:1.0.1 scan /code
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Option 4: NPM (for Node.js users)
|
|
68
|
+
```bash
|
|
69
|
+
# Latest version (1.0.1)
|
|
70
|
+
npx vibe-guard scan .
|
|
71
|
+
# or
|
|
72
|
+
npm install -g vibe-guard
|
|
73
|
+
vibe-guard scan .
|
|
49
74
|
```
|
|
50
75
|
|
|
51
76
|
## Why You'll Actually Use This
|
|
@@ -55,25 +80,36 @@ docker run --rm -v $(pwd):/code vibe-guard scan /code/app.js
|
|
|
55
80
|
- **Won't Spam You**: Smart enough to know test code from real issues
|
|
56
81
|
- **Made by Developers**: We know what actually breaks in production
|
|
57
82
|
- **Works Everywhere**: macOS, Linux, Windows, Docker, CI/CD - you name it
|
|
83
|
+
- **ARM64 Support**: Native support for Apple Silicon and ARM64 Linux
|
|
84
|
+
- **Cross-Platform**: Single binary for each platform, no dependencies
|
|
58
85
|
|
|
59
|
-
## What It Catches (All
|
|
86
|
+
## What It Catches (All 20 Rules)
|
|
60
87
|
|
|
61
|
-
### 🚨 Critical Issues (
|
|
62
|
-
- **Exposed
|
|
63
|
-
- **Hardcoded
|
|
64
|
-
- **
|
|
88
|
+
### 🚨 Critical Issues (7 Rules)
|
|
89
|
+
- **Exposed Secrets**: API keys, tokens, and credentials in your code
|
|
90
|
+
- **Hardcoded Sensitive Data**: Database passwords, JWT secrets, encryption keys
|
|
91
|
+
- **XSS Detection**: Cross-site scripting vulnerabilities in web applications
|
|
65
92
|
|
|
66
|
-
### ⚠️ High-Risk Issues (
|
|
93
|
+
### ⚠️ High-Risk Issues (12 Rules)
|
|
67
94
|
- **Missing Authentication**: Unprotected admin routes and API endpoints
|
|
68
95
|
- **SQL Injection**: String concatenation in database queries
|
|
69
96
|
- **Directory Traversal**: Unsafe file path operations
|
|
70
97
|
- **Open CORS**: Wildcard origins that let anyone access your API
|
|
98
|
+
- **CSRF Protection**: Missing CSRF tokens in forms and unsafe cookie configurations
|
|
99
|
+
- **Insecure Deserialization**: Unsafe JSON parsing and eval usage
|
|
100
|
+
- **Broken Access Control**: Missing authorization checks
|
|
101
|
+
- **Insecure File Upload**: Unsafe file handling and validation
|
|
102
|
+
- **Insecure Session Management**: Weak session secrets and insecure cookies
|
|
71
103
|
|
|
72
|
-
### 📋 Medium Issues (
|
|
104
|
+
### 📋 Medium Issues (12 Rules)
|
|
73
105
|
- **Unvalidated Input**: Direct use of user input without checks
|
|
74
106
|
- **Insecure HTTP**: Using HTTP instead of HTTPS
|
|
75
|
-
- **
|
|
107
|
+
- **Insecure Dependencies**: Outdated packages with known security issues
|
|
76
108
|
- **Missing Security Headers**: No helmet.js or manual security headers
|
|
109
|
+
- **Insecure Random Generation**: Using Math.random() for security purposes
|
|
110
|
+
- **Insecure Logging**: Sensitive data exposure in logs
|
|
111
|
+
- **Insecure Error Handling**: Stack trace and information disclosure
|
|
112
|
+
- **Insecure Configuration**: Debug mode and security features disabled
|
|
77
113
|
|
|
78
114
|
## Usage Examples
|
|
79
115
|
|
|
@@ -100,22 +136,24 @@ vibe-guard --version
|
|
|
100
136
|
```yaml
|
|
101
137
|
- name: Security Scan
|
|
102
138
|
run: |
|
|
103
|
-
curl -L https://
|
|
104
|
-
vibe-guard
|
|
139
|
+
curl -L https://github.com/Devjosef/vibe-guard/releases/download/v1.0.1/vibe-guard-linux-x64 -o vibe-guard
|
|
140
|
+
chmod +x vibe-guard
|
|
141
|
+
./vibe-guard scan .
|
|
105
142
|
```
|
|
106
143
|
|
|
107
144
|
### GitLab CI
|
|
108
145
|
```yaml
|
|
109
146
|
security_scan:
|
|
110
147
|
script:
|
|
111
|
-
- curl -L https://
|
|
112
|
-
- vibe-guard
|
|
148
|
+
- curl -L https://github.com/Devjosef/vibe-guard/releases/download/v1.0.1/vibe-guard-linux-x64 -o vibe-guard
|
|
149
|
+
- chmod +x vibe-guard
|
|
150
|
+
- ./vibe-guard scan .
|
|
113
151
|
```
|
|
114
152
|
|
|
115
153
|
### Docker in CI
|
|
116
154
|
```yaml
|
|
117
155
|
- name: Security Scan
|
|
118
|
-
run: docker run --rm -v $(pwd):/code vibe-guard scan /code
|
|
156
|
+
run: docker run --rm -v $(pwd):/code vibe-guard/vibe-guard:1.0.1 scan /code
|
|
119
157
|
```
|
|
120
158
|
|
|
121
159
|
## Who This Is For
|
|
@@ -145,7 +183,7 @@ Want to contribute or build from source?
|
|
|
145
183
|
|
|
146
184
|
```bash
|
|
147
185
|
# Clone and build
|
|
148
|
-
git clone https://github.com/
|
|
186
|
+
git clone https://github.com/Devjosef/vibe-guard.git
|
|
149
187
|
cd vibe-guard
|
|
150
188
|
npm install
|
|
151
189
|
npm run build
|
|
@@ -161,7 +199,7 @@ npm test
|
|
|
161
199
|
```
|
|
162
200
|
src/
|
|
163
201
|
├── types/ # TypeScript definitions
|
|
164
|
-
├── rules/ # All
|
|
202
|
+
├── rules/ # All 20 security rule implementations
|
|
165
203
|
├── bin/ # CLI interface
|
|
166
204
|
├── scanner.ts # File scanning engine
|
|
167
205
|
├── reporter.ts # Output formatting
|
|
@@ -179,13 +217,15 @@ src/
|
|
|
179
217
|
| Languages | All major ones | Limited |
|
|
180
218
|
| CI/CD Ready | ✅ Yes | ⚠️ Complex |
|
|
181
219
|
| Actually explains fixes | ✅ Yes | ❌ Cryptic |
|
|
220
|
+
| ARM64 Support | ✅ Yes | ❌ Limited |
|
|
221
|
+
| Security Rules | 20 comprehensive rules | Varies |
|
|
182
222
|
|
|
183
223
|
## 🤝 Contributing
|
|
184
224
|
|
|
185
225
|
1. **Add Security Rules**: Extend the rule engine with new patterns
|
|
186
226
|
2. **Improve Detection**: Help reduce false positives
|
|
187
227
|
3. **Add Languages**: Support more file types and frameworks
|
|
188
|
-
4. **Better UX**: Improve CLI and output formatting
|
|
228
|
+
4. **Better UX**: Improve CLI and output formatting
|
|
189
229
|
|
|
190
230
|
See [SECURITY_RULES.md](SECURITY_RULES.md) for detailed rule documentation.
|
|
191
231
|
|
|
@@ -197,4 +237,4 @@ MIT License - Use it anywhere, anytime!
|
|
|
197
237
|
|
|
198
238
|
**Built with ❤️ by developers who got tired of slow, and complex security tools.**
|
|
199
239
|
|
|
200
|
-
*Security shouldn't slow you down, but security holes definitely will.*
|
|
240
|
+
*Security shouldn't slow you down, but security holes definitely will.*
|
package/dist/bin/vibe-guard.js
CHANGED
|
@@ -7,23 +7,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7
7
|
const commander_1 = require("commander");
|
|
8
8
|
const chalk_1 = __importDefault(require("chalk"));
|
|
9
9
|
const index_1 = __importDefault(require("../index"));
|
|
10
|
+
const version_1 = require("../types/version");
|
|
10
11
|
const program = new commander_1.Command();
|
|
11
12
|
program
|
|
12
13
|
.name('vibe-guard')
|
|
13
14
|
.description('🛡️ Vibe-Guard Security Scanner - Catch security issues before they catch you!')
|
|
14
|
-
.version(
|
|
15
|
-
//
|
|
16
|
-
|
|
17
|
-
.command('scan')
|
|
18
|
-
.description('Scan files or directories for security issues')
|
|
19
|
-
.argument('<target>', 'File or directory to scan')
|
|
20
|
-
.option('-f, --format <format>', 'Output format (table, json)', 'table')
|
|
21
|
-
.option('-v, --verbose', 'Verbose output', false)
|
|
22
|
-
.option('--exclude <patterns...>', 'Exclude patterns')
|
|
23
|
-
.option('--include <patterns...>', 'Include patterns')
|
|
24
|
-
.action(async (target, options) => {
|
|
15
|
+
.version(version_1.VERSION);
|
|
16
|
+
// Shared scan handler
|
|
17
|
+
async function handleScan(target, options) {
|
|
25
18
|
try {
|
|
26
19
|
console.log(chalk_1.default.blue.bold('🛡️ Starting Vibe-Guard Security Scan...\n'));
|
|
20
|
+
// Debug logging
|
|
21
|
+
console.log('DEBUG: Format option:', options.format);
|
|
22
|
+
console.log('DEBUG: All options:', JSON.stringify(options, null, 2));
|
|
27
23
|
const scanOptions = {
|
|
28
24
|
target,
|
|
29
25
|
format: options.format,
|
|
@@ -44,39 +40,30 @@ program
|
|
|
44
40
|
console.error(chalk_1.default.red.bold('❌ Error:'), error instanceof Error ? error.message : 'Unknown error');
|
|
45
41
|
process.exit(1);
|
|
46
42
|
}
|
|
47
|
-
}
|
|
48
|
-
//
|
|
43
|
+
}
|
|
44
|
+
// Scan command (main functionality)
|
|
45
|
+
program
|
|
46
|
+
.command('scan')
|
|
47
|
+
.description('Scan files or directories for security issues')
|
|
48
|
+
.argument('<target>', 'File or directory to scan')
|
|
49
|
+
.option('-f, --format <format>', 'Output format (table, json)', 'table')
|
|
50
|
+
.option('-v, --verbose', 'Verbose output', false)
|
|
51
|
+
.option('--exclude <patterns...>', 'Exclude patterns')
|
|
52
|
+
.option('--include <patterns...>', 'Include patterns')
|
|
53
|
+
.action(handleScan);
|
|
54
|
+
// Default scan command (for backward compatibility)
|
|
49
55
|
program
|
|
50
56
|
.argument('[target]', 'File or directory to scan')
|
|
51
57
|
.option('-f, --format <format>', 'Output format (table, json)', 'table')
|
|
52
58
|
.option('-v, --verbose', 'Verbose output', false)
|
|
53
59
|
.option('--exclude <patterns...>', 'Exclude patterns')
|
|
54
60
|
.option('--include <patterns...>', 'Include patterns')
|
|
55
|
-
.action(
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
target,
|
|
62
|
-
format: options.format,
|
|
63
|
-
verbose: options.verbose,
|
|
64
|
-
exclude: options.exclude,
|
|
65
|
-
include: options.include
|
|
66
|
-
};
|
|
67
|
-
const vibeGuard = new index_1.default();
|
|
68
|
-
const output = await vibeGuard.scanAndFormat(scanOptions);
|
|
69
|
-
console.log(output);
|
|
70
|
-
// Exit with error code if issues found
|
|
71
|
-
const result = await vibeGuard.scan(scanOptions);
|
|
72
|
-
if (result.issuesFound > 0) {
|
|
73
|
-
process.exit(1);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
catch (error) {
|
|
77
|
-
console.error(chalk_1.default.red.bold('❌ Error:'), error instanceof Error ? error.message : 'Unknown error');
|
|
78
|
-
process.exit(1);
|
|
79
|
-
}
|
|
61
|
+
.action((target, options) => {
|
|
62
|
+
if (target) {
|
|
63
|
+
handleScan(target, options);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
program.help();
|
|
80
67
|
}
|
|
81
68
|
});
|
|
82
69
|
program
|
|
@@ -99,8 +86,8 @@ program
|
|
|
99
86
|
.command('version')
|
|
100
87
|
.description('Show version information')
|
|
101
88
|
.action(() => {
|
|
102
|
-
const vibeGuard = new index_1.default();
|
|
103
89
|
console.log(chalk_1.default.blue.bold('🛡️ Vibe-Guard Security Scanner'));
|
|
90
|
+
const vibeGuard = new index_1.default();
|
|
104
91
|
console.log(`Version: ${vibeGuard.getVersion()}`);
|
|
105
92
|
console.log('Built for developers who code fast and need security that keeps up! 🚀');
|
|
106
93
|
console.log(chalk_1.default.gray('TypeScript-powered, zero-dependency security scanning'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vibe-guard.js","sourceRoot":"","sources":["../../src/bin/vibe-guard.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,kDAA0B;AAC1B,qDAAiC;
|
|
1
|
+
{"version":3,"file":"vibe-guard.js","sourceRoot":"","sources":["../../src/bin/vibe-guard.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAuB5D,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,KAAK,CAAa;;IA6BpB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAgCrD,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,GAAE,OAAO,GAAG,MAAgB,GAAG,MAAM;IAUvE,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAK1D,QAAQ,IAAI,QAAQ,EAAE;IAItB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAIjD,UAAU,IAAI,MAAM;CAGrB;AAGD,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,eAAe,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -51,6 +51,17 @@ const unvalidated_input_1 = require("./rules/unvalidated-input");
|
|
|
51
51
|
const directory_traversal_1 = require("./rules/directory-traversal");
|
|
52
52
|
const insecure_dependencies_1 = require("./rules/insecure-dependencies");
|
|
53
53
|
const missing_security_headers_1 = require("./rules/missing-security-headers");
|
|
54
|
+
const xss_detection_1 = require("./rules/xss-detection");
|
|
55
|
+
const csrf_protection_1 = require("./rules/csrf-protection");
|
|
56
|
+
const insecure_deserialization_1 = require("./rules/insecure-deserialization");
|
|
57
|
+
const broken_access_control_1 = require("./rules/broken-access-control");
|
|
58
|
+
const insecure_file_upload_1 = require("./rules/insecure-file-upload");
|
|
59
|
+
const insecure_random_generation_1 = require("./rules/insecure-random-generation");
|
|
60
|
+
const insecure_logging_1 = require("./rules/insecure-logging");
|
|
61
|
+
const insecure_session_management_1 = require("./rules/insecure-session-management");
|
|
62
|
+
const insecure_error_handling_1 = require("./rules/insecure-error-handling");
|
|
63
|
+
const insecure_configuration_1 = require("./rules/insecure-configuration");
|
|
64
|
+
const version_1 = require("./types/version");
|
|
54
65
|
class VibeGuard {
|
|
55
66
|
constructor() {
|
|
56
67
|
this.rules = [
|
|
@@ -63,22 +74,44 @@ class VibeGuard {
|
|
|
63
74
|
new unvalidated_input_1.UnvalidatedInputRule(),
|
|
64
75
|
new directory_traversal_1.DirectoryTraversalRule(),
|
|
65
76
|
new insecure_dependencies_1.InsecureDependenciesRule(),
|
|
66
|
-
new missing_security_headers_1.MissingSecurityHeadersRule()
|
|
77
|
+
new missing_security_headers_1.MissingSecurityHeadersRule(),
|
|
78
|
+
new xss_detection_1.XssDetectionRule(),
|
|
79
|
+
new csrf_protection_1.CsrfProtectionRule(),
|
|
80
|
+
new insecure_deserialization_1.InsecureDeserializationRule(),
|
|
81
|
+
new broken_access_control_1.BrokenAccessControlRule(),
|
|
82
|
+
new insecure_file_upload_1.InsecureFileUploadRule(),
|
|
83
|
+
new insecure_random_generation_1.InsecureRandomGenerationRule(),
|
|
84
|
+
new insecure_logging_1.InsecureLoggingRule(),
|
|
85
|
+
new insecure_session_management_1.InsecureSessionManagementRule(),
|
|
86
|
+
new insecure_error_handling_1.InsecureErrorHandlingRule(),
|
|
87
|
+
new insecure_configuration_1.InsecureConfigurationRule()
|
|
67
88
|
];
|
|
68
89
|
this.scanner = new scanner_1.FileScanner();
|
|
69
90
|
this.reporter = new reporter_1.Reporter();
|
|
70
91
|
}
|
|
71
92
|
async scan(options) {
|
|
72
93
|
const targetPath = path.resolve(options.target);
|
|
94
|
+
console.log('DEBUG: VibeGuard.scan called with target:', targetPath);
|
|
95
|
+
console.log('DEBUG: Number of rules:', this.rules.length);
|
|
73
96
|
// Verify target exists
|
|
74
97
|
if (!fs.existsSync(targetPath)) {
|
|
75
98
|
throw new Error(`Target path does not exist: ${targetPath}`);
|
|
76
99
|
}
|
|
77
100
|
const stats = fs.statSync(targetPath);
|
|
101
|
+
console.log('DEBUG: Target is file:', stats.isFile());
|
|
102
|
+
console.log('DEBUG: Target is directory:', stats.isDirectory());
|
|
78
103
|
if (stats.isFile()) {
|
|
79
|
-
|
|
104
|
+
console.log('DEBUG: Calling scanner.scanFile...');
|
|
105
|
+
const result = await this.scanner.scanFile(targetPath, this.rules);
|
|
106
|
+
console.log('DEBUG: scanFile result:', {
|
|
107
|
+
filesScanned: result.filesScanned,
|
|
108
|
+
issuesFound: result.issuesFound,
|
|
109
|
+
summary: result.summary
|
|
110
|
+
});
|
|
111
|
+
return result;
|
|
80
112
|
}
|
|
81
113
|
else if (stats.isDirectory()) {
|
|
114
|
+
console.log('DEBUG: Calling scanner.scanDirectory...');
|
|
82
115
|
return await this.scanner.scanDirectory(targetPath, this.rules);
|
|
83
116
|
}
|
|
84
117
|
else {
|
|
@@ -105,14 +138,7 @@ class VibeGuard {
|
|
|
105
138
|
return this.rules.find(rule => rule.name === name);
|
|
106
139
|
}
|
|
107
140
|
getVersion() {
|
|
108
|
-
|
|
109
|
-
const packagePath = path.join(__dirname, '..', 'package.json');
|
|
110
|
-
const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf-8'));
|
|
111
|
-
return packageJson.version || '1.0.0';
|
|
112
|
-
}
|
|
113
|
-
catch {
|
|
114
|
-
return '1.0.0';
|
|
115
|
-
}
|
|
141
|
+
return version_1.VERSION;
|
|
116
142
|
}
|
|
117
143
|
}
|
|
118
144
|
exports.VibeGuard = VibeGuard;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAwC;AACxC,yCAAsC;AAEtC,6DAA6D;AAC7D,2EAA2E;AAC3E,iDAAiD;AACjD,+EAA8E;AAC9E,yDAAyD;AACzD,yDAAyD;AACzD,iEAAiE;AACjE,qEAAqE;AACrE,yEAAyE;AACzE,+EAA8E;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BaseRule, FileContent, SecurityIssue } from '../types';
|
|
2
|
+
export declare class BrokenAccessControlRule extends BaseRule {
|
|
3
|
+
readonly name = "broken-access-control";
|
|
4
|
+
readonly description = "Detects missing authorization checks and insecure direct object references";
|
|
5
|
+
readonly severity: "high";
|
|
6
|
+
private readonly accessControlPatterns;
|
|
7
|
+
private readonly authorizationPatterns;
|
|
8
|
+
check(fileContent: FileContent): SecurityIssue[];
|
|
9
|
+
private hasAuthorizationCheck;
|
|
10
|
+
private isCommentOrTest;
|
|
11
|
+
private isSimplePropertyAccess;
|
|
12
|
+
private isDevelopmentContext;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=broken-access-control.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broken-access-control.d.ts","sourceRoot":"","sources":["../../src/rules/broken-access-control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEhE,qBAAa,uBAAwB,SAAQ,QAAQ;IACnD,QAAQ,CAAC,IAAI,2BAA2B;IACxC,QAAQ,CAAC,WAAW,gFAAgF;IACpG,QAAQ,CAAC,QAAQ,EAAG,MAAM,CAAU;IAEpC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAgDpC;IAEF,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CA2BpC;IAEF,KAAK,CAAC,WAAW,EAAE,WAAW,GAAG,aAAa,EAAE;IAkEhD,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,eAAe;IAiCvB,OAAO,CAAC,sBAAsB;IAkB9B,OAAO,CAAC,oBAAoB;CAoB7B"}
|