vibe-guard 1.1.2 → 1.1.3
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 +22 -2
- package/README.md +104 -112
- package/dist/bin/vibe-guard.js +0 -7
- package/dist/bin/vibe-guard.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -3
- package/dist/index.js.map +1 -1
- package/dist/reporter.d.ts.map +1 -1
- package/dist/reporter.js +0 -5
- package/dist/reporter.js.map +1 -1
- package/dist/rules/ai-agent-access-control.d.ts +11 -0
- package/dist/rules/ai-agent-access-control.d.ts.map +1 -0
- package/dist/rules/ai-agent-access-control.js +65 -0
- package/dist/rules/ai-agent-access-control.js.map +1 -0
- package/dist/rules/ai-data-leakage-prevention.d.ts +11 -0
- package/dist/rules/ai-data-leakage-prevention.d.ts.map +1 -0
- package/dist/rules/ai-data-leakage-prevention.js +68 -0
- package/dist/rules/ai-data-leakage-prevention.js.map +1 -0
- package/dist/rules/ai-generated-code-validation.d.ts +17 -0
- package/dist/rules/ai-generated-code-validation.d.ts.map +1 -0
- package/dist/rules/ai-generated-code-validation.js +225 -0
- package/dist/rules/ai-generated-code-validation.js.map +1 -0
- package/dist/rules/broken-access-control.d.ts.map +1 -1
- package/dist/rules/broken-access-control.js +1 -10
- package/dist/rules/broken-access-control.js.map +1 -1
- package/dist/rules/csrf-protection.d.ts +0 -1
- package/dist/rules/csrf-protection.d.ts.map +1 -1
- package/dist/rules/csrf-protection.js +2 -22
- package/dist/rules/csrf-protection.js.map +1 -1
- package/dist/rules/exposed-secrets.d.ts.map +1 -1
- package/dist/rules/exposed-secrets.js +14 -36
- 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 +0 -1
- package/dist/rules/hardcoded-sensitive-data.js.map +1 -1
- package/dist/rules/insecure-configuration.d.ts +5 -5
- package/dist/rules/insecure-configuration.d.ts.map +1 -1
- package/dist/rules/insecure-configuration.js +71 -87
- package/dist/rules/insecure-configuration.js.map +1 -1
- package/dist/rules/insecure-dependencies.d.ts.map +1 -1
- package/dist/rules/insecure-dependencies.js +29 -48
- package/dist/rules/insecure-dependencies.js.map +1 -1
- package/dist/rules/insecure-logging.d.ts.map +1 -1
- package/dist/rules/insecure-logging.js +0 -1
- package/dist/rules/insecure-logging.js.map +1 -1
- package/dist/rules/insecure-random-generation.d.ts.map +1 -1
- package/dist/rules/insecure-random-generation.js +0 -4
- package/dist/rules/insecure-random-generation.js.map +1 -1
- package/dist/rules/mcp-server-security.d.ts +11 -0
- package/dist/rules/mcp-server-security.d.ts.map +1 -0
- package/dist/rules/mcp-server-security.js +96 -0
- package/dist/rules/mcp-server-security.js.map +1 -0
- package/dist/rules/prompt-injection-detection.d.ts +11 -0
- package/dist/rules/prompt-injection-detection.d.ts.map +1 -0
- package/dist/rules/prompt-injection-detection.js +69 -0
- package/dist/rules/prompt-injection-detection.js.map +1 -0
- package/dist/rules/sql-injection.d.ts.map +1 -1
- package/dist/rules/sql-injection.js +13 -53
- 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 +0 -1
- package/dist/rules/unvalidated-input.js.map +1 -1
- package/dist/rules/xss-detection.d.ts.map +1 -1
- package/dist/rules/xss-detection.js +17 -75
- package/dist/rules/xss-detection.js.map +1 -1
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +1 -13
- package/dist/scanner.js.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/version.js +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,26 @@ 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.3] - 2025-01-27
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **Performance Optimization**: Streamlined detection patterns across all security rules
|
|
12
|
+
- **Code Quality Improvements**: Eliminated redundant logic and overlapping patterns
|
|
13
|
+
- **Enhanced Maintainability**: Consolidated similar patterns for better code organization
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
- **CSRF Protection Rule**: Removed redundant GET request filtering, optimized patterns
|
|
17
|
+
- **Insecure Logging Rule**: Eliminated overly broad patterns, kept specific sensitive data detection
|
|
18
|
+
- **Unvalidated Input Rule**: Consolidated overlapping Express request patterns
|
|
19
|
+
- **XSS Detection Rule**: Streamlined DOM manipulation, eval, and event handler patterns
|
|
20
|
+
- **Broken Access Control Rule**: Consolidated 10 route patterns into single optimized pattern
|
|
21
|
+
- **Overall Performance**: Reduced ~20 redundant patterns, improved scanning speed
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
- Eliminated redundant logic that was catching everything then filtering
|
|
25
|
+
- Removed duplicate pattern matching that slowed down scanning
|
|
26
|
+
- Improved code maintainability with cleaner rule implementations
|
|
27
|
+
|
|
8
28
|
## [1.1.2] - 2025-01-27
|
|
9
29
|
|
|
10
30
|
### Added
|
|
@@ -34,10 +54,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
34
54
|
- **Zero False Positives**: Clean code no longer triggers false alarms
|
|
35
55
|
- **Improved Documentation**: Updated README with all 20 rules categorized by severity
|
|
36
56
|
|
|
37
|
-
### Security Rules (
|
|
57
|
+
### Security Rules (25 Total)
|
|
38
58
|
- **Critical (7)**: Exposed secrets, hardcoded sensitive data, XSS detection
|
|
39
59
|
- **High (12)**: Missing authentication, SQL injection, directory traversal, open CORS, CSRF protection, insecure deserialization, broken access control, insecure file upload, insecure session management
|
|
40
|
-
- **Medium (
|
|
60
|
+
- **Medium (13)**: Unvalidated input, insecure HTTP, insecure dependencies, missing security headers, insecure random generation, insecure logging, insecure error handling, insecure configuration, AI-generated code validation, AI data leakage prevention, prompt injection detection, AI agent access control, MCP server security
|
|
41
61
|
|
|
42
62
|
### Changed
|
|
43
63
|
- Enhanced pattern detection for all security rules
|
package/README.md
CHANGED
|
@@ -1,107 +1,81 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Vibe-Guard Security Scanner
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
**The security scanner that actually catches real vulnerabilities without the noise**
|
|
4
4
|
|
|
5
|
-
Zero dependencies • Instant setup • Works everywhere •
|
|
5
|
+
Zero dependencies • Instant setup • Works everywhere • 25 essential security rules
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## What Is This Thing?
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Vibe-Guard catches the security mistakes we all make when we're coding fast. You know the drill you're in the zone, AI is helping you code, or you're quickly prototyping something, and suddenly you've got API keys in your code or forgot to add auth to that admin endpoint. We've all been there.
|
|
10
|
+
|
|
11
|
+
### The Core Philosophy
|
|
12
|
+
|
|
13
|
+
- **Catch real issues** - Not theoretical vulnerabilities that don't matter
|
|
14
|
+
- **Zero false positives** - If it flags something, it's actually a problem
|
|
15
|
+
- **Fast enough to use daily** - Scans your entire project in seconds
|
|
16
|
+
- **Works everywhere** - macOS, Linux, Windows, Docker, CI/CD
|
|
17
|
+
- **No setup required** - Download and run, that's it
|
|
18
|
+
|
|
19
|
+
## Quick Start (The "Just Show Me Code" Section)
|
|
20
|
+
|
|
21
|
+
### Option 1: Download Binary (Recommended)
|
|
10
22
|
```bash
|
|
11
23
|
# macOS (Intel)
|
|
12
|
-
curl -L https://github.com/Devjosef/vibe-guard/releases/download/v1.
|
|
24
|
+
curl -L https://github.com/Devjosef/vibe-guard/releases/download/v1.1.3/vibe-guard-macos-x64 -o vibe-guard
|
|
13
25
|
chmod +x vibe-guard
|
|
14
26
|
./vibe-guard scan .
|
|
15
27
|
|
|
16
28
|
# macOS (Apple Silicon)
|
|
17
|
-
curl -L https://github.com/Devjosef/vibe-guard/releases/download/v1.
|
|
29
|
+
curl -L https://github.com/Devjosef/vibe-guard/releases/download/v1.1.3/vibe-guard-macos-arm64 -o vibe-guard
|
|
18
30
|
chmod +x vibe-guard
|
|
19
31
|
./vibe-guard scan .
|
|
20
32
|
|
|
21
|
-
# Linux
|
|
22
|
-
curl -L https://github.com/Devjosef/vibe-guard/releases/download/v1.
|
|
33
|
+
# Linux
|
|
34
|
+
curl -L https://github.com/Devjosef/vibe-guard/releases/download/v1.1.3/vibe-guard-linux-x64 -o vibe-guard
|
|
23
35
|
chmod +x vibe-guard
|
|
24
36
|
./vibe-guard scan .
|
|
25
|
-
|
|
26
|
-
# Linux (ARM64)
|
|
27
|
-
curl -L https://github.com/Devjosef/vibe-guard/releases/download/v1.0.1/vibe-guard-linux-arm64 -o vibe-guard
|
|
28
|
-
chmod +x vibe-guard
|
|
29
|
-
./vibe-guard scan .
|
|
30
|
-
|
|
31
|
-
# Windows
|
|
32
|
-
# Download vibe-guard-windows-x64.exe from releases page
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
### Option 2: Package Managers
|
|
36
|
-
```bash
|
|
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
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### Option 3: Docker (for CI/CD)
|
|
53
|
-
```bash
|
|
54
|
-
# Pull the latest image
|
|
55
|
-
docker pull vibe-guard/vibe-guard:latest
|
|
56
|
-
|
|
57
|
-
# Scan current directory
|
|
58
|
-
docker run --rm -v $(pwd):/code vibe-guard/vibe-guard:latest scan /code
|
|
59
|
-
|
|
60
|
-
# Scan specific file
|
|
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
37
|
```
|
|
66
38
|
|
|
67
|
-
### Option
|
|
39
|
+
### Option 2: NPM
|
|
68
40
|
```bash
|
|
69
|
-
#
|
|
41
|
+
# One-time use
|
|
70
42
|
npx vibe-guard scan .
|
|
71
|
-
|
|
43
|
+
|
|
44
|
+
# Global install
|
|
72
45
|
npm install -g vibe-guard
|
|
73
46
|
vibe-guard scan .
|
|
74
47
|
```
|
|
75
48
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
- **Won't Spam You**: Smart enough to know test code from real issues
|
|
81
|
-
- **Made by Developers**: We know what actually breaks in production
|
|
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
|
|
49
|
+
### Option 3: Docker
|
|
50
|
+
```bash
|
|
51
|
+
docker run --rm -v $(pwd):/code vibe-guard/vibe-guard:1.1.3 scan /code
|
|
52
|
+
```
|
|
85
53
|
|
|
86
|
-
##
|
|
54
|
+
## The 25 Security Rules (What It Actually Catches)
|
|
87
55
|
|
|
88
56
|
### 🚨 Critical Issues (7 Rules)
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
- **
|
|
57
|
+
These will get you hacked. Fix them immediately.
|
|
58
|
+
|
|
59
|
+
- **Exposed Secrets**: API keys, tokens, credentials in code
|
|
60
|
+
- **Hardcoded Sensitive Data**: Database passwords, JWT secrets, encryption keys
|
|
61
|
+
- **XSS Detection**: Cross-site scripting vulnerabilities
|
|
92
62
|
|
|
93
63
|
### ⚠️ High-Risk Issues (12 Rules)
|
|
64
|
+
These are serious but won't immediately compromise your app.
|
|
65
|
+
|
|
94
66
|
- **Missing Authentication**: Unprotected admin routes and API endpoints
|
|
95
67
|
- **SQL Injection**: String concatenation in database queries
|
|
96
68
|
- **Directory Traversal**: Unsafe file path operations
|
|
97
69
|
- **Open CORS**: Wildcard origins that let anyone access your API
|
|
98
|
-
- **CSRF Protection**: Missing CSRF tokens in forms and unsafe
|
|
70
|
+
- **CSRF Protection**: Missing CSRF tokens in forms and unsafe cookies
|
|
99
71
|
- **Insecure Deserialization**: Unsafe JSON parsing and eval usage
|
|
100
72
|
- **Broken Access Control**: Missing authorization checks
|
|
101
73
|
- **Insecure File Upload**: Unsafe file handling and validation
|
|
102
74
|
- **Insecure Session Management**: Weak session secrets and insecure cookies
|
|
103
75
|
|
|
104
|
-
### 📋 Medium Issues (
|
|
76
|
+
### 📋 Medium Issues (13 Rules)
|
|
77
|
+
These are security best practices that should be addressed.
|
|
78
|
+
|
|
105
79
|
- **Unvalidated Input**: Direct use of user input without checks
|
|
106
80
|
- **Insecure HTTP**: Using HTTP instead of HTTPS
|
|
107
81
|
- **Insecure Dependencies**: Outdated packages with known security issues
|
|
@@ -110,33 +84,11 @@ vibe-guard scan .
|
|
|
110
84
|
- **Insecure Logging**: Sensitive data exposure in logs
|
|
111
85
|
- **Insecure Error Handling**: Stack trace and information disclosure
|
|
112
86
|
- **Insecure Configuration**: Debug mode and security features disabled
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
### 🎯 How Sensitivity Works
|
|
119
|
-
- **Critical & High Severity**: Very sensitive - catches real vulnerabilities
|
|
120
|
-
- **Medium & Low Severity**: Moderately sensitive - focuses on production-relevant issues
|
|
121
|
-
- **False Positive Prevention**: Automatically filters out:
|
|
122
|
-
- Comments and documentation
|
|
123
|
-
- Test files and development code
|
|
124
|
-
- Environment variables (`${VAR}`, `process.env.VAR`)
|
|
125
|
-
- Safe patterns (parameterized queries, HTTPS, etc.)
|
|
126
|
-
- Framework-specific safeguards
|
|
127
|
-
|
|
128
|
-
### 📊 Detection Characteristics
|
|
129
|
-
- **Detection Rate**: ~50-70% of potential issues (focused on real problems)
|
|
130
|
-
- **False Positive Rate**: Very low (designed for development workflows)
|
|
131
|
-
- **Performance**: Fast scanning without overwhelming noise
|
|
132
|
-
- **Actionable Results**: Every issue includes specific fix suggestions
|
|
133
|
-
|
|
134
|
-
### 🔧 For Different Use Cases
|
|
135
|
-
- **Development**: Current settings are well-balanced for daily use
|
|
136
|
-
- **Production Audits**: Consider running with verbose mode and manual review
|
|
137
|
-
- **Maximum Sensitivity**: Can be configured by modifying rule filters
|
|
138
|
-
|
|
139
|
-
*This approach ensures VibeGuard catches real security issues while remaining practical for development workflows.*
|
|
87
|
+
- **AI-Generated Code Validation**: Detecting potentially unsafe AI-generated code
|
|
88
|
+
- **AI Data Leakage Prevention**: Preventing sensitive data exposure in AI outputs
|
|
89
|
+
- **Prompt Injection Detection**: Detecting potential prompt injection vulnerabilities
|
|
90
|
+
- **AI Agent Access Control**: Ensuring proper access controls for AI agents
|
|
91
|
+
- **MCP Server Security**: Detecting insecure Model Context Protocol configurations
|
|
140
92
|
|
|
141
93
|
## Usage Examples
|
|
142
94
|
|
|
@@ -157,13 +109,13 @@ vibe-guard .
|
|
|
157
109
|
vibe-guard --version
|
|
158
110
|
```
|
|
159
111
|
|
|
160
|
-
##
|
|
112
|
+
## CI/CD Integration
|
|
161
113
|
|
|
162
114
|
### GitHub Actions
|
|
163
115
|
```yaml
|
|
164
116
|
- name: Security Scan
|
|
165
117
|
run: |
|
|
166
|
-
curl -L https://github.com/Devjosef/vibe-guard/releases/download/v1.
|
|
118
|
+
curl -L https://github.com/Devjosef/vibe-guard/releases/download/v1.1.3/vibe-guard-linux-x64 -o vibe-guard
|
|
167
119
|
chmod +x vibe-guard
|
|
168
120
|
./vibe-guard scan .
|
|
169
121
|
```
|
|
@@ -172,7 +124,7 @@ vibe-guard --version
|
|
|
172
124
|
```yaml
|
|
173
125
|
security_scan:
|
|
174
126
|
script:
|
|
175
|
-
- curl -L https://github.com/Devjosef/vibe-guard/releases/download/v1.
|
|
127
|
+
- curl -L https://github.com/Devjosef/vibe-guard/releases/download/v1.1.3/vibe-guard-linux-x64 -o vibe-guard
|
|
176
128
|
- chmod +x vibe-guard
|
|
177
129
|
- ./vibe-guard scan .
|
|
178
130
|
```
|
|
@@ -180,19 +132,33 @@ security_scan:
|
|
|
180
132
|
### Docker in CI
|
|
181
133
|
```yaml
|
|
182
134
|
- name: Security Scan
|
|
183
|
-
run: docker run --rm -v $(pwd):/code vibe-guard/vibe-guard:1.
|
|
135
|
+
run: docker run --rm -v $(pwd):/code vibe-guard/vibe-guard:1.1.3 scan /code
|
|
184
136
|
```
|
|
185
137
|
|
|
186
|
-
##
|
|
138
|
+
## Scanner Sensitivity (How It Works)
|
|
187
139
|
|
|
188
|
-
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
- **
|
|
192
|
-
- **
|
|
193
|
-
- **
|
|
140
|
+
Vibe-Guard is designed with **intelligent sensitivity** to balance detection accuracy with usability:
|
|
141
|
+
|
|
142
|
+
### Detection Characteristics
|
|
143
|
+
- **Detection Rate**: ~50-70% of potential issues (focused on real problems)
|
|
144
|
+
- **False Positive Rate**: Very low (designed for development workflows)
|
|
145
|
+
- **Performance**: Optimized scanning with streamlined detection patterns
|
|
146
|
+
- **Actionable Results**: Every issue includes specific fix suggestions
|
|
194
147
|
|
|
195
|
-
|
|
148
|
+
### Automatic Filtering
|
|
149
|
+
Vibe-Guard automatically filters out:
|
|
150
|
+
- Comments and documentation
|
|
151
|
+
- Test files and development code
|
|
152
|
+
- Environment variables (`${VAR}`, `process.env.VAR`)
|
|
153
|
+
- Safe patterns (parameterized queries, HTTPS, etc.)
|
|
154
|
+
- Framework-specific safeguards
|
|
155
|
+
|
|
156
|
+
### Use Cases
|
|
157
|
+
- **Development**: Current settings are well-balanced for daily use
|
|
158
|
+
- **Production Audits**: Consider running with verbose mode and manual review
|
|
159
|
+
- **Maximum Sensitivity**: Can be configured by modifying rule filters
|
|
160
|
+
|
|
161
|
+
## Language Support
|
|
196
162
|
|
|
197
163
|
Works with all the languages you actually use:
|
|
198
164
|
- **JavaScript/TypeScript**: .js, .jsx, .ts, .tsx
|
|
@@ -204,7 +170,7 @@ Works with all the languages you actually use:
|
|
|
204
170
|
- **C#**: .cs
|
|
205
171
|
- **Config files**: .json, .yaml, .yml, .env
|
|
206
172
|
|
|
207
|
-
##
|
|
173
|
+
## Development
|
|
208
174
|
|
|
209
175
|
Want to contribute or build from source?
|
|
210
176
|
|
|
@@ -226,13 +192,30 @@ npm test
|
|
|
226
192
|
```
|
|
227
193
|
src/
|
|
228
194
|
├── types/ # TypeScript definitions
|
|
229
|
-
├── rules/ # All
|
|
195
|
+
├── rules/ # All 25 security rule implementations
|
|
230
196
|
├── bin/ # CLI interface
|
|
231
197
|
├── scanner.ts # File scanning engine
|
|
232
198
|
├── reporter.ts # Output formatting
|
|
233
199
|
└── index.ts # Main application
|
|
234
200
|
```
|
|
235
201
|
|
|
202
|
+
## Why Choose Vibe-Guard?
|
|
203
|
+
|
|
204
|
+
### What You Get
|
|
205
|
+
- **Zero Setup**: Download and run, no dependencies
|
|
206
|
+
- **Fast Scanning**: Optimized patterns for speed
|
|
207
|
+
- **Real Issues**: Focused on actual vulnerabilities
|
|
208
|
+
- **Cross-Platform**: Works everywhere
|
|
209
|
+
- **CI/CD Ready**: Integrates seamlessly
|
|
210
|
+
- **Clear Fixes**: Every issue comes with specific solutions
|
|
211
|
+
|
|
212
|
+
### What You Don't Get
|
|
213
|
+
- Complex configuration files
|
|
214
|
+
- False positive spam
|
|
215
|
+
- Framework lock-in
|
|
216
|
+
- Slow scanning that kills your workflow
|
|
217
|
+
- Cryptic error messages
|
|
218
|
+
|
|
236
219
|
## Comparison
|
|
237
220
|
|
|
238
221
|
| Feature | Vibe-Guard | Other Tools |
|
|
@@ -245,9 +228,18 @@ src/
|
|
|
245
228
|
| CI/CD Ready | ✅ Yes | ⚠️ Complex |
|
|
246
229
|
| Actually explains fixes | ✅ Yes | ❌ Cryptic |
|
|
247
230
|
| ARM64 Support | ✅ Yes | ❌ Limited |
|
|
248
|
-
| Security Rules |
|
|
231
|
+
| Security Rules | 25 comprehensive rules | Varies |
|
|
232
|
+
|
|
233
|
+
## Who This Is For
|
|
234
|
+
|
|
235
|
+
- **When you're coding with AI** - ChatGPT and Copilot are amazing, but they sometimes miss security basics
|
|
236
|
+
- **Rapid prototyping** - Building something quick? Don't let security be an afterthought
|
|
237
|
+
- **No-code/Low-code folks** - Generated code can have issues, this catches them
|
|
238
|
+
- **Your CI/CD pipeline** - Catch problems before they hit production
|
|
239
|
+
- **Code reviews** - Run this before you submit that PR
|
|
240
|
+
- **Learning security** - Get real-time feedback on what can or is going wrong (and how to fix it)
|
|
249
241
|
|
|
250
|
-
##
|
|
242
|
+
## Contributing
|
|
251
243
|
|
|
252
244
|
1. **Add Security Rules**: Extend the rule engine with new patterns
|
|
253
245
|
2. **Improve Detection**: Help reduce false positives
|
|
@@ -256,12 +248,12 @@ src/
|
|
|
256
248
|
|
|
257
249
|
See [SECURITY_RULES.md](SECURITY_RULES.md) for detailed rule documentation.
|
|
258
250
|
|
|
259
|
-
##
|
|
251
|
+
## License
|
|
260
252
|
|
|
261
253
|
MIT License - Use it anywhere, anytime!
|
|
262
254
|
|
|
263
255
|
---
|
|
264
256
|
|
|
265
|
-
**Built with
|
|
257
|
+
**Built with love by developers who got tired of slow, complex security tools.**
|
|
266
258
|
|
|
267
259
|
*Security shouldn't slow you down, but security holes definitely will.*
|
package/dist/bin/vibe-guard.js
CHANGED
|
@@ -13,11 +13,9 @@ program
|
|
|
13
13
|
.name('vibe-guard')
|
|
14
14
|
.description('🛡️ Vibe-Guard Security Scanner - Catch security issues before they catch you!')
|
|
15
15
|
.version(version_1.VERSION);
|
|
16
|
-
// Shared scan handler
|
|
17
16
|
async function handleScan(target, options) {
|
|
18
17
|
try {
|
|
19
18
|
console.log(chalk_1.default.blue.bold('🛡️ Starting Vibe-Guard Security Scan...\n'));
|
|
20
|
-
// Debug logging
|
|
21
19
|
console.log('DEBUG: Format option:', options.format);
|
|
22
20
|
console.log('DEBUG: All options:', JSON.stringify(options, null, 2));
|
|
23
21
|
const scanOptions = {
|
|
@@ -30,7 +28,6 @@ async function handleScan(target, options) {
|
|
|
30
28
|
const vibeGuard = new index_1.default();
|
|
31
29
|
const output = await vibeGuard.scanAndFormat(scanOptions);
|
|
32
30
|
console.log(output);
|
|
33
|
-
// Exit with error code if issues found
|
|
34
31
|
const result = await vibeGuard.scan(scanOptions);
|
|
35
32
|
if (result.issuesFound > 0) {
|
|
36
33
|
process.exit(1);
|
|
@@ -41,7 +38,6 @@ async function handleScan(target, options) {
|
|
|
41
38
|
process.exit(1);
|
|
42
39
|
}
|
|
43
40
|
}
|
|
44
|
-
// Scan command (main functionality)
|
|
45
41
|
program
|
|
46
42
|
.command('scan')
|
|
47
43
|
.description('Scan files or directories for security issues')
|
|
@@ -51,7 +47,6 @@ program
|
|
|
51
47
|
.option('--exclude <patterns...>', 'Exclude patterns')
|
|
52
48
|
.option('--include <patterns...>', 'Include patterns')
|
|
53
49
|
.action(handleScan);
|
|
54
|
-
// Default scan command (for backward compatibility)
|
|
55
50
|
program
|
|
56
51
|
.argument('[target]', 'File or directory to scan')
|
|
57
52
|
.option('-f, --format <format>', 'Output format (table, json)', 'table')
|
|
@@ -92,12 +87,10 @@ program
|
|
|
92
87
|
console.log('Built for developers who code fast and need security that keeps up! 🚀');
|
|
93
88
|
console.log(chalk_1.default.gray('TypeScript-powered, zero-dependency security scanning'));
|
|
94
89
|
});
|
|
95
|
-
// Handle unhandled promise rejections
|
|
96
90
|
process.on('unhandledRejection', (reason, promise) => {
|
|
97
91
|
console.error(chalk_1.default.red.bold('❌ Unhandled Rejection at:'), promise, chalk_1.default.red('reason:'), reason);
|
|
98
92
|
process.exit(1);
|
|
99
93
|
});
|
|
100
|
-
// Handle uncaught exceptions
|
|
101
94
|
process.on('uncaughtException', (error) => {
|
|
102
95
|
console.error(chalk_1.default.red.bold('❌ Uncaught Exception:'), error);
|
|
103
96
|
process.exit(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vibe-guard.js","sourceRoot":"","sources":["../../src/bin/vibe-guard.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,kDAA0B;AAC1B,qDAAiC;AAEjC,8CAA2C;AAE3C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,iFAAiF,CAAC;KAC9F,OAAO,CAAC,iBAAO,CAAC,CAAC;AAEpB,
|
|
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;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;
|
|
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;IA+BrD,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;AAED,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,eAAe,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -93,7 +93,6 @@ class VibeGuard {
|
|
|
93
93
|
const targetPath = path.resolve(options.target);
|
|
94
94
|
console.log('DEBUG: VibeGuard.scan called with target:', targetPath);
|
|
95
95
|
console.log('DEBUG: Number of rules:', this.rules.length);
|
|
96
|
-
// Verify target exists
|
|
97
96
|
if (!fs.existsSync(targetPath)) {
|
|
98
97
|
throw new Error(`Target path does not exist: ${targetPath}`);
|
|
99
98
|
}
|
|
@@ -142,13 +141,11 @@ class VibeGuard {
|
|
|
142
141
|
}
|
|
143
142
|
}
|
|
144
143
|
exports.VibeGuard = VibeGuard;
|
|
145
|
-
// Export everything for external use
|
|
146
144
|
__exportStar(require("./types"), exports);
|
|
147
145
|
__exportStar(require("./rules"), exports);
|
|
148
146
|
var scanner_2 = require("./scanner");
|
|
149
147
|
Object.defineProperty(exports, "FileScanner", { enumerable: true, get: function () { return scanner_2.FileScanner; } });
|
|
150
148
|
var reporter_2 = require("./reporter");
|
|
151
149
|
Object.defineProperty(exports, "Reporter", { enumerable: true, get: function () { return reporter_2.Reporter; } });
|
|
152
|
-
// Default export
|
|
153
150
|
exports.default = VibeGuard;
|
|
154
151
|
//# sourceMappingURL=index.js.map
|
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;AAC9E,yDAAyD;AACzD,6DAA6D;AAC7D,+EAA+E;AAC/E,yEAAwE;AACxE,uEAAsE;AACtE,mFAAkF;AAClF,+DAA+D;AAC/D,qFAAoF;AACpF,6EAA4E;AAC5E,2EAA2E;AAC3E,6CAA0C;AAE1C,MAAa,SAAS;IAKpB;QACE,IAAI,CAAC,KAAK,GAAG;YACX,IAAI,oCAAkB,EAAE;YACxB,IAAI,kDAAyB,EAAE;YAC/B,IAAI,wBAAY,EAAE;YAClB,IAAI,qDAA0B,EAAE;YAChC,IAAI,gCAAgB,EAAE;YACtB,IAAI,gCAAgB,EAAE;YACtB,IAAI,wCAAoB,EAAE;YAC1B,IAAI,4CAAsB,EAAE;YAC5B,IAAI,gDAAwB,EAAE;YAC9B,IAAI,qDAA0B,EAAE;YAChC,IAAI,gCAAgB,EAAE;YACtB,IAAI,oCAAkB,EAAE;YACxB,IAAI,sDAA2B,EAAE;YACjC,IAAI,+CAAuB,EAAE;YAC7B,IAAI,6CAAsB,EAAE;YAC5B,IAAI,yDAA4B,EAAE;YAClC,IAAI,sCAAmB,EAAE;YACzB,IAAI,2DAA6B,EAAE;YACnC,IAAI,mDAAyB,EAAE;YAC/B,IAAI,kDAAyB,EAAE;SAChC,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,qBAAW,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,mBAAQ,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAoB;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEhD,OAAO,CAAC,GAAG,CAAC,2CAA2C,EAAE,UAAU,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE1D,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/reporter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAiB,MAAM,SAAS,CAAC;AAEnE,qBAAa,QAAQ;IACnB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IA8BvC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAItC,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,gBAAgB;
|
|
1
|
+
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAiB,MAAM,SAAS,CAAC;AAEnE,qBAAa,QAAQ;IACnB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IA8BvC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAItC,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,gBAAgB;IAyBxB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM;CASjD"}
|
package/dist/reporter.js
CHANGED
|
@@ -86,11 +86,8 @@ class Reporter {
|
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
88
|
truncateFilePath(filePath, maxLength = 35) {
|
|
89
|
-
// Normalize all slashes to '/'
|
|
90
89
|
let sanitizedPath = filePath.replace(/\\+/g, '/').replace(/\\/g, '/').replace(/\/+/g, '/');
|
|
91
|
-
// Remove '..' and multiple slashes
|
|
92
90
|
sanitizedPath = sanitizedPath.replace(/\.\./g, '').replace(/\/+/g, '/');
|
|
93
|
-
// Remove leading slashes
|
|
94
91
|
sanitizedPath = sanitizedPath.replace(/^\/+/, '');
|
|
95
92
|
if (sanitizedPath.length <= maxLength) {
|
|
96
93
|
return sanitizedPath;
|
|
@@ -99,14 +96,12 @@ class Reporter {
|
|
|
99
96
|
if (parts.length <= 2) {
|
|
100
97
|
return sanitizedPath;
|
|
101
98
|
}
|
|
102
|
-
// Show first and last parts with ... in between
|
|
103
99
|
const first = parts[0];
|
|
104
100
|
const last = parts[parts.length - 1];
|
|
105
101
|
const truncated = `${first}/.../${last}`;
|
|
106
102
|
if (truncated.length <= maxLength) {
|
|
107
103
|
return truncated;
|
|
108
104
|
}
|
|
109
|
-
// If still too long, just truncate from the beginning
|
|
110
105
|
return '...' + sanitizedPath.slice(-(maxLength - 3));
|
|
111
106
|
}
|
|
112
107
|
formatIssueDetails(issue) {
|
package/dist/reporter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":";;;;;;AAAA,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AACpC,kDAA0B;AAG1B,MAAa,QAAQ;IACnB,WAAW,CAAC,MAAkB;QAC5B,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;YACtB,IAAI,EAAE;gBACJ,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC;gBAClB,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC;gBACtB,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC;gBAClB,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC;gBAClB,eAAK,CAAC,IAAI,CAAC,SAAS,CAAC;aACtB;YACD,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC5B,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,CAAC,IAAI;gBACV,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAClC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;gBACjC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACrB,KAAK,CAAC,OAAO;aACd,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACrG,CAAC;IAED,UAAU,CAAC,MAAkB;QAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;IAEO,aAAa,CAAC,MAAkB;QACtC,MAAM,MAAM,GAAG,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,eAAK,CAAC,KAAK,CAAC,iCAAiC,MAAM,CAAC,YAAY,QAAQ,CAAC,CAAC;QAE1F,OAAO,GAAG,MAAM,OAAO,OAAO,IAAI,CAAC;IACrC,CAAC;IAEO,YAAY,CAAC,MAAkB;QACrC,MAAM,KAAK,GAAG,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,eAAK,CAAC,MAAM,CAAC,SAAS,MAAM,CAAC,WAAW,uBAAuB,MAAM,CAAC,YAAY,QAAQ,CAAC,CAAC;QAE7G,OAAO,GAAG,KAAK,KAAK,QAAQ,EAAE,CAAC;IACjC,CAAC;IAEO,aAAa,CAAC,MAAkB;QACtC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAC3B,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,OAAO,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,WAAW,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QAEvE,OAAO,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,WAAW,GAAG,MAAM,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACvF,CAAC;IAEO,qBAAqB;QAC3B,OAAO,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC;YAC7C,eAAK,CAAC,IAAI,CAAC,kEAAkE,CAAC;YAC9E,eAAK,CAAC,IAAI,CAAC,mEAAmE,CAAC;YAC/E,eAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC;YAC7D,eAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;IACzE,CAAC;IAEO,aAAa,CAAC,QAAuB;QAC3C,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,UAAU;gBACb,OAAO,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACpC,KAAK,MAAM;gBACT,OAAO,eAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC3B,KAAK,QAAQ;gBACX,OAAO,eAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAChC,KAAK,KAAK;gBACR,OAAO,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B;gBACE,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1C,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,QAAgB,EAAE,YAAoB,EAAE;QAC/D
|
|
1
|
+
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { BaseRule, FileContent, SecurityIssue } from '../types';
|
|
2
|
+
export declare class AiAgentAccessControlRule extends BaseRule {
|
|
3
|
+
readonly name = "ai-agent-access-control";
|
|
4
|
+
readonly description = "Detects insecure AI agent access controls and privilege escalation";
|
|
5
|
+
readonly severity: "critical";
|
|
6
|
+
private readonly accessControlPatterns;
|
|
7
|
+
private readonly falsePositivePatterns;
|
|
8
|
+
check(fileContent: FileContent): SecurityIssue[];
|
|
9
|
+
private isFalsePositive;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=ai-agent-access-control.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-agent-access-control.d.ts","sourceRoot":"","sources":["../../src/rules/ai-agent-access-control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEhE,qBAAa,wBAAyB,SAAQ,QAAQ;IACpD,QAAQ,CAAC,IAAI,6BAA6B;IAC1C,QAAQ,CAAC,WAAW,wEAAwE;IAC5F,QAAQ,CAAC,QAAQ,EAAG,UAAU,CAAU;IAExC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAoBpC;IAEF,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAkBpC;IAEF,KAAK,CAAC,WAAW,EAAE,WAAW,GAAG,aAAa,EAAE;IA0BhD,OAAO,CAAC,eAAe;CAGxB"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AiAgentAccessControlRule = void 0;
|
|
4
|
+
const types_1 = require("../types");
|
|
5
|
+
class AiAgentAccessControlRule extends types_1.BaseRule {
|
|
6
|
+
constructor() {
|
|
7
|
+
super(...arguments);
|
|
8
|
+
this.name = 'ai-agent-access-control';
|
|
9
|
+
this.description = 'Detects insecure AI agent access controls and privilege escalation';
|
|
10
|
+
this.severity = 'critical';
|
|
11
|
+
this.accessControlPatterns = [
|
|
12
|
+
// AI Agent with elevated privileges
|
|
13
|
+
{ pattern: /(?:ai[_-]?agent|agent|bot|assistant)\s*[:=]\s*['"`]?(?:admin|root|superuser|sudo)/gi, type: 'Elevated AI Agent Privileges' },
|
|
14
|
+
{ pattern: /(?:permissions?|roles?|access)\s*[:=]\s*['"`]?(?:all|full|unlimited|wildcard)/gi, type: 'Unlimited AI Agent Permissions' },
|
|
15
|
+
// Missing RBAC for AI agents
|
|
16
|
+
{ pattern: /(?:ai[_-]?agent|agent|bot|assistant)\s*[:=]\s*['"`]?[^'"`]*\b(?:without|no|missing)\s+(?:role|permission|access[_-]?control)/gi, type: 'Missing AI Agent RBAC' },
|
|
17
|
+
// AI Agent with persistent elevated access
|
|
18
|
+
{ pattern: /(?:ai[_-]?agent|agent|bot|assistant).*?(?:permanent|persistent|always|forever).*?(?:admin|root|elevated)/gi, type: 'Persistent Elevated AI Access' },
|
|
19
|
+
// AI Agent bypassing authentication
|
|
20
|
+
{ pattern: /(?:ai[_-]?agent|agent|bot|assistant).*?(?:bypass|skip|ignore).*?(?:auth|authentication|login)/gi, type: 'AI Agent Auth Bypass' },
|
|
21
|
+
// AI Agent with system-level access
|
|
22
|
+
{ pattern: /(?:ai[_-]?agent|agent|bot|assistant).*?(?:system|os|kernel|hardware)/gi, type: 'AI Agent System Access' },
|
|
23
|
+
// MCP Server insecure access
|
|
24
|
+
{ pattern: /(?:mcp|model[_-]?context[_-]?protocol).*?(?:unrestricted|open|public)/gi, type: 'Insecure MCP Server Access' },
|
|
25
|
+
{ pattern: /(?:mcp[_-]?server|model[_-]?context[_-]?protocol).*?(?:no[_-]?auth|without[_-]?auth)/gi, type: 'MCP Server Without Auth' }
|
|
26
|
+
];
|
|
27
|
+
this.falsePositivePatterns = [
|
|
28
|
+
/example/i,
|
|
29
|
+
/demo/i,
|
|
30
|
+
/test/i,
|
|
31
|
+
/mock/i,
|
|
32
|
+
/sample/i,
|
|
33
|
+
/placeholder/i,
|
|
34
|
+
/comment/i,
|
|
35
|
+
/todo/i,
|
|
36
|
+
/fixme/i,
|
|
37
|
+
/\/\/.*/i,
|
|
38
|
+
/#.*/i,
|
|
39
|
+
/\/\*.*\*\//i,
|
|
40
|
+
/<!--.*-->/i,
|
|
41
|
+
/development/i,
|
|
42
|
+
/dev/i,
|
|
43
|
+
/staging/i,
|
|
44
|
+
/localhost/i
|
|
45
|
+
];
|
|
46
|
+
}
|
|
47
|
+
check(fileContent) {
|
|
48
|
+
const issues = [];
|
|
49
|
+
for (const { pattern, type } of this.accessControlPatterns) {
|
|
50
|
+
const matches = this.findMatches(fileContent.content, pattern);
|
|
51
|
+
for (const { line, column, lineContent } of matches) {
|
|
52
|
+
if (this.isFalsePositive(lineContent)) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
issues.push(this.createIssue(fileContent.path, line, column, lineContent, `Critical: ${type} detected`, `Implement proper RBAC for AI agents. Use least privilege principle and temporary elevated access only when necessary. Consider using AI agent isolation and sandboxing.`, 'critical'));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return issues;
|
|
59
|
+
}
|
|
60
|
+
isFalsePositive(lineContent) {
|
|
61
|
+
return this.falsePositivePatterns.some(pattern => pattern.test(lineContent));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.AiAgentAccessControlRule = AiAgentAccessControlRule;
|
|
65
|
+
//# sourceMappingURL=ai-agent-access-control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-agent-access-control.js","sourceRoot":"","sources":["../../src/rules/ai-agent-access-control.ts"],"names":[],"mappings":";;;AAAA,oCAAgE;AAEhE,MAAa,wBAAyB,SAAQ,gBAAQ;IAAtD;;QACW,SAAI,GAAG,yBAAyB,CAAC;QACjC,gBAAW,GAAG,oEAAoE,CAAC;QACnF,aAAQ,GAAG,UAAmB,CAAC;QAEvB,0BAAqB,GAAG;YACvC,oCAAoC;YACpC,EAAE,OAAO,EAAE,qFAAqF,EAAE,IAAI,EAAE,8BAA8B,EAAE;YACxI,EAAE,OAAO,EAAE,iFAAiF,EAAE,IAAI,EAAE,gCAAgC,EAAE;YAEtI,6BAA6B;YAC7B,EAAE,OAAO,EAAE,gIAAgI,EAAE,IAAI,EAAE,uBAAuB,EAAE;YAE5K,2CAA2C;YAC3C,EAAE,OAAO,EAAE,4GAA4G,EAAE,IAAI,EAAE,+BAA+B,EAAE;YAEhK,oCAAoC;YACpC,EAAE,OAAO,EAAE,iGAAiG,EAAE,IAAI,EAAE,sBAAsB,EAAE;YAE5I,oCAAoC;YACpC,EAAE,OAAO,EAAE,wEAAwE,EAAE,IAAI,EAAE,wBAAwB,EAAE;YAErH,6BAA6B;YAC7B,EAAE,OAAO,EAAE,yEAAyE,EAAE,IAAI,EAAE,4BAA4B,EAAE;YAC1H,EAAE,OAAO,EAAE,wFAAwF,EAAE,IAAI,EAAE,yBAAyB,EAAE;SACvI,CAAC;QAEe,0BAAqB,GAAG;YACvC,UAAU;YACV,OAAO;YACP,OAAO;YACP,OAAO;YACP,SAAS;YACT,cAAc;YACd,UAAU;YACV,OAAO;YACP,QAAQ;YACR,SAAS;YACT,MAAM;YACN,aAAa;YACb,YAAY;YACZ,cAAc;YACd,MAAM;YACN,UAAU;YACV,YAAY;SACb,CAAC;IA+BJ,CAAC;IA7BC,KAAK,CAAC,WAAwB;QAC5B,MAAM,MAAM,GAAoB,EAAE,CAAC;QAEnC,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAE/D,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,OAAO,EAAE,CAAC;gBACpD,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC;oBACtC,SAAS;gBACX,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAC1B,WAAW,CAAC,IAAI,EAChB,IAAI,EACJ,MAAM,EACN,WAAW,EACX,aAAa,IAAI,WAAW,EAC5B,yKAAyK,EACzK,UAAU,CACX,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,eAAe,CAAC,WAAmB;QACzC,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC/E,CAAC;CACF;AA5ED,4DA4EC"}
|