hackmyagent-core 0.2.2 → 0.3.0
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/README.md +181 -6
- package/dist/attack/attack.test.d.ts +5 -0
- package/dist/attack/attack.test.d.ts.map +1 -0
- package/dist/attack/attack.test.js +292 -0
- package/dist/attack/attack.test.js.map +1 -0
- package/dist/attack/index.d.ts +8 -0
- package/dist/attack/index.d.ts.map +1 -0
- package/dist/attack/index.js +24 -0
- package/dist/attack/index.js.map +1 -0
- package/dist/attack/payloads/capability-abuse.d.ts +8 -0
- package/dist/attack/payloads/capability-abuse.d.ts.map +1 -0
- package/dist/attack/payloads/capability-abuse.js +199 -0
- package/dist/attack/payloads/capability-abuse.js.map +1 -0
- package/dist/attack/payloads/context-manipulation.d.ts +8 -0
- package/dist/attack/payloads/context-manipulation.d.ts.map +1 -0
- package/dist/attack/payloads/context-manipulation.js +194 -0
- package/dist/attack/payloads/context-manipulation.js.map +1 -0
- package/dist/attack/payloads/data-exfiltration.d.ts +8 -0
- package/dist/attack/payloads/data-exfiltration.d.ts.map +1 -0
- package/dist/attack/payloads/data-exfiltration.js +222 -0
- package/dist/attack/payloads/data-exfiltration.js.map +1 -0
- package/dist/attack/payloads/index.d.ts +27 -0
- package/dist/attack/payloads/index.d.ts.map +1 -0
- package/dist/attack/payloads/index.js +68 -0
- package/dist/attack/payloads/index.js.map +1 -0
- package/dist/attack/payloads/jailbreak.d.ts +8 -0
- package/dist/attack/payloads/jailbreak.d.ts.map +1 -0
- package/dist/attack/payloads/jailbreak.js +236 -0
- package/dist/attack/payloads/jailbreak.js.map +1 -0
- package/dist/attack/payloads/prompt-injection.d.ts +8 -0
- package/dist/attack/payloads/prompt-injection.d.ts.map +1 -0
- package/dist/attack/payloads/prompt-injection.js +235 -0
- package/dist/attack/payloads/prompt-injection.js.map +1 -0
- package/dist/attack/scanner.d.ts +59 -0
- package/dist/attack/scanner.d.ts.map +1 -0
- package/dist/attack/scanner.js +312 -0
- package/dist/attack/scanner.js.map +1 -0
- package/dist/attack/types.d.ts +128 -0
- package/dist/attack/types.d.ts.map +1 -0
- package/dist/attack/types.js +36 -0
- package/dist/attack/types.js.map +1 -0
- package/dist/benchmarks/index.d.ts +16 -0
- package/dist/benchmarks/index.d.ts.map +1 -0
- package/dist/benchmarks/index.js +27 -0
- package/dist/benchmarks/index.js.map +1 -0
- package/dist/benchmarks/oasb-1.d.ts +95 -0
- package/dist/benchmarks/oasb-1.d.ts.map +1 -0
- package/dist/benchmarks/oasb-1.js +623 -0
- package/dist/benchmarks/oasb-1.js.map +1 -0
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -2
- package/dist/index.js.map +1 -1
- package/package.json +5 -3
package/README.md
CHANGED
|
@@ -1,17 +1,23 @@
|
|
|
1
|
-
# HackMyAgent
|
|
2
|
-
|
|
3
|
-
> **AI Agent Security Scanner** — Detect exposed MCP servers, leaked API keys, and vulnerable Claude Code configurations. Free, no signup required.
|
|
1
|
+
# HackMyAgent CLI
|
|
4
2
|
|
|
5
3
|
[](https://www.npmjs.com/package/hackmyagent)
|
|
6
4
|
[](https://opensource.org/licenses/Apache-2.0)
|
|
7
5
|
|
|
6
|
+
**Part of [OpenA2A](https://opena2a.org)** — open-source security for AI agents
|
|
7
|
+
|
|
8
8
|
**Website:** [hackmyagent.com](https://hackmyagent.com) — Scan external infrastructure for exposed MCP endpoints, configs, and credentials
|
|
9
9
|
|
|
10
|
+
## Disclaimer
|
|
11
|
+
|
|
12
|
+
HackMyAgent performs passive reconnaissance only (port checks and HTTP requests) — it does not exploit vulnerabilities. However, please only scan systems you own or have permission to test. The authors assume no liability for misuse of this tool.
|
|
13
|
+
|
|
10
14
|
```bash
|
|
11
15
|
npx hackmyagent check @publisher/skill # verify a skill before installing
|
|
12
16
|
npx hackmyagent secure # harden your agent setup (100 checks)
|
|
13
17
|
npx hackmyagent secure --fix # auto-fix security issues
|
|
14
18
|
npx hackmyagent scan example.com # scan for exposed infrastructure
|
|
19
|
+
npx hackmyagent attack --local # red team with 55 attack payloads
|
|
20
|
+
npx hackmyagent benchmark --benchmark oasb-1 # run OASB-1 security benchmark
|
|
15
21
|
```
|
|
16
22
|
|
|
17
23
|
## Two Ways to Scan
|
|
@@ -26,7 +32,7 @@ npx hackmyagent scan example.com # scan for exposed infrastructure
|
|
|
26
32
|
AI agents are powerful but introduce new attack surfaces. Skills can be malicious. Configs can leak secrets. MCP servers can be exposed. HackMyAgent helps you:
|
|
27
33
|
|
|
28
34
|
- **Check** skills before installing (publisher verification, permission analysis)
|
|
29
|
-
- **Secure** your agent setup (100-point CIS
|
|
35
|
+
- **Secure** your agent setup (100-point CIS security scan, auto-remediation)
|
|
30
36
|
- **Scan** external infrastructure (exposed MCP endpoints, leaked configs)
|
|
31
37
|
|
|
32
38
|
## Installation
|
|
@@ -108,6 +114,8 @@ hackmyagent check @publisher/skill --offline # skip DNS verification
|
|
|
108
114
|
- Permissions requested (filesystem, network, shell access)
|
|
109
115
|
- Revocation status against global blocklist
|
|
110
116
|
|
|
117
|
+
**Note:** Only scan systems you own or have permission to test.
|
|
118
|
+
|
|
111
119
|
**Risk Levels:** `low`, `medium`, `high`, `critical`
|
|
112
120
|
|
|
113
121
|
### `hackmyagent scan`
|
|
@@ -129,6 +137,128 @@ hackmyagent scan example.com --json
|
|
|
129
137
|
|
|
130
138
|
**Scoring:** A (90-100), B (80-89), C (70-79), D (60-69), F (<60)
|
|
131
139
|
|
|
140
|
+
### `hackmyagent attack`
|
|
141
|
+
|
|
142
|
+
Red team your AI agent with adversarial security testing. 55 attack payloads across 5 categories.
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
# Local simulation (no API calls - test payloads locally)
|
|
146
|
+
hackmyagent attack --local
|
|
147
|
+
hackmyagent attack --local --system-prompt "You are a helpful assistant"
|
|
148
|
+
|
|
149
|
+
# Test an API endpoint
|
|
150
|
+
hackmyagent attack https://api.example.com/v1/chat
|
|
151
|
+
hackmyagent attack https://api.example.com --api-format anthropic
|
|
152
|
+
|
|
153
|
+
# Filter by category or intensity
|
|
154
|
+
hackmyagent attack --local --category prompt-injection
|
|
155
|
+
hackmyagent attack --local --intensity aggressive
|
|
156
|
+
|
|
157
|
+
# Output formats
|
|
158
|
+
hackmyagent attack --local -f json
|
|
159
|
+
hackmyagent attack --local -f sarif -o results.sarif
|
|
160
|
+
|
|
161
|
+
# Verbose mode (show each payload result)
|
|
162
|
+
hackmyagent attack --local --verbose
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
**Attack Categories:**
|
|
166
|
+
|
|
167
|
+
| Category | Payloads | Description |
|
|
168
|
+
|----------|----------|-------------|
|
|
169
|
+
| `prompt-injection` | 12 | Manipulate agent behavior via malicious input |
|
|
170
|
+
| `jailbreak` | 12 | Bypass safety guardrails and restrictions |
|
|
171
|
+
| `data-exfiltration` | 11 | Extract sensitive information from the agent |
|
|
172
|
+
| `capability-abuse` | 10 | Misuse agent tools and capabilities |
|
|
173
|
+
| `context-manipulation` | 10 | Poison agent context or memory |
|
|
174
|
+
|
|
175
|
+
**Intensity Levels:**
|
|
176
|
+
|
|
177
|
+
| Level | Description |
|
|
178
|
+
|-------|-------------|
|
|
179
|
+
| `passive` | Observation only, minimal risk |
|
|
180
|
+
| `active` | Standard attack payloads (default) |
|
|
181
|
+
| `aggressive` | Creative/risky payloads, full suite |
|
|
182
|
+
|
|
183
|
+
**Output Formats:**
|
|
184
|
+
- `text` - Human-readable report (default)
|
|
185
|
+
- `json` - Machine-readable JSON
|
|
186
|
+
- `sarif` - SARIF 2.1.0 for GitHub Security tab integration
|
|
187
|
+
|
|
188
|
+
**Risk Scoring:**
|
|
189
|
+
- 0-24: LOW - Minor issues, agent is reasonably secure
|
|
190
|
+
- 25-49: MEDIUM - Some vulnerabilities, review recommended
|
|
191
|
+
- 50-69: HIGH - Significant vulnerabilities, action required
|
|
192
|
+
- 70-100: CRITICAL - Severe vulnerabilities, immediate action needed
|
|
193
|
+
|
|
194
|
+
### `hackmyagent benchmark`
|
|
195
|
+
|
|
196
|
+
Run the OASB-1 (OpenA2A Security Benchmark) against your agent configuration.
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
# Run benchmark
|
|
200
|
+
hackmyagent benchmark --benchmark oasb-1
|
|
201
|
+
|
|
202
|
+
# Target specific directory
|
|
203
|
+
hackmyagent benchmark --benchmark oasb-1 ./my-project
|
|
204
|
+
|
|
205
|
+
# Output formats
|
|
206
|
+
hackmyagent benchmark --benchmark oasb-1 -f json
|
|
207
|
+
hackmyagent benchmark --benchmark oasb-1 -f sarif -o results.sarif
|
|
208
|
+
hackmyagent benchmark --benchmark oasb-1 -f html -o report.html
|
|
209
|
+
hackmyagent benchmark --benchmark oasb-1 -f asp -o profile.asp.json
|
|
210
|
+
|
|
211
|
+
# CI/CD with fail threshold
|
|
212
|
+
hackmyagent benchmark --benchmark oasb-1 --fail-below 70
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
**Output Formats:**
|
|
216
|
+
- `text` - Human-readable report (default)
|
|
217
|
+
- `json` - Machine-readable JSON
|
|
218
|
+
- `sarif` - SARIF 2.1.0 for GitHub/IDE integration
|
|
219
|
+
- `html` - Standalone HTML report
|
|
220
|
+
- `asp` - Agent Security Profile (HackMyAgent format)
|
|
221
|
+
|
|
222
|
+
### `hackmyagent secure-openclaw`
|
|
223
|
+
|
|
224
|
+
Scan OpenClaw/Moltbot installations with 34 specialized security checks and auto-remediation.
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
hackmyagent secure-openclaw # scan default location
|
|
228
|
+
hackmyagent secure-openclaw ~/.moltbot # scan specific directory
|
|
229
|
+
hackmyagent secure-openclaw --fix # auto-fix gateway misconfigurations
|
|
230
|
+
hackmyagent secure-openclaw --fix --dry-run # preview fixes
|
|
231
|
+
hackmyagent secure-openclaw --json # JSON output for CI/CD
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
**Detects:**
|
|
235
|
+
- Unsigned/malicious skills (ClawHavoc campaign patterns)
|
|
236
|
+
- ClickFix social engineering attacks
|
|
237
|
+
- Reverse shell backdoors
|
|
238
|
+
- Credential exfiltration (wallets, SSH keys, API keys)
|
|
239
|
+
- Heartbeat/cron abuse
|
|
240
|
+
- Gateway misconfigurations (GHSA-g8p2 vulnerability)
|
|
241
|
+
- Disabled sandbox/approval confirmations
|
|
242
|
+
|
|
243
|
+
**Auto-Fix (with `--fix`):**
|
|
244
|
+
| Check | Before | After |
|
|
245
|
+
|-------|--------|-------|
|
|
246
|
+
| GATEWAY-001 | `0.0.0.0` | `127.0.0.1` (local-only) |
|
|
247
|
+
| GATEWAY-003 | Plaintext token | `${OPENCLAW_AUTH_TOKEN}` env var |
|
|
248
|
+
| GATEWAY-004 | Approvals disabled | Approvals enabled |
|
|
249
|
+
| GATEWAY-005 | Sandbox disabled | Sandbox enabled |
|
|
250
|
+
|
|
251
|
+
**Check Categories:**
|
|
252
|
+
| Category | Checks | Description |
|
|
253
|
+
|----------|--------|-------------|
|
|
254
|
+
| SKILL | 12 | Malicious skill detection |
|
|
255
|
+
| HEARTBEAT | 6 | Heartbeat/cron abuse |
|
|
256
|
+
| GATEWAY | 6 | Gateway misconfigurations (4 auto-fixable) |
|
|
257
|
+
| CONFIG | 6 | Insecure settings |
|
|
258
|
+
| SUPPLY | 4 | Supply chain attacks |
|
|
259
|
+
|
|
260
|
+
See [SECURITY_CHECKS.md](docs/SECURITY_CHECKS.md#openclaw-security-checks) for full documentation.
|
|
261
|
+
|
|
132
262
|
### `hackmyagent rollback`
|
|
133
263
|
|
|
134
264
|
Undo auto-fix changes.
|
|
@@ -163,6 +293,38 @@ jobs:
|
|
|
163
293
|
path: security-report.json
|
|
164
294
|
```
|
|
165
295
|
|
|
296
|
+
### GitHub Actions with Attack Mode (SARIF)
|
|
297
|
+
|
|
298
|
+
```yaml
|
|
299
|
+
name: AI Agent Security
|
|
300
|
+
on: [push, pull_request]
|
|
301
|
+
|
|
302
|
+
jobs:
|
|
303
|
+
attack-scan:
|
|
304
|
+
runs-on: ubuntu-latest
|
|
305
|
+
steps:
|
|
306
|
+
- uses: actions/checkout@v4
|
|
307
|
+
- uses: actions/setup-node@v4
|
|
308
|
+
with:
|
|
309
|
+
node-version: '20'
|
|
310
|
+
- name: Run attack simulation
|
|
311
|
+
run: npx hackmyagent attack --local -f sarif -o attack-results.sarif
|
|
312
|
+
- name: Upload SARIF to GitHub Security
|
|
313
|
+
uses: github/codeql-action/upload-sarif@v3
|
|
314
|
+
with:
|
|
315
|
+
sarif_file: attack-results.sarif
|
|
316
|
+
|
|
317
|
+
benchmark:
|
|
318
|
+
runs-on: ubuntu-latest
|
|
319
|
+
steps:
|
|
320
|
+
- uses: actions/checkout@v4
|
|
321
|
+
- uses: actions/setup-node@v4
|
|
322
|
+
with:
|
|
323
|
+
node-version: '20'
|
|
324
|
+
- name: Run OASB-1 benchmark
|
|
325
|
+
run: npx hackmyagent benchmark --benchmark oasb-1 --fail-below 70
|
|
326
|
+
```
|
|
327
|
+
|
|
166
328
|
### Pre-commit Hook
|
|
167
329
|
|
|
168
330
|
```bash
|
|
@@ -194,6 +356,7 @@ For the complete list of 100 security checks with descriptions and remediation g
|
|
|
194
356
|
|
|
195
357
|
The following issues can be automatically fixed with `--fix`:
|
|
196
358
|
|
|
359
|
+
**General (`hackmyagent secure --fix`):**
|
|
197
360
|
| Check ID | Issue | Auto-Fix Action |
|
|
198
361
|
|----------|-------|-----------------|
|
|
199
362
|
| CRED-001 | Exposed API keys | Replace with env var reference |
|
|
@@ -203,7 +366,15 @@ The following issues can be automatically fixed with `--fix`:
|
|
|
203
366
|
| MCP-001 | Root filesystem access | Scope to project directory |
|
|
204
367
|
| NET-001 | Bound to 0.0.0.0 | Bind to 127.0.0.1 |
|
|
205
368
|
|
|
206
|
-
|
|
369
|
+
**OpenClaw (`hackmyagent secure-openclaw --fix`):**
|
|
370
|
+
| Check ID | Issue | Auto-Fix Action |
|
|
371
|
+
|----------|-------|-----------------|
|
|
372
|
+
| GATEWAY-001 | Bound to 0.0.0.0 | Bind to 127.0.0.1 |
|
|
373
|
+
| GATEWAY-003 | Plaintext token in config | Replace with `${OPENCLAW_AUTH_TOKEN}` |
|
|
374
|
+
| GATEWAY-004 | Approvals disabled | Enable approval confirmations |
|
|
375
|
+
| GATEWAY-005 | Sandbox disabled | Enable sandbox mode |
|
|
376
|
+
|
|
377
|
+
Always use `--dry-run` first to preview changes. Backups are created automatically.
|
|
207
378
|
|
|
208
379
|
## Environment Variables
|
|
209
380
|
|
|
@@ -248,4 +419,8 @@ Apache-2.0
|
|
|
248
419
|
|
|
249
420
|
---
|
|
250
421
|
|
|
251
|
-
|
|
422
|
+
## Secure What You Find
|
|
423
|
+
|
|
424
|
+
HackMyAgent finds vulnerabilities. **[AIM](https://github.com/opena2a-org/agent-identity-management)** fixes them — the open-source NHI platform for AI agents with cryptographic identity, governance, and access control.
|
|
425
|
+
|
|
426
|
+
→ [Get started with AIM](https://opena2a.org/docs/quick-start) | [Learn about NHI governance](https://opena2a.org/nhi)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attack.test.d.ts","sourceRoot":"","sources":["../../src/attack/attack.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Attack Module Tests
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const vitest_1 = require("vitest");
|
|
7
|
+
const scanner_1 = require("./scanner");
|
|
8
|
+
const payloads_1 = require("./payloads");
|
|
9
|
+
const types_1 = require("./types");
|
|
10
|
+
(0, vitest_1.describe)('Attack Payloads', () => {
|
|
11
|
+
(0, vitest_1.describe)('payload structure', () => {
|
|
12
|
+
(0, vitest_1.it)('all payloads have required fields', () => {
|
|
13
|
+
for (const payload of payloads_1.ALL_PAYLOADS) {
|
|
14
|
+
(0, vitest_1.expect)(payload.id).toBeTruthy();
|
|
15
|
+
(0, vitest_1.expect)(payload.category).toBeTruthy();
|
|
16
|
+
(0, vitest_1.expect)(payload.name).toBeTruthy();
|
|
17
|
+
(0, vitest_1.expect)(payload.description).toBeTruthy();
|
|
18
|
+
(0, vitest_1.expect)(payload.intensity).toBeTruthy();
|
|
19
|
+
(0, vitest_1.expect)(payload.payload).toBeTruthy();
|
|
20
|
+
(0, vitest_1.expect)(payload.severity).toBeTruthy();
|
|
21
|
+
(0, vitest_1.expect)(payload.remediation).toBeTruthy();
|
|
22
|
+
(0, vitest_1.expect)(Array.isArray(payload.successIndicators)).toBe(true);
|
|
23
|
+
(0, vitest_1.expect)(Array.isArray(payload.blockedIndicators)).toBe(true);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
(0, vitest_1.it)('all payloads have unique IDs', () => {
|
|
27
|
+
const ids = payloads_1.ALL_PAYLOADS.map(p => p.id);
|
|
28
|
+
const uniqueIds = new Set(ids);
|
|
29
|
+
(0, vitest_1.expect)(ids.length).toBe(uniqueIds.size);
|
|
30
|
+
});
|
|
31
|
+
(0, vitest_1.it)('payload IDs follow naming convention', () => {
|
|
32
|
+
const prefixes = {
|
|
33
|
+
'prompt-injection': 'PI',
|
|
34
|
+
'jailbreak': 'JB',
|
|
35
|
+
'data-exfiltration': 'DE',
|
|
36
|
+
'capability-abuse': 'CA',
|
|
37
|
+
'context-manipulation': 'CM',
|
|
38
|
+
};
|
|
39
|
+
for (const payload of payloads_1.ALL_PAYLOADS) {
|
|
40
|
+
const expectedPrefix = prefixes[payload.category];
|
|
41
|
+
(0, vitest_1.expect)(payload.id.startsWith(expectedPrefix)).toBe(true);
|
|
42
|
+
(0, vitest_1.expect)(payload.id).toMatch(/^[A-Z]{2}-\d{3}$/);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
(0, vitest_1.it)('all indicators are valid RegExp', () => {
|
|
46
|
+
for (const payload of payloads_1.ALL_PAYLOADS) {
|
|
47
|
+
for (const indicator of payload.successIndicators) {
|
|
48
|
+
(0, vitest_1.expect)(indicator).toBeInstanceOf(RegExp);
|
|
49
|
+
}
|
|
50
|
+
for (const indicator of payload.blockedIndicators) {
|
|
51
|
+
(0, vitest_1.expect)(indicator).toBeInstanceOf(RegExp);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
(0, vitest_1.describe)('PAYLOAD_STATS', () => {
|
|
57
|
+
(0, vitest_1.it)('reports correct total count', () => {
|
|
58
|
+
(0, vitest_1.expect)(payloads_1.PAYLOAD_STATS.total).toBe(payloads_1.ALL_PAYLOADS.length);
|
|
59
|
+
});
|
|
60
|
+
(0, vitest_1.it)('reports correct category counts', () => {
|
|
61
|
+
(0, vitest_1.expect)(payloads_1.PAYLOAD_STATS.byCategory['prompt-injection']).toBe(payloads_1.PROMPT_INJECTION_PAYLOADS.length);
|
|
62
|
+
(0, vitest_1.expect)(payloads_1.PAYLOAD_STATS.byCategory['jailbreak']).toBe(payloads_1.JAILBREAK_PAYLOADS.length);
|
|
63
|
+
(0, vitest_1.expect)(payloads_1.PAYLOAD_STATS.byCategory['data-exfiltration']).toBe(payloads_1.DATA_EXFILTRATION_PAYLOADS.length);
|
|
64
|
+
(0, vitest_1.expect)(payloads_1.PAYLOAD_STATS.byCategory['capability-abuse']).toBe(payloads_1.CAPABILITY_ABUSE_PAYLOADS.length);
|
|
65
|
+
(0, vitest_1.expect)(payloads_1.PAYLOAD_STATS.byCategory['context-manipulation']).toBe(payloads_1.CONTEXT_MANIPULATION_PAYLOADS.length);
|
|
66
|
+
});
|
|
67
|
+
(0, vitest_1.it)('category counts sum to total', () => {
|
|
68
|
+
const sum = Object.values(payloads_1.PAYLOAD_STATS.byCategory).reduce((a, b) => a + b, 0);
|
|
69
|
+
(0, vitest_1.expect)(sum).toBe(payloads_1.PAYLOAD_STATS.total);
|
|
70
|
+
});
|
|
71
|
+
(0, vitest_1.it)('intensity counts sum to total', () => {
|
|
72
|
+
const sum = Object.values(payloads_1.PAYLOAD_STATS.byIntensity).reduce((a, b) => a + b, 0);
|
|
73
|
+
(0, vitest_1.expect)(sum).toBe(payloads_1.PAYLOAD_STATS.total);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
(0, vitest_1.describe)('getPayloadsByCategory', () => {
|
|
77
|
+
(0, vitest_1.it)('returns only payloads of specified category', () => {
|
|
78
|
+
const categories = [
|
|
79
|
+
'prompt-injection',
|
|
80
|
+
'jailbreak',
|
|
81
|
+
'data-exfiltration',
|
|
82
|
+
'capability-abuse',
|
|
83
|
+
'context-manipulation',
|
|
84
|
+
];
|
|
85
|
+
for (const category of categories) {
|
|
86
|
+
const payloads = (0, payloads_1.getPayloadsByCategory)(category);
|
|
87
|
+
(0, vitest_1.expect)(payloads.length).toBeGreaterThan(0);
|
|
88
|
+
for (const payload of payloads) {
|
|
89
|
+
(0, vitest_1.expect)(payload.category).toBe(category);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
(0, vitest_1.describe)('getPayloadsByIntensity', () => {
|
|
95
|
+
(0, vitest_1.it)('passive returns only passive payloads', () => {
|
|
96
|
+
const payloads = (0, payloads_1.getPayloadsByIntensity)('passive');
|
|
97
|
+
for (const payload of payloads) {
|
|
98
|
+
(0, vitest_1.expect)(payload.intensity).toBe('passive');
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
(0, vitest_1.it)('active returns passive and active payloads', () => {
|
|
102
|
+
const payloads = (0, payloads_1.getPayloadsByIntensity)('active');
|
|
103
|
+
const intensities = new Set(payloads.map(p => p.intensity));
|
|
104
|
+
(0, vitest_1.expect)(intensities.has('aggressive')).toBe(false);
|
|
105
|
+
});
|
|
106
|
+
(0, vitest_1.it)('aggressive returns all payloads', () => {
|
|
107
|
+
const payloads = (0, payloads_1.getPayloadsByIntensity)('aggressive');
|
|
108
|
+
(0, vitest_1.expect)(payloads.length).toBe(payloads_1.ALL_PAYLOADS.length);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
(0, vitest_1.describe)('getPayloads', () => {
|
|
112
|
+
(0, vitest_1.it)('returns all payloads when no filters', () => {
|
|
113
|
+
const payloads = (0, payloads_1.getPayloads)(undefined, 'aggressive');
|
|
114
|
+
(0, vitest_1.expect)(payloads.length).toBe(payloads_1.ALL_PAYLOADS.length);
|
|
115
|
+
});
|
|
116
|
+
(0, vitest_1.it)('filters by category', () => {
|
|
117
|
+
const payloads = (0, payloads_1.getPayloads)(['prompt-injection'], 'aggressive');
|
|
118
|
+
for (const payload of payloads) {
|
|
119
|
+
(0, vitest_1.expect)(payload.category).toBe('prompt-injection');
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
(0, vitest_1.it)('filters by multiple categories', () => {
|
|
123
|
+
const payloads = (0, payloads_1.getPayloads)(['prompt-injection', 'jailbreak'], 'aggressive');
|
|
124
|
+
for (const payload of payloads) {
|
|
125
|
+
(0, vitest_1.expect)(['prompt-injection', 'jailbreak']).toContain(payload.category);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
(0, vitest_1.it)('combines category and intensity filters', () => {
|
|
129
|
+
const payloads = (0, payloads_1.getPayloads)(['prompt-injection'], 'passive');
|
|
130
|
+
for (const payload of payloads) {
|
|
131
|
+
(0, vitest_1.expect)(payload.category).toBe('prompt-injection');
|
|
132
|
+
(0, vitest_1.expect)(payload.intensity).toBe('passive');
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
(0, vitest_1.describe)('getPayloadById', () => {
|
|
137
|
+
(0, vitest_1.it)('returns payload for valid ID', () => {
|
|
138
|
+
const payload = (0, payloads_1.getPayloadById)('PI-001');
|
|
139
|
+
(0, vitest_1.expect)(payload).toBeDefined();
|
|
140
|
+
(0, vitest_1.expect)(payload?.id).toBe('PI-001');
|
|
141
|
+
});
|
|
142
|
+
(0, vitest_1.it)('returns undefined for invalid ID', () => {
|
|
143
|
+
const payload = (0, payloads_1.getPayloadById)('INVALID-999');
|
|
144
|
+
(0, vitest_1.expect)(payload).toBeUndefined();
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
(0, vitest_1.describe)('ATTACK_CATEGORIES', () => {
|
|
149
|
+
(0, vitest_1.it)('has all categories defined', () => {
|
|
150
|
+
const categories = [
|
|
151
|
+
'prompt-injection',
|
|
152
|
+
'jailbreak',
|
|
153
|
+
'data-exfiltration',
|
|
154
|
+
'capability-abuse',
|
|
155
|
+
'context-manipulation',
|
|
156
|
+
];
|
|
157
|
+
for (const category of categories) {
|
|
158
|
+
(0, vitest_1.expect)(types_1.ATTACK_CATEGORIES[category]).toBeDefined();
|
|
159
|
+
(0, vitest_1.expect)(types_1.ATTACK_CATEGORIES[category].name).toBeTruthy();
|
|
160
|
+
(0, vitest_1.expect)(types_1.ATTACK_CATEGORIES[category].description).toBeTruthy();
|
|
161
|
+
(0, vitest_1.expect)(Array.isArray(types_1.ATTACK_CATEGORIES[category].oasbControls)).toBe(true);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
(0, vitest_1.describe)('AttackScanner', () => {
|
|
166
|
+
(0, vitest_1.describe)('constructor', () => {
|
|
167
|
+
(0, vitest_1.it)('creates scanner with default options', () => {
|
|
168
|
+
const scanner = new scanner_1.AttackScanner();
|
|
169
|
+
(0, vitest_1.expect)(scanner).toBeInstanceOf(scanner_1.AttackScanner);
|
|
170
|
+
});
|
|
171
|
+
(0, vitest_1.it)('creates scanner with custom options', () => {
|
|
172
|
+
const scanner = new scanner_1.AttackScanner({
|
|
173
|
+
intensity: 'aggressive',
|
|
174
|
+
timeout: 60000,
|
|
175
|
+
delay: 500,
|
|
176
|
+
});
|
|
177
|
+
(0, vitest_1.expect)(scanner).toBeInstanceOf(scanner_1.AttackScanner);
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
(0, vitest_1.describe)('scan (local mode)', () => {
|
|
181
|
+
(0, vitest_1.it)('runs scan in local simulation mode', async () => {
|
|
182
|
+
const scanner = new scanner_1.AttackScanner({ delay: 0 });
|
|
183
|
+
const report = await scanner.scan({ url: '', type: 'local' }, { categories: ['prompt-injection'], intensity: 'passive', delay: 0 });
|
|
184
|
+
(0, vitest_1.expect)(report.target).toBe('local');
|
|
185
|
+
(0, vitest_1.expect)(report.targetType).toBe('local');
|
|
186
|
+
(0, vitest_1.expect)(report.intensity).toBe('passive');
|
|
187
|
+
(0, vitest_1.expect)(report.categories).toContain('prompt-injection');
|
|
188
|
+
(0, vitest_1.expect)(report.summary.total).toBeGreaterThan(0);
|
|
189
|
+
(0, vitest_1.expect)(report.results.length).toBe(report.summary.total);
|
|
190
|
+
(0, vitest_1.expect)(report.riskScore).toBeGreaterThanOrEqual(0);
|
|
191
|
+
(0, vitest_1.expect)(report.riskScore).toBeLessThanOrEqual(100);
|
|
192
|
+
});
|
|
193
|
+
(0, vitest_1.it)('respects stopOnSuccess option', async () => {
|
|
194
|
+
// Create a scanner that will stop on first success
|
|
195
|
+
// In local mode, most will be inconclusive, but we test the flow
|
|
196
|
+
const scanner = new scanner_1.AttackScanner({ delay: 0 });
|
|
197
|
+
const report = await scanner.scan({ url: '', type: 'local' }, { intensity: 'passive', stopOnSuccess: true, delay: 0 });
|
|
198
|
+
// Should have at least one result
|
|
199
|
+
(0, vitest_1.expect)(report.results.length).toBeGreaterThanOrEqual(1);
|
|
200
|
+
});
|
|
201
|
+
(0, vitest_1.it)('returns correct summary structure', async () => {
|
|
202
|
+
const scanner = new scanner_1.AttackScanner({ delay: 0 });
|
|
203
|
+
const report = await scanner.scan({ url: '', type: 'local' }, { categories: ['jailbreak'], intensity: 'passive', delay: 0 });
|
|
204
|
+
(0, vitest_1.expect)(report.summary).toHaveProperty('total');
|
|
205
|
+
(0, vitest_1.expect)(report.summary).toHaveProperty('successful');
|
|
206
|
+
(0, vitest_1.expect)(report.summary).toHaveProperty('blocked');
|
|
207
|
+
(0, vitest_1.expect)(report.summary).toHaveProperty('inconclusive');
|
|
208
|
+
(0, vitest_1.expect)(report.summary).toHaveProperty('bySeverity');
|
|
209
|
+
(0, vitest_1.expect)(report.summary).toHaveProperty('byCategory');
|
|
210
|
+
// Check bySeverity structure
|
|
211
|
+
(0, vitest_1.expect)(report.summary.bySeverity).toHaveProperty('critical');
|
|
212
|
+
(0, vitest_1.expect)(report.summary.bySeverity).toHaveProperty('high');
|
|
213
|
+
(0, vitest_1.expect)(report.summary.bySeverity).toHaveProperty('medium');
|
|
214
|
+
(0, vitest_1.expect)(report.summary.bySeverity).toHaveProperty('low');
|
|
215
|
+
(0, vitest_1.expect)(report.summary.bySeverity).toHaveProperty('info');
|
|
216
|
+
// Check byCategory structure
|
|
217
|
+
(0, vitest_1.expect)(report.summary.byCategory).toHaveProperty('jailbreak');
|
|
218
|
+
(0, vitest_1.expect)(report.summary.byCategory['jailbreak']).toHaveProperty('total');
|
|
219
|
+
(0, vitest_1.expect)(report.summary.byCategory['jailbreak']).toHaveProperty('successful');
|
|
220
|
+
});
|
|
221
|
+
(0, vitest_1.it)('calculates risk rating correctly', async () => {
|
|
222
|
+
const scanner = new scanner_1.AttackScanner({ delay: 0 });
|
|
223
|
+
const report = await scanner.scan({ url: '', type: 'local' }, { categories: ['prompt-injection'], intensity: 'passive', delay: 0 });
|
|
224
|
+
// Risk rating should be one of the valid values
|
|
225
|
+
(0, vitest_1.expect)(['critical', 'high', 'medium', 'low', 'secure']).toContain(report.riskRating);
|
|
226
|
+
// Score and rating should be consistent
|
|
227
|
+
if (report.riskScore >= 70) {
|
|
228
|
+
(0, vitest_1.expect)(report.riskRating).toBe('critical');
|
|
229
|
+
}
|
|
230
|
+
else if (report.riskScore >= 50) {
|
|
231
|
+
(0, vitest_1.expect)(report.riskRating).toBe('high');
|
|
232
|
+
}
|
|
233
|
+
else if (report.riskScore >= 25) {
|
|
234
|
+
(0, vitest_1.expect)(report.riskRating).toBe('medium');
|
|
235
|
+
}
|
|
236
|
+
else if (report.riskScore > 0) {
|
|
237
|
+
(0, vitest_1.expect)(report.riskRating).toBe('low');
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
(0, vitest_1.expect)(report.riskRating).toBe('secure');
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
(0, vitest_1.it)('includes duration in report', async () => {
|
|
244
|
+
const scanner = new scanner_1.AttackScanner({ delay: 0 });
|
|
245
|
+
const report = await scanner.scan({ url: '', type: 'local' }, { categories: ['prompt-injection'], intensity: 'passive', delay: 0 });
|
|
246
|
+
(0, vitest_1.expect)(report.duration).toBeGreaterThanOrEqual(0);
|
|
247
|
+
(0, vitest_1.expect)(report.startTime).toBeInstanceOf(Date);
|
|
248
|
+
(0, vitest_1.expect)(report.endTime).toBeInstanceOf(Date);
|
|
249
|
+
});
|
|
250
|
+
(0, vitest_1.it)('runs specific payloads by ID', async () => {
|
|
251
|
+
const scanner = new scanner_1.AttackScanner({ delay: 0 });
|
|
252
|
+
const report = await scanner.scan({ url: '', type: 'local' }, { payloadIds: ['PI-001', 'JB-001'], delay: 0 });
|
|
253
|
+
(0, vitest_1.expect)(report.results.length).toBe(2);
|
|
254
|
+
const ids = report.results.map(r => r.payload.id);
|
|
255
|
+
(0, vitest_1.expect)(ids).toContain('PI-001');
|
|
256
|
+
(0, vitest_1.expect)(ids).toContain('JB-001');
|
|
257
|
+
});
|
|
258
|
+
});
|
|
259
|
+
(0, vitest_1.describe)('response analysis', () => {
|
|
260
|
+
(0, vitest_1.it)('detects blocked responses', async () => {
|
|
261
|
+
const scanner = new scanner_1.AttackScanner({ delay: 0 });
|
|
262
|
+
// The local simulation doesn't trigger blocked patterns,
|
|
263
|
+
// but we verify the structure is in place
|
|
264
|
+
const report = await scanner.scan({ url: '', type: 'local' }, { categories: ['prompt-injection'], intensity: 'passive', delay: 0 });
|
|
265
|
+
// Each result should have the blocked field
|
|
266
|
+
for (const result of report.results) {
|
|
267
|
+
(0, vitest_1.expect)(typeof result.blocked).toBe('boolean');
|
|
268
|
+
(0, vitest_1.expect)(typeof result.success).toBe('boolean');
|
|
269
|
+
(0, vitest_1.expect)(typeof result.confidence).toBe('number');
|
|
270
|
+
(0, vitest_1.expect)(result.confidence).toBeGreaterThanOrEqual(0);
|
|
271
|
+
(0, vitest_1.expect)(result.confidence).toBeLessThanOrEqual(1);
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
(0, vitest_1.describe)('Attack Result Structure', () => {
|
|
277
|
+
(0, vitest_1.it)('results have all required fields', async () => {
|
|
278
|
+
const scanner = new scanner_1.AttackScanner({ delay: 0 });
|
|
279
|
+
const report = await scanner.scan({ url: '', type: 'local' }, { categories: ['prompt-injection'], intensity: 'passive', delay: 0 });
|
|
280
|
+
for (const result of report.results) {
|
|
281
|
+
(0, vitest_1.expect)(result.payload).toBeDefined();
|
|
282
|
+
(0, vitest_1.expect)(result.target).toBeDefined();
|
|
283
|
+
(0, vitest_1.expect)(typeof result.success).toBe('boolean');
|
|
284
|
+
(0, vitest_1.expect)(typeof result.blocked).toBe('boolean');
|
|
285
|
+
(0, vitest_1.expect)(typeof result.confidence).toBe('number');
|
|
286
|
+
(0, vitest_1.expect)(result.evidence).toBeDefined();
|
|
287
|
+
(0, vitest_1.expect)(typeof result.duration).toBe('number');
|
|
288
|
+
(0, vitest_1.expect)(result.timestamp).toBeInstanceOf(Date);
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
});
|
|
292
|
+
//# sourceMappingURL=attack.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attack.test.js","sourceRoot":"","sources":["../../src/attack/attack.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attack Module
|
|
3
|
+
* Adversarial security testing for AI agents
|
|
4
|
+
*/
|
|
5
|
+
export { AttackScanner } from './scanner';
|
|
6
|
+
export { AttackCategory, AttackIntensity, AttackSeverity, AttackPayload, AttackResult, AttackReport, AttackTarget, AttackOptions, ATTACK_CATEGORIES, } from './types';
|
|
7
|
+
export { ALL_PAYLOADS, PAYLOAD_STATS, getPayloads, getPayloadById, getPayloadsByCategory, getPayloadsByIntensity, PROMPT_INJECTION_PAYLOADS, JAILBREAK_PAYLOADS, DATA_EXFILTRATION_PAYLOADS, CAPABILITY_ABUSE_PAYLOADS, CONTEXT_MANIPULATION_PAYLOADS, } from './payloads';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/attack/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EACL,cAAc,EACd,eAAe,EACf,cAAc,EACd,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,iBAAiB,GAClB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,0BAA0B,EAC1B,yBAAyB,EACzB,6BAA6B,GAC9B,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Attack Module
|
|
4
|
+
* Adversarial security testing for AI agents
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.CONTEXT_MANIPULATION_PAYLOADS = exports.CAPABILITY_ABUSE_PAYLOADS = exports.DATA_EXFILTRATION_PAYLOADS = exports.JAILBREAK_PAYLOADS = exports.PROMPT_INJECTION_PAYLOADS = exports.getPayloadsByIntensity = exports.getPayloadsByCategory = exports.getPayloadById = exports.getPayloads = exports.PAYLOAD_STATS = exports.ALL_PAYLOADS = exports.ATTACK_CATEGORIES = exports.AttackScanner = void 0;
|
|
8
|
+
var scanner_1 = require("./scanner");
|
|
9
|
+
Object.defineProperty(exports, "AttackScanner", { enumerable: true, get: function () { return scanner_1.AttackScanner; } });
|
|
10
|
+
var types_1 = require("./types");
|
|
11
|
+
Object.defineProperty(exports, "ATTACK_CATEGORIES", { enumerable: true, get: function () { return types_1.ATTACK_CATEGORIES; } });
|
|
12
|
+
var payloads_1 = require("./payloads");
|
|
13
|
+
Object.defineProperty(exports, "ALL_PAYLOADS", { enumerable: true, get: function () { return payloads_1.ALL_PAYLOADS; } });
|
|
14
|
+
Object.defineProperty(exports, "PAYLOAD_STATS", { enumerable: true, get: function () { return payloads_1.PAYLOAD_STATS; } });
|
|
15
|
+
Object.defineProperty(exports, "getPayloads", { enumerable: true, get: function () { return payloads_1.getPayloads; } });
|
|
16
|
+
Object.defineProperty(exports, "getPayloadById", { enumerable: true, get: function () { return payloads_1.getPayloadById; } });
|
|
17
|
+
Object.defineProperty(exports, "getPayloadsByCategory", { enumerable: true, get: function () { return payloads_1.getPayloadsByCategory; } });
|
|
18
|
+
Object.defineProperty(exports, "getPayloadsByIntensity", { enumerable: true, get: function () { return payloads_1.getPayloadsByIntensity; } });
|
|
19
|
+
Object.defineProperty(exports, "PROMPT_INJECTION_PAYLOADS", { enumerable: true, get: function () { return payloads_1.PROMPT_INJECTION_PAYLOADS; } });
|
|
20
|
+
Object.defineProperty(exports, "JAILBREAK_PAYLOADS", { enumerable: true, get: function () { return payloads_1.JAILBREAK_PAYLOADS; } });
|
|
21
|
+
Object.defineProperty(exports, "DATA_EXFILTRATION_PAYLOADS", { enumerable: true, get: function () { return payloads_1.DATA_EXFILTRATION_PAYLOADS; } });
|
|
22
|
+
Object.defineProperty(exports, "CAPABILITY_ABUSE_PAYLOADS", { enumerable: true, get: function () { return payloads_1.CAPABILITY_ABUSE_PAYLOADS; } });
|
|
23
|
+
Object.defineProperty(exports, "CONTEXT_MANIPULATION_PAYLOADS", { enumerable: true, get: function () { return payloads_1.CONTEXT_MANIPULATION_PAYLOADS; } });
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/attack/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,qCAA0C;AAAjC,wGAAA,aAAa,OAAA;AAEtB,iCAUiB;AADf,0GAAA,iBAAiB,OAAA;AAGnB,uCAYoB;AAXlB,wGAAA,YAAY,OAAA;AACZ,yGAAA,aAAa,OAAA;AACb,uGAAA,WAAW,OAAA;AACX,0GAAA,cAAc,OAAA;AACd,iHAAA,qBAAqB,OAAA;AACrB,kHAAA,sBAAsB,OAAA;AACtB,qHAAA,yBAAyB,OAAA;AACzB,8GAAA,kBAAkB,OAAA;AAClB,sHAAA,0BAA0B,OAAA;AAC1B,qHAAA,yBAAyB,OAAA;AACzB,yHAAA,6BAA6B,OAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capability Abuse Attack Payloads
|
|
3
|
+
* Tests for OASB-1 controls: 2.2, 2.3, 4.2
|
|
4
|
+
*/
|
|
5
|
+
import { AttackPayload } from '../types';
|
|
6
|
+
export declare const CAPABILITY_ABUSE_PAYLOADS: AttackPayload[];
|
|
7
|
+
export default CAPABILITY_ABUSE_PAYLOADS;
|
|
8
|
+
//# sourceMappingURL=capability-abuse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-abuse.d.ts","sourceRoot":"","sources":["../../../src/attack/payloads/capability-abuse.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,eAAO,MAAM,yBAAyB,EAAE,aAAa,EA+LpD,CAAC;AAEF,eAAe,yBAAyB,CAAC"}
|