vibe-guard 1.1.1 → 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 +35 -2
- package/README.md +104 -85
- 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,39 @@ 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
|
+
|
|
28
|
+
## [1.1.2] - 2025-01-27
|
|
29
|
+
|
|
30
|
+
### Added
|
|
31
|
+
- **Scanner Sensitivity Documentation**: Added comprehensive section explaining VibeGuard's intelligent sensitivity design
|
|
32
|
+
- **False Positive Prevention Guide**: Detailed explanation of automatic filtering mechanisms
|
|
33
|
+
- **Detection Characteristics**: Clear expectations for detection rates and performance
|
|
34
|
+
- **Use Case Guidance**: Recommendations for development, production audits, and maximum sensitivity scenarios
|
|
35
|
+
|
|
36
|
+
### Changed
|
|
37
|
+
- Enhanced README with important sensitivity information
|
|
38
|
+
- Improved user understanding of scanner behavior
|
|
39
|
+
- Better transparency about detection capabilities
|
|
40
|
+
|
|
8
41
|
## [1.1.1] - 2025-01-27
|
|
9
42
|
|
|
10
43
|
### Changed
|
|
@@ -21,10 +54,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
21
54
|
- **Zero False Positives**: Clean code no longer triggers false alarms
|
|
22
55
|
- **Improved Documentation**: Updated README with all 20 rules categorized by severity
|
|
23
56
|
|
|
24
|
-
### Security Rules (
|
|
57
|
+
### Security Rules (25 Total)
|
|
25
58
|
- **Critical (7)**: Exposed secrets, hardcoded sensitive data, XSS detection
|
|
26
59
|
- **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 (
|
|
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
|
|
28
61
|
|
|
29
62
|
### Changed
|
|
30
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.
|
|
18
|
-
chmod +x vibe-guard
|
|
19
|
-
./vibe-guard scan .
|
|
20
|
-
|
|
21
|
-
# Linux (x64)
|
|
22
|
-
curl -L https://github.com/Devjosef/vibe-guard/releases/download/v1.0.1/vibe-guard-linux-x64 -o vibe-guard
|
|
29
|
+
curl -L https://github.com/Devjosef/vibe-guard/releases/download/v1.1.3/vibe-guard-macos-arm64 -o vibe-guard
|
|
23
30
|
chmod +x vibe-guard
|
|
24
31
|
./vibe-guard scan .
|
|
25
32
|
|
|
26
|
-
# Linux
|
|
27
|
-
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
|
|
28
35
|
chmod +x vibe-guard
|
|
29
36
|
./vibe-guard scan .
|
|
30
|
-
|
|
31
|
-
# Windows
|
|
32
|
-
# Download vibe-guard-windows-x64.exe from releases page
|
|
33
37
|
```
|
|
34
38
|
|
|
35
|
-
### Option 2:
|
|
39
|
+
### Option 2: NPM
|
|
36
40
|
```bash
|
|
37
|
-
#
|
|
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
|
-
```
|
|
66
|
-
|
|
67
|
-
### Option 4: NPM (for Node.js users)
|
|
68
|
-
```bash
|
|
69
|
-
# Latest version (1.0.1)
|
|
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,6 +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
|
|
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
|
|
113
92
|
|
|
114
93
|
## Usage Examples
|
|
115
94
|
|
|
@@ -130,13 +109,13 @@ vibe-guard .
|
|
|
130
109
|
vibe-guard --version
|
|
131
110
|
```
|
|
132
111
|
|
|
133
|
-
##
|
|
112
|
+
## CI/CD Integration
|
|
134
113
|
|
|
135
114
|
### GitHub Actions
|
|
136
115
|
```yaml
|
|
137
116
|
- name: Security Scan
|
|
138
117
|
run: |
|
|
139
|
-
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
|
|
140
119
|
chmod +x vibe-guard
|
|
141
120
|
./vibe-guard scan .
|
|
142
121
|
```
|
|
@@ -145,7 +124,7 @@ vibe-guard --version
|
|
|
145
124
|
```yaml
|
|
146
125
|
security_scan:
|
|
147
126
|
script:
|
|
148
|
-
- 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
|
|
149
128
|
- chmod +x vibe-guard
|
|
150
129
|
- ./vibe-guard scan .
|
|
151
130
|
```
|
|
@@ -153,19 +132,33 @@ security_scan:
|
|
|
153
132
|
### Docker in CI
|
|
154
133
|
```yaml
|
|
155
134
|
- name: Security Scan
|
|
156
|
-
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
|
|
157
136
|
```
|
|
158
137
|
|
|
159
|
-
##
|
|
138
|
+
## Scanner Sensitivity (How It Works)
|
|
160
139
|
|
|
161
|
-
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
- **
|
|
165
|
-
- **
|
|
166
|
-
- **
|
|
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
|
|
147
|
+
|
|
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
|
|
167
160
|
|
|
168
|
-
##
|
|
161
|
+
## Language Support
|
|
169
162
|
|
|
170
163
|
Works with all the languages you actually use:
|
|
171
164
|
- **JavaScript/TypeScript**: .js, .jsx, .ts, .tsx
|
|
@@ -177,7 +170,7 @@ Works with all the languages you actually use:
|
|
|
177
170
|
- **C#**: .cs
|
|
178
171
|
- **Config files**: .json, .yaml, .yml, .env
|
|
179
172
|
|
|
180
|
-
##
|
|
173
|
+
## Development
|
|
181
174
|
|
|
182
175
|
Want to contribute or build from source?
|
|
183
176
|
|
|
@@ -199,13 +192,30 @@ npm test
|
|
|
199
192
|
```
|
|
200
193
|
src/
|
|
201
194
|
├── types/ # TypeScript definitions
|
|
202
|
-
├── rules/ # All
|
|
195
|
+
├── rules/ # All 25 security rule implementations
|
|
203
196
|
├── bin/ # CLI interface
|
|
204
197
|
├── scanner.ts # File scanning engine
|
|
205
198
|
├── reporter.ts # Output formatting
|
|
206
199
|
└── index.ts # Main application
|
|
207
200
|
```
|
|
208
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
|
+
|
|
209
219
|
## Comparison
|
|
210
220
|
|
|
211
221
|
| Feature | Vibe-Guard | Other Tools |
|
|
@@ -218,9 +228,18 @@ src/
|
|
|
218
228
|
| CI/CD Ready | ✅ Yes | ⚠️ Complex |
|
|
219
229
|
| Actually explains fixes | ✅ Yes | ❌ Cryptic |
|
|
220
230
|
| ARM64 Support | ✅ Yes | ❌ Limited |
|
|
221
|
-
| 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)
|
|
222
241
|
|
|
223
|
-
##
|
|
242
|
+
## Contributing
|
|
224
243
|
|
|
225
244
|
1. **Add Security Rules**: Extend the rule engine with new patterns
|
|
226
245
|
2. **Improve Detection**: Help reduce false positives
|
|
@@ -229,12 +248,12 @@ src/
|
|
|
229
248
|
|
|
230
249
|
See [SECURITY_RULES.md](SECURITY_RULES.md) for detailed rule documentation.
|
|
231
250
|
|
|
232
|
-
##
|
|
251
|
+
## License
|
|
233
252
|
|
|
234
253
|
MIT License - Use it anywhere, anytime!
|
|
235
254
|
|
|
236
255
|
---
|
|
237
256
|
|
|
238
|
-
**Built with
|
|
257
|
+
**Built with love by developers who got tired of slow, complex security tools.**
|
|
239
258
|
|
|
240
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":"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
|
|
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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { BaseRule, FileContent, SecurityIssue } from '../types';
|
|
2
|
+
export declare class AiDataLeakagePreventionRule extends BaseRule {
|
|
3
|
+
readonly name = "ai-data-leakage-prevention";
|
|
4
|
+
readonly description = "Detects potential data leakage in AI systems and training data exposure";
|
|
5
|
+
readonly severity: "high";
|
|
6
|
+
private readonly leakagePatterns;
|
|
7
|
+
private readonly falsePositivePatterns;
|
|
8
|
+
check(fileContent: FileContent): SecurityIssue[];
|
|
9
|
+
private isFalsePositive;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=ai-data-leakage-prevention.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-data-leakage-prevention.d.ts","sourceRoot":"","sources":["../../src/rules/ai-data-leakage-prevention.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEhE,qBAAa,2BAA4B,SAAQ,QAAQ;IACvD,QAAQ,CAAC,IAAI,gCAAgC;IAC7C,QAAQ,CAAC,WAAW,6EAA6E;IACjG,QAAQ,CAAC,QAAQ,EAAG,MAAM,CAAU;IAEpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAmB9B;IAEF,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAsBpC;IAEF,KAAK,CAAC,WAAW,EAAE,WAAW,GAAG,aAAa,EAAE;IA0BhD,OAAO,CAAC,eAAe;CAGxB"}
|