cyberaudit-skill 3.0.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 +77 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +241 -0
- package/dist/mcp-server.d.ts +2 -0
- package/dist/mcp-server.js +126 -0
- package/package.json +58 -0
- package/skills/cyberaudit/AGENT-BOOT.md +122 -0
- package/skills/cyberaudit/COMMANDS.md +1125 -0
- package/skills/cyberaudit/INSTALL.md +311 -0
- package/skills/cyberaudit/MASTER.md +194 -0
- package/skills/cyberaudit/README.md +154 -0
- package/skills/cyberaudit/USAGE-GUIDE.md +107 -0
- package/skills/cyberaudit/mobile/MOBILE-CHECKLIST.md +245 -0
- package/skills/cyberaudit/mobile/MOBILE-PHILOSOPHY.md +352 -0
- package/skills/cyberaudit/mobile/MOBILE-REMEDIATION-LIBRARY.md +468 -0
- package/skills/cyberaudit/mobile/MOBILE-THREAT-MODELS.md +279 -0
- package/skills/cyberaudit/mobile/frameworks/EXPO.md +247 -0
- package/skills/cyberaudit/mobile/frameworks/FLUTTER.md +338 -0
- package/skills/cyberaudit/mobile/frameworks/IONIC.md +248 -0
- package/skills/cyberaudit/mobile/frameworks/REACT-NATIVE.md +479 -0
- package/skills/cyberaudit/mobile/vulnerabilities/AUTH-MOBILE.md +160 -0
- package/skills/cyberaudit/mobile/vulnerabilities/BINARY-ANALYSIS.md +193 -0
- package/skills/cyberaudit/mobile/vulnerabilities/CRYPTO-MOBILE.md +192 -0
- package/skills/cyberaudit/mobile/vulnerabilities/IPC-DEEPLINKS.md +231 -0
- package/skills/cyberaudit/mobile/vulnerabilities/NETWORK-MOBILE.md +165 -0
- package/skills/cyberaudit/mobile/vulnerabilities/PERMISSIONS.md +180 -0
- package/skills/cyberaudit/mobile/vulnerabilities/RUNTIME-MOBILE.md +214 -0
- package/skills/cyberaudit/mobile/vulnerabilities/STORAGE.md +197 -0
- package/skills/cyberaudit/reports/EXECUTIVE-SUMMARY-TEMPLATE.md +188 -0
- package/skills/cyberaudit/reports/REPORT-TEMPLATE-MOBILE.md +410 -0
- package/skills/cyberaudit/reports/REPORT-TEMPLATE-WEB.md +222 -0
- package/skills/cyberaudit/shared/COMPLIANCE.md +307 -0
- package/skills/cyberaudit/shared/CVSS-GUIDE.md +175 -0
- package/skills/cyberaudit/shared/OWASP-MAPPER.md +130 -0
- package/skills/cyberaudit/shared/SEVERITY-SCORING.md +102 -0
- package/skills/cyberaudit/shared/THREAT-MODELING.md +112 -0
- package/skills/cyberaudit/web/WEB-CHECKLIST.md +222 -0
- package/skills/cyberaudit/web/WEB-PHILOSOPHY.md +308 -0
- package/skills/cyberaudit/web/WEB-REMEDIATION-LIBRARY.md +665 -0
- package/skills/cyberaudit/web/WEB-THREAT-MODELS.md +460 -0
- package/skills/cyberaudit/web/frameworks/ANGULAR.md +169 -0
- package/skills/cyberaudit/web/frameworks/EXPRESS.md +185 -0
- package/skills/cyberaudit/web/frameworks/LARAVEL.md +371 -0
- package/skills/cyberaudit/web/frameworks/NESTJS.md +337 -0
- package/skills/cyberaudit/web/frameworks/NEXTJS.md +352 -0
- package/skills/cyberaudit/web/frameworks/REACT.md +346 -0
- package/skills/cyberaudit/web/frameworks/VUE.md +205 -0
- package/skills/cyberaudit/web/vulnerabilities/AUTH-AUTHZ.md +117 -0
- package/skills/cyberaudit/web/vulnerabilities/BUSINESS-LOGIC.md +603 -0
- package/skills/cyberaudit/web/vulnerabilities/CORS.md +117 -0
- package/skills/cyberaudit/web/vulnerabilities/CSRF.md +131 -0
- package/skills/cyberaudit/web/vulnerabilities/DESERIALIZATION.md +96 -0
- package/skills/cyberaudit/web/vulnerabilities/HEADERS.md +105 -0
- package/skills/cyberaudit/web/vulnerabilities/IDOR-BOLA.md +153 -0
- package/skills/cyberaudit/web/vulnerabilities/INJECTION.md +165 -0
- package/skills/cyberaudit/web/vulnerabilities/SECRETS.md +119 -0
- package/skills/cyberaudit/web/vulnerabilities/SSRF.md +124 -0
- package/skills/cyberaudit/web/vulnerabilities/SUPPLY-CHAIN.md +142 -0
- package/skills/cyberaudit/web/vulnerabilities/XSS.md +133 -0
- package/skills/cyberaudit/web/vulnerabilities/XXE.md +94 -0
package/README.md
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# CyberAudit Skill
|
|
2
|
+
|
|
3
|
+
**Universal security audit skill for AI agents.**
|
|
4
|
+
One install. Any AI agent. Full OWASP coverage.
|
|
5
|
+
|
|
6
|
+
```bash
|
|
7
|
+
npx -y cyberaudit-skill install
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
## What It Is
|
|
11
|
+
|
|
12
|
+
CyberAudit is a structured security audit framework delivered as an AI agent skill. It covers OWASP Top 10 (web), OWASP MASVS (mobile), API security, and cloud config — with scoring, severity ratings, and remediation guidance.
|
|
13
|
+
|
|
14
|
+
Supports every major AI coding agent:
|
|
15
|
+
|
|
16
|
+
| Agent | Detection | Method |
|
|
17
|
+
|---|---|---|
|
|
18
|
+
| OpenCode | `~/.agents/skills/` | File copy |
|
|
19
|
+
| Claude Code | `~/.claude/skills/` | File copy |
|
|
20
|
+
| Cursor | `.cursor/mcp.json` | MCP server |
|
|
21
|
+
| Kiro | `~/.kiro/skills/` | File copy |
|
|
22
|
+
| Gemini | `~/.gemini/skills/` | File copy |
|
|
23
|
+
|
|
24
|
+
## Quick Start
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# Auto-detect & install for all found agents
|
|
28
|
+
npx -y cyberaudit-skill install
|
|
29
|
+
|
|
30
|
+
# Install for a specific agent
|
|
31
|
+
npx -y cyberaudit-skill install --agent opencode
|
|
32
|
+
|
|
33
|
+
# Preview without making changes
|
|
34
|
+
npx -y cyberaudit-skill install --dry-run
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Available Audits
|
|
38
|
+
|
|
39
|
+
| Command | Scope |
|
|
40
|
+
|---|---|
|
|
41
|
+
| `cyberaudit-web` | OWASP Top 10 web app audit |
|
|
42
|
+
| `cyberaudit-mobile` | OWASP MASVS mobile audit |
|
|
43
|
+
| `cyberaudit-api` | API security audit |
|
|
44
|
+
| `cyberaudit-cloud` | Cloud config audit |
|
|
45
|
+
| `cyberaudit-full` | Full stack (web + API + cloud) |
|
|
46
|
+
| `cyberaudit-quick` | 5-minute vulnerability scan |
|
|
47
|
+
|
|
48
|
+
### Usage
|
|
49
|
+
|
|
50
|
+
Once installed, load the skill in your AI agent:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
/load-skill cyberaudit
|
|
54
|
+
/cyberaudit-web example.com
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## MCP Server
|
|
58
|
+
|
|
59
|
+
CyberAudit runs as a stdio MCP server for MCP-compatible agents (Cursor, etc.):
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
npx -y cyberaudit-skill serve
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Verify Installation
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
npx -y cyberaudit-skill list
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Repository
|
|
72
|
+
|
|
73
|
+
https://github.com/ArisRoman/cyberaudit-skill
|
|
74
|
+
|
|
75
|
+
## License
|
|
76
|
+
|
|
77
|
+
MIT
|
package/dist/cli.d.ts
ADDED
package/dist/cli.js
ADDED
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { existsSync, mkdirSync, cpSync, readdirSync, writeFileSync, readFileSync } from "fs";
|
|
4
|
+
import { createInterface } from "readline";
|
|
5
|
+
import { homedir } from "os";
|
|
6
|
+
import { join, dirname } from "path";
|
|
7
|
+
import { fileURLToPath } from "url";
|
|
8
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
9
|
+
const PKG_ROOT = join(__dirname, "..");
|
|
10
|
+
const SKILL_SRC = join(PKG_ROOT, "skills", "cyberaudit");
|
|
11
|
+
const AGENT_TARGETS = {
|
|
12
|
+
"opencode": [join(homedir(), ".agents", "skills", "cyberaudit")],
|
|
13
|
+
"claude-code": [join(homedir(), ".claude", "skills", "cyberaudit")],
|
|
14
|
+
"kiro": [join(homedir(), ".kiro", "skills", "cyberaudit")],
|
|
15
|
+
"cursor": [join(homedir(), ".cursor", "mcp.json")],
|
|
16
|
+
"gemini": [join(homedir(), ".gemini", "skills", "cyberaudit")],
|
|
17
|
+
};
|
|
18
|
+
function detectInstalledAgents() {
|
|
19
|
+
const found = [];
|
|
20
|
+
for (const [agent, paths] of Object.entries(AGENT_TARGETS)) {
|
|
21
|
+
if (agent === "cursor" || agent === "gemini")
|
|
22
|
+
continue;
|
|
23
|
+
if (paths.some((p) => existsSync(dirname(p)))) {
|
|
24
|
+
found.push(agent);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (existsSync(join(homedir(), ".cursor")))
|
|
28
|
+
found.push("cursor");
|
|
29
|
+
if (existsSync(join(homedir(), ".gemini")))
|
|
30
|
+
found.push("gemini");
|
|
31
|
+
return found;
|
|
32
|
+
}
|
|
33
|
+
function installSkill(targetDir, dryRun) {
|
|
34
|
+
if (!existsSync(SKILL_SRC)) {
|
|
35
|
+
console.error(`✗ Skill source not found at ${SKILL_SRC}.`);
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
if (existsSync(targetDir) && readdirSync(targetDir).length > 0) {
|
|
39
|
+
console.log(` ✓ Already installed at ${targetDir}`);
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
if (dryRun) {
|
|
43
|
+
console.log(` → Would install to ${targetDir} (--dry-run)`);
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
mkdirSync(targetDir, { recursive: true });
|
|
47
|
+
cpSync(SKILL_SRC, targetDir, { recursive: true });
|
|
48
|
+
console.log(` ✓ Installed at ${targetDir} (${readdirSync(targetDir).length} files)`);
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
function installForCursor(dryRun) {
|
|
52
|
+
const cursorDir = join(homedir(), ".cursor");
|
|
53
|
+
if (!existsSync(cursorDir)) {
|
|
54
|
+
console.log(" ~ Cursor not found (no ~/.cursor/)");
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
const mcpPath = join(cursorDir, "mcp.json");
|
|
58
|
+
let mcpConfig = { mcpServers: {} };
|
|
59
|
+
if (existsSync(mcpPath)) {
|
|
60
|
+
mcpConfig = JSON.parse(readFileSync(mcpPath, "utf-8"));
|
|
61
|
+
}
|
|
62
|
+
if (mcpConfig.mcpServers?.["cyberaudit-skill"]) {
|
|
63
|
+
console.log(` ✓ Cursor MCP already configured`);
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
if (dryRun) {
|
|
67
|
+
console.log(` → Would add Cursor MCP entry to ${mcpPath}`);
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
mcpConfig.mcpServers = mcpConfig.mcpServers || {};
|
|
71
|
+
mcpConfig.mcpServers["cyberaudit-skill"] = {
|
|
72
|
+
command: "npx",
|
|
73
|
+
args: ["-y", "cyberaudit-skill", "serve"],
|
|
74
|
+
};
|
|
75
|
+
writeFileSync(mcpPath, JSON.stringify(mcpConfig, null, 2));
|
|
76
|
+
console.log(` ✓ Added Cursor MCP entry to ${mcpPath}`);
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
function installForAgent(agent, dryRun) {
|
|
80
|
+
switch (agent) {
|
|
81
|
+
case "cursor":
|
|
82
|
+
return installForCursor(dryRun);
|
|
83
|
+
default: {
|
|
84
|
+
const paths = AGENT_TARGETS[agent];
|
|
85
|
+
if (!paths?.length)
|
|
86
|
+
return false;
|
|
87
|
+
return installSkill(paths[0], dryRun);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async function main() {
|
|
92
|
+
const program = new Command();
|
|
93
|
+
program
|
|
94
|
+
.name("cyberaudit-skill")
|
|
95
|
+
.description("CyberAudit Skill — universal security audit skill for AI agents")
|
|
96
|
+
.version("3.0.0");
|
|
97
|
+
program
|
|
98
|
+
.command("install")
|
|
99
|
+
.description("Install CyberAudit Skill for AI agent(s)")
|
|
100
|
+
.option("-a, --agent <agent>", "Target: opencode, claude-code, kiro, cursor, gemini, or all", "all")
|
|
101
|
+
.option("--dry-run", "Show changes without applying", false)
|
|
102
|
+
.action((options) => {
|
|
103
|
+
const dryRun = !!options.dryRun;
|
|
104
|
+
const agentOpt = (options.agent || "all").toLowerCase();
|
|
105
|
+
let agents;
|
|
106
|
+
if (agentOpt === "all") {
|
|
107
|
+
agents = detectInstalledAgents();
|
|
108
|
+
if (agents.length === 0) {
|
|
109
|
+
console.log("No supported AI agents detected.\nTry: --agent opencode");
|
|
110
|
+
process.exit(1);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
const valid = ["opencode", "claude-code", "kiro", "cursor", "gemini"];
|
|
115
|
+
if (!valid.includes(agentOpt)) {
|
|
116
|
+
console.error(`Unknown agent: "${agentOpt}". Valid: ${valid.join(", ")}`);
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
agents = [agentOpt];
|
|
120
|
+
}
|
|
121
|
+
const label = dryRun ? " (dry run)" : "";
|
|
122
|
+
console.log(`\n═══ CyberAudit Installation${label} ═══\n`);
|
|
123
|
+
let ok = 0, fail = 0;
|
|
124
|
+
for (const agent of agents) {
|
|
125
|
+
const name = agent.charAt(0).toUpperCase() + agent.slice(1);
|
|
126
|
+
if (installForAgent(agent, dryRun))
|
|
127
|
+
ok++;
|
|
128
|
+
else
|
|
129
|
+
fail++;
|
|
130
|
+
}
|
|
131
|
+
console.log(`\nDone. ${ok} configured, ${fail} skipped.\n`);
|
|
132
|
+
if (!dryRun)
|
|
133
|
+
console.log("Verify: cyberaudit-skill list\n");
|
|
134
|
+
});
|
|
135
|
+
program
|
|
136
|
+
.command("list")
|
|
137
|
+
.description("List audits and installed agents")
|
|
138
|
+
.action(() => {
|
|
139
|
+
console.log("\n═══ CyberAudit — Available Audits ═══\n");
|
|
140
|
+
console.log(" cyberaudit-web OWASP web app security audit");
|
|
141
|
+
console.log(" cyberaudit-mobile OWASP mobile app security audit");
|
|
142
|
+
console.log(" cyberaudit-api API security audit");
|
|
143
|
+
console.log(" cyberaudit-cloud Cloud config audit");
|
|
144
|
+
console.log(" cyberaudit-full Full stack (web + API + cloud)");
|
|
145
|
+
console.log(" cyberaudit-quick Quick vulnerability scan\n");
|
|
146
|
+
console.log("═══ Installed Agents ═══\n");
|
|
147
|
+
for (const [agent] of Object.entries(AGENT_TARGETS)) {
|
|
148
|
+
if (agent === "cursor") {
|
|
149
|
+
const mcpPath = join(homedir(), ".cursor", "mcp.json");
|
|
150
|
+
const ok = existsSync(mcpPath) && readFileSync(mcpPath, "utf-8").includes("cyberaudit-skill");
|
|
151
|
+
console.log(` ${ok ? "✓" : "✗"} ${agent}`);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
const paths = AGENT_TARGETS[agent];
|
|
155
|
+
const ok = paths.some((p) => existsSync(p));
|
|
156
|
+
console.log(` ${ok ? "✓" : "✗"} ${agent}`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
console.log();
|
|
160
|
+
});
|
|
161
|
+
program
|
|
162
|
+
.command("serve")
|
|
163
|
+
.description("Start CyberAudit MCP server (stdio)")
|
|
164
|
+
.action(() => {
|
|
165
|
+
console.error("[CyberAudit] MCP server starting...");
|
|
166
|
+
startMcpServer();
|
|
167
|
+
});
|
|
168
|
+
program.parse(process.argv);
|
|
169
|
+
}
|
|
170
|
+
function startMcpServer() {
|
|
171
|
+
const rl = createInterface({ input: process.stdin });
|
|
172
|
+
const capabilities = {
|
|
173
|
+
tools: [
|
|
174
|
+
{
|
|
175
|
+
name: "cyberaudit-web",
|
|
176
|
+
description: "Web app security audit (OWASP Top 10)",
|
|
177
|
+
inputSchema: {
|
|
178
|
+
type: "object",
|
|
179
|
+
properties: {
|
|
180
|
+
target: { type: "string", description: "URL or project path" },
|
|
181
|
+
depth: { type: "string", enum: ["quick", "standard", "deep"], default: "standard" },
|
|
182
|
+
},
|
|
183
|
+
},
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
name: "cyberaudit-mobile",
|
|
187
|
+
description: "Mobile app security audit (OWASP MASVS)",
|
|
188
|
+
inputSchema: {
|
|
189
|
+
type: "object",
|
|
190
|
+
properties: {
|
|
191
|
+
target: { type: "string", description: "App package or project path" },
|
|
192
|
+
platform: { type: "string", enum: ["android", "ios", "both"], default: "both" },
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
name: "cyberaudit-api",
|
|
198
|
+
description: "API security audit",
|
|
199
|
+
inputSchema: {
|
|
200
|
+
type: "object",
|
|
201
|
+
properties: {
|
|
202
|
+
target: { type: "string", description: "API endpoint or spec file" },
|
|
203
|
+
},
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
name: "cyberaudit-list",
|
|
208
|
+
description: "List all available audit types",
|
|
209
|
+
inputSchema: { type: "object", properties: {} },
|
|
210
|
+
},
|
|
211
|
+
],
|
|
212
|
+
};
|
|
213
|
+
function write(id, result) {
|
|
214
|
+
process.stdout.write(JSON.stringify({ jsonrpc: "2.0", id, ...result }) + "\n");
|
|
215
|
+
}
|
|
216
|
+
rl.on("line", (line) => {
|
|
217
|
+
try {
|
|
218
|
+
const msg = JSON.parse(line.trim());
|
|
219
|
+
const id = msg.id;
|
|
220
|
+
if (msg.method === "initialize") {
|
|
221
|
+
write(id, { protocolVersion: "2024-11-05", capabilities, serverInfo: { name: "cyberaudit-skill", version: "3.0.0" } });
|
|
222
|
+
}
|
|
223
|
+
else if (msg.method === "tools/list") {
|
|
224
|
+
write(id, capabilities);
|
|
225
|
+
}
|
|
226
|
+
else if (msg.method === "tools/call") {
|
|
227
|
+
write(id, {
|
|
228
|
+
content: [{ type: "text", text: `[CyberAudit] "${msg.params.name}" called with ${JSON.stringify(msg.params.arguments)}\n\nRun the audit by loading the CyberAudit Skill.` }],
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
write(id, { error: { code: -32601, message: `Unknown method: ${msg.method}` } });
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
catch { /* skip malformed */ }
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
main().catch((err) => {
|
|
239
|
+
console.error("[CyberAudit] Fatal error:", err);
|
|
240
|
+
process.exit(1);
|
|
241
|
+
});
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createInterface } from "readline";
|
|
3
|
+
import { join, dirname } from "path";
|
|
4
|
+
import { fileURLToPath } from "url";
|
|
5
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
6
|
+
const SKILL_DIR = join(__dirname, "..", "skills", "cyberaudit");
|
|
7
|
+
const capabilities = {
|
|
8
|
+
tools: [
|
|
9
|
+
{
|
|
10
|
+
name: "cyberaudit-web",
|
|
11
|
+
description: "Run a web application security audit (OWASP Top 10)",
|
|
12
|
+
inputSchema: {
|
|
13
|
+
type: "object",
|
|
14
|
+
properties: {
|
|
15
|
+
target: { type: "string", description: "URL, domain, or project path to audit" },
|
|
16
|
+
depth: { type: "string", enum: ["quick", "standard", "deep"], default: "standard" },
|
|
17
|
+
},
|
|
18
|
+
required: ["target"],
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: "cyberaudit-mobile",
|
|
23
|
+
description: "Run a mobile application security audit (OWASP MASVS)",
|
|
24
|
+
inputSchema: {
|
|
25
|
+
type: "object",
|
|
26
|
+
properties: {
|
|
27
|
+
target: { type: "string", description: "App identifier, APK/IPA path, or project path" },
|
|
28
|
+
platform: { type: "string", enum: ["android", "ios", "both"], default: "both" },
|
|
29
|
+
},
|
|
30
|
+
required: ["target"],
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: "cyberaudit-api",
|
|
35
|
+
description: "Run an API security audit",
|
|
36
|
+
inputSchema: {
|
|
37
|
+
type: "object",
|
|
38
|
+
properties: {
|
|
39
|
+
target: { type: "string", description: "API base URL, OpenAPI spec path, or project directory" },
|
|
40
|
+
},
|
|
41
|
+
required: ["target"],
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: "cyberaudit-cloud",
|
|
46
|
+
description: "Run a cloud configuration security audit",
|
|
47
|
+
inputSchema: {
|
|
48
|
+
type: "object",
|
|
49
|
+
properties: {
|
|
50
|
+
target: { type: "string", description: "Cloud provider or config file path" },
|
|
51
|
+
},
|
|
52
|
+
required: ["target"],
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: "cyberaudit-quick",
|
|
57
|
+
description: "Run a quick vulnerability scan (5-minute assessment)",
|
|
58
|
+
inputSchema: {
|
|
59
|
+
type: "object",
|
|
60
|
+
properties: {
|
|
61
|
+
target: { type: "string", description: "URL, domain, or project path" },
|
|
62
|
+
},
|
|
63
|
+
required: ["target"],
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
};
|
|
68
|
+
function write(id, result) {
|
|
69
|
+
process.stdout.write(JSON.stringify({ jsonrpc: "2.0", id, ...result }) + "\n");
|
|
70
|
+
}
|
|
71
|
+
function handleToolCall(id, name, args) {
|
|
72
|
+
const auditType = name.replace("cyberaudit-", "");
|
|
73
|
+
write(id, {
|
|
74
|
+
content: [
|
|
75
|
+
{
|
|
76
|
+
type: "text",
|
|
77
|
+
text: `▶ CyberAudit: ${auditType.toUpperCase()} audit requested
|
|
78
|
+
|
|
79
|
+
Target: ${args.target}
|
|
80
|
+
${args.depth ? `Depth: ${args.depth}` : ""}
|
|
81
|
+
${args.platform ? `Platform: ${args.platform}` : ""}
|
|
82
|
+
|
|
83
|
+
To execute the full audit, load the CyberAudit Skill and run:
|
|
84
|
+
|
|
85
|
+
/${name} "${args.target}"
|
|
86
|
+
|
|
87
|
+
The skill will guide you through all checks, scoring, and report generation.
|
|
88
|
+
|
|
89
|
+
Skill location: ${SKILL_DIR}`,
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
const rl = createInterface({ input: process.stdin });
|
|
95
|
+
rl.on("line", (line) => {
|
|
96
|
+
try {
|
|
97
|
+
const msg = JSON.parse(line.trim());
|
|
98
|
+
const id = msg.id;
|
|
99
|
+
switch (msg.method) {
|
|
100
|
+
case "initialize":
|
|
101
|
+
write(id, {
|
|
102
|
+
protocolVersion: "2024-11-05",
|
|
103
|
+
capabilities,
|
|
104
|
+
serverInfo: { name: "cyberaudit-skill", version: "3.0.0" },
|
|
105
|
+
});
|
|
106
|
+
break;
|
|
107
|
+
case "tools/list":
|
|
108
|
+
write(id, capabilities);
|
|
109
|
+
break;
|
|
110
|
+
case "tools/call":
|
|
111
|
+
handleToolCall(id, msg.params.name, msg.params.arguments || {});
|
|
112
|
+
break;
|
|
113
|
+
case "notifications/initialized":
|
|
114
|
+
// no response expected
|
|
115
|
+
break;
|
|
116
|
+
default:
|
|
117
|
+
write(id, { error: { code: -32601, message: `Method not found: ${msg.method}` } });
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch (e) {
|
|
121
|
+
// ignore malformed input
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
process.on("SIGINT", () => process.exit(0));
|
|
125
|
+
process.on("SIGTERM", () => process.exit(0));
|
|
126
|
+
console.error(`[CyberAudit] MCP server ready | Skill: ${SKILL_DIR}`);
|
package/package.json
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "cyberaudit-skill",
|
|
3
|
+
"version": "3.0.0",
|
|
4
|
+
"description": "Universal security audit skill for AI agents. Install once, audit any web or mobile app. OpenCode, Claude Code, Cursor, Kiro, Gemini — all supported.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"mcp",
|
|
7
|
+
"security",
|
|
8
|
+
"audit",
|
|
9
|
+
"cybersecurity",
|
|
10
|
+
"owasp",
|
|
11
|
+
"pentest",
|
|
12
|
+
"skill",
|
|
13
|
+
"ai-agent",
|
|
14
|
+
"opencode",
|
|
15
|
+
"claude-code",
|
|
16
|
+
"cursor"
|
|
17
|
+
],
|
|
18
|
+
"author": "ArisRoman",
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"homepage": "https://github.com/ArisRoman/cyberaudit-skill",
|
|
21
|
+
"repository": {
|
|
22
|
+
"type": "git",
|
|
23
|
+
"url": "git+https://github.com/ArisRoman/cyberaudit-skill.git"
|
|
24
|
+
},
|
|
25
|
+
"bugs": {
|
|
26
|
+
"url": "https://github.com/ArisRoman/cyberaudit-skill/issues"
|
|
27
|
+
},
|
|
28
|
+
"type": "module",
|
|
29
|
+
"main": "dist/cli.js",
|
|
30
|
+
"bin": {
|
|
31
|
+
"cyberaudit-skill": "dist/cli.js"
|
|
32
|
+
},
|
|
33
|
+
"files": [
|
|
34
|
+
"dist/",
|
|
35
|
+
"skills/"
|
|
36
|
+
],
|
|
37
|
+
"scripts": {
|
|
38
|
+
"build": "tsc",
|
|
39
|
+
"start": "node dist/cli.js",
|
|
40
|
+
"dev": "tsx src/cli.ts",
|
|
41
|
+
"install:local": "node dist/cli.js install",
|
|
42
|
+
"install:all": "node dist/cli.js install --agent all",
|
|
43
|
+
"serve": "tsx src/mcp-server.ts",
|
|
44
|
+
"prepublishOnly": "npm run build",
|
|
45
|
+
"postinstall": "node -e \"try{require('fs').accessSync('dist/cli.js');require('child_process').execSync('node dist/cli.js install --agent all 2>/dev/null',{stdio:'inherit'})}catch(e){}\""
|
|
46
|
+
},
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"commander": "^12.0.0"
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@types/node": "^20.0.0",
|
|
52
|
+
"tsx": "^4.0.0",
|
|
53
|
+
"typescript": "^5.0.0"
|
|
54
|
+
},
|
|
55
|
+
"engines": {
|
|
56
|
+
"node": ">=18.0.0"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# CYBERAUDIT SKILL — AGENT BOOT SEQUENCE
|
|
2
|
+
Version: 3.0.0 LUNAIRE
|
|
3
|
+
Classification: UNIVERSAL SECURITY INTELLIGENCE
|
|
4
|
+
|
|
5
|
+
═══════════════════════════════════════════════════════════════
|
|
6
|
+
WHO YOU ARE
|
|
7
|
+
═══════════════════════════════════════════════════════════════
|
|
8
|
+
|
|
9
|
+
You are CyberAudit, a world-class security intelligence.
|
|
10
|
+
You combine the expertise of:
|
|
11
|
+
|
|
12
|
+
→ An OSCP/OSCE certified professional with 15 years of real pentesting
|
|
13
|
+
→ A senior security architect who worked on critical
|
|
14
|
+
systems (banking, defense, healthcare)
|
|
15
|
+
→ A vulnerability researcher who has published CVEs
|
|
16
|
+
→ A senior developer mastering every audited framework
|
|
17
|
+
→ A CISO who translates technical issues into business risk
|
|
18
|
+
|
|
19
|
+
You are NOT an automated scanner.
|
|
20
|
+
You are an expert who THINKS, CONTEXTUALIZES, and PRIORITIZES.
|
|
21
|
+
|
|
22
|
+
═══════════════════════════════════════════════════════════════
|
|
23
|
+
YOUR OATH
|
|
24
|
+
═══════════════════════════════════════════════════════════════
|
|
25
|
+
|
|
26
|
+
"I do not search for vulnerabilities to destroy.
|
|
27
|
+
I search for vulnerabilities to protect.
|
|
28
|
+
Every flaw I find is a flaw the attacker
|
|
29
|
+
will not find first."
|
|
30
|
+
|
|
31
|
+
═══════════════════════════════════════════════════════════════
|
|
32
|
+
STARTUP SEQUENCE
|
|
33
|
+
═══════════════════════════════════════════════════════════════
|
|
34
|
+
|
|
35
|
+
WHEN you receive an audit request, you ALWAYS execute:
|
|
36
|
+
|
|
37
|
+
STEP 1 — IDENTIFICATION (mandatory, 30 mental seconds)
|
|
38
|
+
┌─────────────────────────────────────────────┐
|
|
39
|
+
│ TYPE ? → Web / Mobile / Both │
|
|
40
|
+
│ FRAMEWORK ? → Identify precisely │
|
|
41
|
+
│ CONTEXT ? → Dev / Staging / Production │
|
|
42
|
+
│ SCOPE ? → Entire code / A module │
|
|
43
|
+
│ URGENCY ? → Full audit / Quick scan │
|
|
44
|
+
└─────────────────────────────────────────────┘
|
|
45
|
+
|
|
46
|
+
STEP 2 — MODE LOADING
|
|
47
|
+
If Web → Load WEB-PHILOSOPHY.md + relevant framework
|
|
48
|
+
If Mobile → Load MOBILE-PHILOSOPHY.md + relevant framework
|
|
49
|
+
If Both → Load both philosophies
|
|
50
|
+
|
|
51
|
+
STEP 3 — STRUCTURED AUDIT
|
|
52
|
+
Follow the flow defined in the loaded philosophy
|
|
53
|
+
NEVER skip a phase
|
|
54
|
+
Document each finding immediately
|
|
55
|
+
|
|
56
|
+
STEP 4 — REPORT
|
|
57
|
+
Use the corresponding template
|
|
58
|
+
CVSS scoring for each finding
|
|
59
|
+
COMPLETE and mentally TESTED remediation code
|
|
60
|
+
|
|
61
|
+
═══════════════════════════════════════════════════════════════
|
|
62
|
+
YOUR ABSOLUTE RULES
|
|
63
|
+
═══════════════════════════════════════════════════════════════
|
|
64
|
+
|
|
65
|
+
RULE 1 — ZERO FALSE POSITIVE TOLERATED
|
|
66
|
+
A finding without code evidence = not a finding
|
|
67
|
+
Always cite the file, line, exact pattern
|
|
68
|
+
|
|
69
|
+
RULE 2 — COMPLETE REMEDIATION OR NOTHING
|
|
70
|
+
A finding without a solution = useless frustration
|
|
71
|
+
Always provide the fixed code, not just a description
|
|
72
|
+
|
|
73
|
+
RULE 3 — CONTEXT BEFORE SEVERITY
|
|
74
|
+
A SQLi in an internal search field ≠ a SQLi on the login
|
|
75
|
+
Assess real business impact, not just the theoretical score
|
|
76
|
+
|
|
77
|
+
RULE 4 — THINK LIKE THE ATTACKER
|
|
78
|
+
For every piece of code you see, ask yourself:
|
|
79
|
+
"How would a motivated attacker exploit this?"
|
|
80
|
+
|
|
81
|
+
RULE 5 — PRIORITIZE LIKE A CISO
|
|
82
|
+
The dev team has limited resources
|
|
83
|
+
Tell them what to fix FIRST with surgical precision
|
|
84
|
+
|
|
85
|
+
RULE 6 — NEVER WITHHOLD PARTIAL AUDIT STATUS
|
|
86
|
+
If you do not have all the code, say so explicitly
|
|
87
|
+
A partial audit presented as complete is dangerous
|
|
88
|
+
|
|
89
|
+
═══════════════════════════════════════════════════════════════
|
|
90
|
+
AUDIT LEVELS
|
|
91
|
+
═══════════════════════════════════════════════════════════════
|
|
92
|
+
|
|
93
|
+
LEVEL 1 — QUICK SCAN (15-30 min)
|
|
94
|
+
→ Exposed secrets
|
|
95
|
+
→ Obvious critical vulnerabilities
|
|
96
|
+
→ Dependencies with critical CVEs
|
|
97
|
+
→ Immediate auth bypass
|
|
98
|
+
Output: Critical and high findings only
|
|
99
|
+
|
|
100
|
+
LEVEL 2 — STANDARD AUDIT (1-2h)
|
|
101
|
+
→ Everything from level 1
|
|
102
|
+
→ Full auth/authz flow analysis
|
|
103
|
+
→ Review of all user inputs
|
|
104
|
+
→ Configuration analysis
|
|
105
|
+
→ Complete dependencies review
|
|
106
|
+
Output: Full report, all severity levels
|
|
107
|
+
|
|
108
|
+
LEVEL 3 — DEEP AUDIT (3-5h)
|
|
109
|
+
→ Everything from level 2
|
|
110
|
+
→ Full threat modeling
|
|
111
|
+
→ Business logic analysis
|
|
112
|
+
→ Attack surface mapping
|
|
113
|
+
→ Architecture review
|
|
114
|
+
→ Complete compliance check
|
|
115
|
+
Output: Professional audit report + remediation plan
|
|
116
|
+
|
|
117
|
+
LEVEL 4 — RED TEAM MODE (on explicit request)
|
|
118
|
+
→ Everything from level 3
|
|
119
|
+
→ Exploitation chains (kill chains)
|
|
120
|
+
→ Realistic attack scenarios
|
|
121
|
+
→ Estimated financial and reputational impact
|
|
122
|
+
Output: Complete Red Team report
|