exaai-agent 2.0.8__py3-none-any.whl → 2.1.2__py3-none-any.whl
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.
- {exaai_agent-2.0.8.dist-info → exaai_agent-2.1.2.dist-info}/METADATA +48 -44
- {exaai_agent-2.0.8.dist-info → exaai_agent-2.1.2.dist-info}/RECORD +28 -20
- {exaai_agent-2.0.8.dist-info → exaai_agent-2.1.2.dist-info}/WHEEL +1 -1
- exaaiagnt/interface/cli.py +52 -31
- exaaiagnt/interface/main.py +11 -1
- exaaiagnt/interface/tui.py +12 -8
- exaaiagnt/llm/llm.py +1 -0
- exaaiagnt/llm/llm_traffic_controller.py +9 -7
- exaaiagnt/llm/request_queue.py +4 -4
- exaaiagnt/prompts/README.md +3 -1
- exaaiagnt/prompts/auto_loader.py +31 -0
- exaaiagnt/prompts/cloud/azure_cloud_security.jinja +126 -0
- exaaiagnt/prompts/cloud/gcp_cloud_security.jinja +158 -0
- exaaiagnt/prompts/cloud/kubernetes_security.jinja +97 -0
- exaaiagnt/prompts/vulnerabilities/prompt_injection.jinja +276 -0
- exaaiagnt/runtime/tool_manager.py +12 -3
- exaaiagnt/tools/__init__.py +24 -0
- exaaiagnt/tools/executor.py +1 -1
- exaaiagnt/tools/k8s_scanner/__init__.py +29 -0
- exaaiagnt/tools/k8s_scanner/k8s_actions.py +313 -0
- exaaiagnt/tools/prompt_injection/__init__.py +26 -0
- exaaiagnt/tools/prompt_injection/prompt_injection_actions.py +638 -0
- exaaiagnt/tools/python/python_instance.py +11 -1
- exaaiagnt/tools/response_analyzer.py +5 -3
- exaaiagnt/tools/smart_fuzzer.py +5 -3
- exaaiagnt/tools/vuln_validator.py +5 -3
- {exaai_agent-2.0.8.dist-info → exaai_agent-2.1.2.dist-info}/entry_points.txt +0 -0
- {exaai_agent-2.0.8.dist-info → exaai_agent-2.1.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: exaai-agent
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.1.2
|
|
4
4
|
Summary: ExaAi - Advanced AI Security Agent for Comprehensive Penetration Testing
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
License-File: LICENSE
|
|
@@ -53,57 +53,60 @@ Description-Content-Type: text/markdown
|
|
|
53
53
|
[](https://pypi.org/project/exaai-agent/)
|
|
54
54
|
[](https://pypi.org/project/exaai-agent/)
|
|
55
55
|
[](LICENSE)
|
|
56
|
-
[]()
|
|
57
57
|
|
|
58
58
|
</div>
|
|
59
59
|
|
|
60
60
|
<br>
|
|
61
61
|
|
|
62
62
|
> [!TIP]
|
|
63
|
-
> **🚀 v2.1.
|
|
63
|
+
> **🚀 v2.1.2 Released!** Now supports **AI Agent Integration (OpenClaw)**, Kubernetes Security, Azure/GCP modules, and Prompt Injection detection.
|
|
64
|
+
>
|
|
65
|
+
> 🤖 **Connect Your Agent:** You can now control ExaAiAgent via any AI agent (OpenClaw, etc).
|
|
66
|
+
> Just send this command to your agent:
|
|
67
|
+
> ```
|
|
68
|
+
> Read https://raw.githubusercontent.com/hleliofficiel/ExaAiAgent/main/SKILL.md and follow the instructions to join ExaAiAgent
|
|
69
|
+
> ```
|
|
64
70
|
|
|
65
71
|
---
|
|
66
72
|
|
|
67
|
-
## 🔥 What's New in v2.1.
|
|
73
|
+
## 🔥 What's New in v2.1.2
|
|
68
74
|
|
|
69
|
-
###
|
|
75
|
+
### 🤖 AI Agent Integration (OpenClaw)
|
|
70
76
|
|
|
71
|
-
|
|
77
|
+
Seamlessly integrate ExaAiAgent with your AI workforce:
|
|
72
78
|
|
|
73
|
-
- **
|
|
74
|
-
- Auto-
|
|
75
|
-
-
|
|
76
|
-
- WAF bypass techniques included
|
|
79
|
+
- **Agent Control**: Control scans via OpenClaw or any agent framework
|
|
80
|
+
- **Auto-Discovery**: Agents can read `SKILL.md` to self-onboard
|
|
81
|
+
- **Output Optimization**: Tools now output cleaner data (no ANSI codes) for LLM consumption
|
|
77
82
|
|
|
78
|
-
###
|
|
83
|
+
### ⚓ Kubernetes & Cloud Security (Updated)
|
|
79
84
|
|
|
80
|
-
|
|
85
|
+
Expanded coverage for cloud-native infrastructure:
|
|
81
86
|
|
|
82
|
-
- **
|
|
83
|
-
- **Azure**: Blob
|
|
84
|
-
- **GCP**: Cloud Storage, Service Account
|
|
85
|
-
- **
|
|
87
|
+
- **Kubernetes**: Deep RBAC auditing, Pod Security Standards (PSS), Network Policy checks
|
|
88
|
+
- **Azure**: Blob Storage, Entra ID (Azure AD), Key Vault auditing
|
|
89
|
+
- **GCP**: Cloud Storage, IAM, Service Account key leaks
|
|
90
|
+
- **Prompt Injection**: Dedicated scanner for AI/LLM applications
|
|
86
91
|
|
|
87
|
-
###
|
|
92
|
+
### 🛡️ Smart Security Tools
|
|
88
93
|
|
|
89
94
|
| Tool | Capability |
|
|
90
95
|
|------|------------|
|
|
91
|
-
| **Smart Fuzzer** |
|
|
96
|
+
| **Smart Fuzzer** | Thread-safe, context-aware fuzzing with rate limiting |
|
|
92
97
|
| **Response Analyzer** | SQL errors, stack traces, sensitive data detection |
|
|
93
|
-
| **Vuln Validator** | PoC generation
|
|
94
|
-
| **WAF Bypass** | Multi-layer bypass
|
|
98
|
+
| **Vuln Validator** | PoC generation with false positive reduction |
|
|
99
|
+
| **WAF Bypass** | Multi-layer bypass for Cloudflare, Akamai, AWS WAF |
|
|
95
100
|
|
|
96
|
-
### ⚡ CLI
|
|
101
|
+
### ⚡ CLI & Stability
|
|
97
102
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
# Version check
|
|
103
|
-
exaai --version
|
|
103
|
+
- **Thread-Safety**: Fixed race conditions in async scans
|
|
104
|
+
- **Resource Management**: Auto-shutdown and cleanup of background processes
|
|
105
|
+
- **Installation**: Robust `install.sh` for Linux/macOS (bash/zsh/fish)
|
|
104
106
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
+
```bash
|
|
108
|
+
# New install script
|
|
109
|
+
curl -sSL https://raw.githubusercontent.com/hleliofficiel/ExaAiAgent/main/install.sh | bash
|
|
107
110
|
```
|
|
108
111
|
|
|
109
112
|
---
|
|
@@ -146,6 +149,11 @@ ExaAiAgent is an elite AI-powered cybersecurity agent that acts like a real pene
|
|
|
146
149
|
|
|
147
150
|
```bash
|
|
148
151
|
# Install ExaAiAgent
|
|
152
|
+
|
|
153
|
+
# Method 1: Automated Script (Recommended)
|
|
154
|
+
curl -sSL https://raw.githubusercontent.com/hleliofficiel/ExaAiAgent/main/install.sh | bash
|
|
155
|
+
|
|
156
|
+
# Method 2: pipx
|
|
149
157
|
pipx install exaai-agent
|
|
150
158
|
|
|
151
159
|
# Configure your AI provider (choose one)
|
|
@@ -287,7 +295,7 @@ jobs:
|
|
|
287
295
|
- uses: actions/checkout@v4
|
|
288
296
|
|
|
289
297
|
- name: Install ExaAiAgent
|
|
290
|
-
run:
|
|
298
|
+
run: curl -sSL https://raw.githubusercontent.com/hleliofficiel/ExaAiAgent/main/install.sh | bash
|
|
291
299
|
|
|
292
300
|
- name: Run ExaAiAgent
|
|
293
301
|
env:
|
|
@@ -339,26 +347,22 @@ export PERPLEXITY_API_KEY="key" # For search capabilities
|
|
|
339
347
|
| `oauth_oidc` | OAuth2/OIDC flaws |
|
|
340
348
|
| `waf_bypass` | WAF bypass techniques |
|
|
341
349
|
| `subdomain_takeover` | Subdomain takeover |
|
|
350
|
+
| `prompt_injection` | AI/LLM prompt injection attacks |
|
|
351
|
+
| `kubernetes_security` | **NEW!** K8s RBAC & Pod Security auditing |
|
|
342
352
|
|
|
343
353
|
---
|
|
344
354
|
|
|
345
355
|
## 🆕 Changelog
|
|
346
356
|
|
|
347
|
-
### v2.
|
|
348
|
-
|
|
349
|
-
-
|
|
350
|
-
-
|
|
351
|
-
- 🛡️ **5 New Security Modules** - GraphQL, WebSocket, OAuth, WAF, Subdomain
|
|
352
|
-
- 🎨 **New UI/Branding** - Fresh ExaAi logo with Cyan/Purple theme
|
|
353
|
-
- 📊 **Improved Performance** - Reduced unnecessary LLM calls
|
|
354
|
-
|
|
355
|
-
### v1.0.0
|
|
357
|
+
### v2.1.2 (Latest)
|
|
358
|
+
- **AI Agent Integration**: OpenClaw/Agent compatibility
|
|
359
|
+
- **Stability Fixes**: ToolManager thread-safety, Resource cleanup
|
|
360
|
+
- **DevEx**: New `install.sh` script, improved logging
|
|
356
361
|
|
|
357
|
-
|
|
358
|
-
-
|
|
359
|
-
-
|
|
360
|
-
-
|
|
361
|
-
- Improved Reporting
|
|
362
|
+
### v2.1.0
|
|
363
|
+
- **New Modules**: K8s, Azure, GCP, Prompt Injection
|
|
364
|
+
- **React2Shell**: CVE-2025-55182 detection
|
|
365
|
+
- **Auto-Discovery**: Improved target detection
|
|
362
366
|
|
|
363
367
|
---
|
|
364
368
|
|
|
@@ -10,8 +10,8 @@ exaaiagnt/agents/shared_memory.py,sha256=4Ps_kcUHIRVhpumlaF5ZGXmpoeAFi9JrJgEBK33
|
|
|
10
10
|
exaaiagnt/agents/state.py,sha256=Tzjdegq3L4IS26XPlK9GQDcwqf6X-KKvih9_4LcXPYw,5881
|
|
11
11
|
exaaiagnt/interface/__init__.py,sha256=ww23sFOQhICEIrIo0MtwWv2qHW5qUprvPj8QVjv3SM0,44
|
|
12
12
|
exaaiagnt/interface/assets/tui_styles.tcss,sha256=iwhx72f5bIiSg72168ifyR_Q0TKfL3Bf0lU6cyJw1Bg,12114
|
|
13
|
-
exaaiagnt/interface/cli.py,sha256=
|
|
14
|
-
exaaiagnt/interface/main.py,sha256=
|
|
13
|
+
exaaiagnt/interface/cli.py,sha256=nRKMGJXV884CfT6znU7qWPumMhefUVEnHgDZzD-LoPs,9480
|
|
14
|
+
exaaiagnt/interface/main.py,sha256=PO62c4P26qT9v2nLWkfQSC_SWjaCncaxdZUT42U9Lu0,19483
|
|
15
15
|
exaaiagnt/interface/tool_components/__init__.py,sha256=Dz5ci3VMzvhlPOwQ2x9Nd11cmFzx1OP7sdlpZPMTT4k,935
|
|
16
16
|
exaaiagnt/interface/tool_components/agents_graph_renderer.py,sha256=eVFRqmJ-TxyxZ-hssLTweDAio4UvsZZgxo2dKky0N1U,4399
|
|
17
17
|
exaaiagnt/interface/tool_components/base_renderer.py,sha256=P0zYeRnbkr2NYoE8KDQmj1TzrAGX6r7qLMb4Sw7AoTI,1905
|
|
@@ -28,22 +28,25 @@ exaaiagnt/interface/tool_components/terminal_renderer.py,sha256=-ORL2vBH5XImUZrI
|
|
|
28
28
|
exaaiagnt/interface/tool_components/thinking_renderer.py,sha256=-MQLkKCgOJksrustULFf2jhAjJrP5bbfS2BQ6zgNKCc,927
|
|
29
29
|
exaaiagnt/interface/tool_components/user_message_renderer.py,sha256=6gHJ1hG-pwcTsxLM7JuYZuaDu8cZ2MeOuUDF3LGy-4I,1432
|
|
30
30
|
exaaiagnt/interface/tool_components/web_search_renderer.py,sha256=JnJa22ACIcRksfxxdenesUo8Th9cHSxo-fej9YcuYHs,911
|
|
31
|
-
exaaiagnt/interface/tui.py,sha256=
|
|
31
|
+
exaaiagnt/interface/tui.py,sha256=bMuIJvrauCStAJkjvRWzDueLDraKnrHWtC5ZjyuDxOc,49970
|
|
32
32
|
exaaiagnt/interface/utils.py,sha256=xp6eDOC8C0c3cjt791S_jBDs1B-xp_ydIb74QnMLEt8,20219
|
|
33
33
|
exaaiagnt/llm/__init__.py,sha256=hUVixjSSIUtwIP2I5D_9e6Kdxhhunnajgxx_2DEYNww,1095
|
|
34
34
|
exaaiagnt/llm/config.py,sha256=HQ0skwQxtHwiDLDWBCU1Fp4UoQ8tbrTNQw9s7JGVaiY,3303
|
|
35
35
|
exaaiagnt/llm/fallback.py,sha256=oPS0PGRxEHnyyBgS4yP9zdwSf4JFJh4dYZ3g8OFwWEE,11413
|
|
36
|
-
exaaiagnt/llm/llm.py,sha256=
|
|
37
|
-
exaaiagnt/llm/llm_traffic_controller.py,sha256=
|
|
36
|
+
exaaiagnt/llm/llm.py,sha256=D9VnU73ffz7GhotGqQ5RZDufQ8xPKz8aouU23oW0kPY,18664
|
|
37
|
+
exaaiagnt/llm/llm_traffic_controller.py,sha256=DIgJvjrT0MIOStb8g2wTAMoDXp9YLEBlFD5Bwt862K8,12304
|
|
38
38
|
exaaiagnt/llm/memory_compressor.py,sha256=_At7e5QlDv2vrUDUJMEwm4CjNJ2uGYQsOBhiHiQvVr8,7054
|
|
39
39
|
exaaiagnt/llm/output_processor.py,sha256=JC3TtzYj9DJhJRuKzz_VV3WIwAyYhUdZeY1N9c4SzVw,13568
|
|
40
|
-
exaaiagnt/llm/request_queue.py,sha256=
|
|
40
|
+
exaaiagnt/llm/request_queue.py,sha256=2H-jEcI1krY8U8oMoULu-1y6kEV84enI36QLUkTLKm0,9198
|
|
41
41
|
exaaiagnt/llm/utils.py,sha256=0Z0r6qo9IfUSOJt5FJsq3X-veXrA8A09frc2VIy-aS4,2540
|
|
42
|
-
exaaiagnt/prompts/README.md,sha256=
|
|
42
|
+
exaaiagnt/prompts/README.md,sha256=PPeH0Up6_Ygk6zfYchcLVVZ-OqU5PhWIUwYx6KbhFaY,3975
|
|
43
43
|
exaaiagnt/prompts/__init__.py,sha256=nUs1powNe_6sWmM5_KkAIxZj97t5IiMMgNrL39WwUjg,5042
|
|
44
|
-
exaaiagnt/prompts/auto_loader.py,sha256=
|
|
44
|
+
exaaiagnt/prompts/auto_loader.py,sha256=vVXBDLk8O08x3LglREvAReB2GqJqZKIsnhcwsQlKm4w,12994
|
|
45
45
|
exaaiagnt/prompts/cloud/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
46
46
|
exaaiagnt/prompts/cloud/aws_cloud_security.jinja,sha256=ObimikftsoqGzxhrvI6pQLVRQ4MmkJpjwexORS7P7uo,6768
|
|
47
|
+
exaaiagnt/prompts/cloud/azure_cloud_security.jinja,sha256=jKlQpWvPy6grYtU6S44cP1uKw5sLbCj6QmdUv9tu_PI,5225
|
|
48
|
+
exaaiagnt/prompts/cloud/gcp_cloud_security.jinja,sha256=n5GMgRufa0PBV8WbB6RfmmBAUeJZqEK_67b87MgjF7Y,6656
|
|
49
|
+
exaaiagnt/prompts/cloud/kubernetes_security.jinja,sha256=qmXHxMVg3wcj5aFzi176djJUhSp756obtk2Ff8PWGjo,4068
|
|
47
50
|
exaaiagnt/prompts/coordination/root_agent.jinja,sha256=05VUZKnBX_7-FjEYilEq_OJG4u01_56bf4mzGNbFtJc,1996
|
|
48
51
|
exaaiagnt/prompts/custom/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
49
52
|
exaaiagnt/prompts/frameworks/fastapi.jinja,sha256=zXa08RDG9tVQu6MZetKCcOUPuDDKJJF1anTei7_2TZg,10200
|
|
@@ -74,6 +77,7 @@ exaaiagnt/prompts/vulnerabilities/open_redirect.jinja,sha256=Mbit385OO7fTSGRb0xF
|
|
|
74
77
|
exaaiagnt/prompts/vulnerabilities/path_traversal_lfi_rfi.jinja,sha256=5Zfr424yM2LyFxt9A6q18RhbIjdq1MB6mpjWbG_FA7o,7916
|
|
75
78
|
exaaiagnt/prompts/vulnerabilities/post_exploitation.jinja,sha256=YgGCIQu1FmrLq-KN930Pb-VqGWQV9BTbPIkcEFzkzac,8396
|
|
76
79
|
exaaiagnt/prompts/vulnerabilities/privilege_escalation.jinja,sha256=XY0atQ4nEkGsmPiNoLtc0QwVTLV8r3w0ZvH4snmCgHE,6796
|
|
80
|
+
exaaiagnt/prompts/vulnerabilities/prompt_injection.jinja,sha256=7AsziV8IFMeQT1sUjFKppd76vlVfNSsiM9W523wew-E,9387
|
|
77
81
|
exaaiagnt/prompts/vulnerabilities/prototype_pollution.jinja,sha256=g-I6ouqaZpxqoTa4MyGHaUKxwlM-gFrPo_F1T8r_ASI,6486
|
|
78
82
|
exaaiagnt/prompts/vulnerabilities/race_conditions.jinja,sha256=ZHxdZc7v7yvhmUWJK3P3kIzOz3oaYRb2OJEzG1momcg,8372
|
|
79
83
|
exaaiagnt/prompts/vulnerabilities/rce.jinja,sha256=tgmocWH3Y9FJ3fBeR9DTR7ViBcuH5salGis8vywJ2h8,8425
|
|
@@ -90,11 +94,11 @@ exaaiagnt/prompts/vulnerabilities/xxe.jinja,sha256=yyWl5i74YiFZIhQknMPWXLKL0C5gw
|
|
|
90
94
|
exaaiagnt/runtime/__init__.py,sha256=MnuwXAMjvj2kQKJCOyzW-qQSpiipGzmESVWz436lqkQ,760
|
|
91
95
|
exaaiagnt/runtime/docker_runtime.py,sha256=lb4cipUbCkwPw3_BxKyICFoIW8Su2zFs_sFW-r59Nfk,16185
|
|
92
96
|
exaaiagnt/runtime/runtime.py,sha256=PRYByipRG9OhtIphIruGBSe4k-glVnYAXH68mikqt78,730
|
|
93
|
-
exaaiagnt/runtime/tool_manager.py,sha256=
|
|
97
|
+
exaaiagnt/runtime/tool_manager.py,sha256=3PSUxTmGsFptNlKkZDnzXyyBA_AfbKvqhMPyRi6_fMU,14770
|
|
94
98
|
exaaiagnt/runtime/tool_server.py,sha256=e23TJYL5w32gMqLS9UJ0xw3XZ4lM38ETBvHVHKk3APU,6835
|
|
95
99
|
exaaiagnt/telemetry/__init__.py,sha256=8QLHMvrVNLlGKezWTf3mTSmTOLIvDS5xVciry1KVS1Y,130
|
|
96
100
|
exaaiagnt/telemetry/tracer.py,sha256=DZuQ-xGdPWB2FKEn_rRPxP1RO2_acXQRkHzuhApAI88,12582
|
|
97
|
-
exaaiagnt/tools/__init__.py,sha256=
|
|
101
|
+
exaaiagnt/tools/__init__.py,sha256=1Z4EECFThur9Bn_EkqVHJYx9Z3pM1cdh6qXc3rTcyPA,4000
|
|
98
102
|
exaaiagnt/tools/agents_graph/__init__.py,sha256=FLJ2kGxXICY2pRKrC0sgIc3w3KhZo7VID7hbwYcgBfM,278
|
|
99
103
|
exaaiagnt/tools/agents_graph/agents_graph_actions.py,sha256=ujBj3R3MpOmIVsN4T3nekVhreu60xA2EEg9rYXCdz2c,21103
|
|
100
104
|
exaaiagnt/tools/agents_graph/agents_graph_actions_schema.xml,sha256=fczqDpNw2m58p2O_G0amBZso--EjEGZuK829lB-cXdE,12617
|
|
@@ -104,16 +108,20 @@ exaaiagnt/tools/browser/browser_actions.py,sha256=6p3drOznDLPVnqSo3CnJjq4qXXSvCh
|
|
|
104
108
|
exaaiagnt/tools/browser/browser_actions_schema.xml,sha256=zZQD8sZWsNnxxnlY3QYDrfKHFu0x6i1vtfSOlIGyiho,9573
|
|
105
109
|
exaaiagnt/tools/browser/browser_instance.py,sha256=vgb-dJP20SLaBOhFExn-uwfjdISBrHJpG7ewfiKQkYU,18605
|
|
106
110
|
exaaiagnt/tools/browser/tab_manager.py,sha256=SMkDFOgEr3ADK2rP5Ko2uK-A24-8p0VsbjoxEj5eU-Y,13011
|
|
107
|
-
exaaiagnt/tools/executor.py,sha256
|
|
111
|
+
exaaiagnt/tools/executor.py,sha256=YWw8Tz3MT3EgK9InLSjamkBWSY7sNcFziBU7Z1BMpMk,10869
|
|
108
112
|
exaaiagnt/tools/file_edit/__init__.py,sha256=8f6VlEoGP627hGtcdLkr63vdrTmdb8uyPIqB0qVgZd8,141
|
|
109
113
|
exaaiagnt/tools/file_edit/file_edit_actions.py,sha256=w-rEB9MphijtXJUyypttQ4DLU4y9rwHd7Zpl21LTTis,3955
|
|
110
114
|
exaaiagnt/tools/file_edit/file_edit_actions_schema.xml,sha256=tt0_QgSjOtTEy8ordsXUcEiVTePiybgn4aisZJ_qnbc,5477
|
|
111
115
|
exaaiagnt/tools/finish/__init__.py,sha256=QIMaHYusly8YaFR3zjYsy_CFawwgtTZvOU7gsEumFrw,68
|
|
112
116
|
exaaiagnt/tools/finish/finish_actions.py,sha256=ZLyOuYMjdTPHN9_6sQxyHwp3-BVSusk5dM2WHUn3WMI,5714
|
|
113
117
|
exaaiagnt/tools/finish/finish_actions_schema.xml,sha256=CS6Vq3ByyNxv2spRWS4oJcmUzWQRB7jvUAOS8aiWd8o,2294
|
|
118
|
+
exaaiagnt/tools/k8s_scanner/__init__.py,sha256=MIo_Hl4p7Zzea9KSR_wVnxnlyyrB9eS8g3DlZxwSsHk,557
|
|
119
|
+
exaaiagnt/tools/k8s_scanner/k8s_actions.py,sha256=2iK-PchYw9X8XZvx5tmEQwIi6ckA153lolbNpN5sm3g,13365
|
|
114
120
|
exaaiagnt/tools/notes/__init__.py,sha256=DUpkZUWN21tb9AXCWfJLrKrgLz9YEBVU8KQy1J6cyxU,189
|
|
115
121
|
exaaiagnt/tools/notes/notes_actions.py,sha256=8ewd1kCxZO_ujKP2oXuU03r9p8EZEYgoO7i_6GWw_VA,5775
|
|
116
122
|
exaaiagnt/tools/notes/notes_actions_schema.xml,sha256=nzirWDyzbPRxaG3jdSjmSCjfY-ggDy1kH7oxAuj-osw,6264
|
|
123
|
+
exaaiagnt/tools/prompt_injection/__init__.py,sha256=YjzfqLYKdOuEeV8WgE_b9swnP2uhYtOlPbeRplKOTzc,645
|
|
124
|
+
exaaiagnt/tools/prompt_injection/prompt_injection_actions.py,sha256=xvg_MrRAjx9E1vumIJYK8utf34JjTupF3S4BVDV2cVM,24942
|
|
117
125
|
exaaiagnt/tools/proxy/__init__.py,sha256=K3BFmT6QWw9heB7l7DnmI-Yj-DOI3BAow6g0GLWsA0c,329
|
|
118
126
|
exaaiagnt/tools/proxy/proxy_actions.py,sha256=HyfI6iUVkRSnzLR_xNRKWhr4roDEAatGyYTq4wij2Js,2549
|
|
119
127
|
exaaiagnt/tools/proxy/proxy_actions_schema.xml,sha256=d87SUKD2J16KQCCFpI5w2y-Ax1NgwOuGO3crr1bFPDw,11567
|
|
@@ -121,14 +129,14 @@ exaaiagnt/tools/proxy/proxy_manager.py,sha256=rmy8c_7jcYl9WeeA3O2lcZBnN7hESpTYxo
|
|
|
121
129
|
exaaiagnt/tools/python/__init__.py,sha256=l5mFWKbtis61S8lOQY-gFn-vIlc13lu1K-pqqRywOCk,72
|
|
122
130
|
exaaiagnt/tools/python/python_actions.py,sha256=ggLFFLW7cQamY1fvgUxzz9beOy_deY1zdouK_K8iF50,1436
|
|
123
131
|
exaaiagnt/tools/python/python_actions_schema.xml,sha256=XcIUjz5uEoI7J3VFcby0O-0ovm9r9cIoADfpqDGJXlU,7122
|
|
124
|
-
exaaiagnt/tools/python/python_instance.py,sha256=
|
|
132
|
+
exaaiagnt/tools/python/python_instance.py,sha256=kYjyPIQG5QmYoKG4xMcb2wPyMcUO3R3A9vXINpXx6dQ,6030
|
|
125
133
|
exaaiagnt/tools/python/python_manager.py,sha256=C_k8C8uQ6ESpAgzhbf3km9jeFyI52SGd2m36mD1ErhM,4235
|
|
126
134
|
exaaiagnt/tools/registry.py,sha256=iBRwtiWLQr3fo1vSAOehWbIlr6cqnNPLB1dluXtsf8s,6029
|
|
127
135
|
exaaiagnt/tools/reporting/__init__.py,sha256=_cYxb3OP0vZtCwO_ExLBjhAn1ECaG-SH1Z4wfGDyT1Y,110
|
|
128
136
|
exaaiagnt/tools/reporting/reporting_actions.py,sha256=aVEwfG5GgJ68bFJOicO_YD2yp5wCimxlnZzpXX3TJcQ,2200
|
|
129
137
|
exaaiagnt/tools/reporting/reporting_actions_schema.xml,sha256=y_g0iuyBuCh79fvA0ri8fOPlXY7uUd-P-mdzXLUyIJg,1629
|
|
130
|
-
exaaiagnt/tools/response_analyzer.py,sha256=
|
|
131
|
-
exaaiagnt/tools/smart_fuzzer.py,sha256=
|
|
138
|
+
exaaiagnt/tools/response_analyzer.py,sha256=0B8LZ3pvBImH40t8QqCtLdxwc28Chq-2C8I23zi-XJM,10647
|
|
139
|
+
exaaiagnt/tools/smart_fuzzer.py,sha256=cN9TgJcLz3MzDuBIP8EVtEdoJL67LcrFBc2zo9j53cE,12367
|
|
132
140
|
exaaiagnt/tools/terminal/__init__.py,sha256=xvflcrbLQ31o_K3cWFsIhTm7gxY5JF0nVnhOIadwFV0,80
|
|
133
141
|
exaaiagnt/tools/terminal/terminal_actions.py,sha256=5z3OTF0YwZL0n_CVsx1yLmbSx7oUQg-xD0Wv8IXsIlw,892
|
|
134
142
|
exaaiagnt/tools/terminal/terminal_actions_schema.xml,sha256=L7dzjvKNZpJA0qDGp1gCBuwXiY4mtjOq7T2tNDmUPA4,7257
|
|
@@ -138,13 +146,13 @@ exaaiagnt/tools/thinking/__init__.py,sha256=-v4fG4fyFkqsTSWspDtCT6IRlyRM8zeUwEM-
|
|
|
138
146
|
exaaiagnt/tools/thinking/thinking_actions.py,sha256=Ynw1gBN4Z8iXGll0v9kObhkjQzc8-dEcHTWKeyFutAw,568
|
|
139
147
|
exaaiagnt/tools/thinking/thinking_actions_schema.xml,sha256=otD4dOhQx4uyudLnjA_HIP6EmUS5NvKG4l3CVFrg8go,2756
|
|
140
148
|
exaaiagnt/tools/tool_prompts.py,sha256=eQL7B8H8mo6d6mvtN_X9rmSfjwgz9Cuzfg7C7WH6TnU,5751
|
|
141
|
-
exaaiagnt/tools/vuln_validator.py,sha256=
|
|
149
|
+
exaaiagnt/tools/vuln_validator.py,sha256=jViG2-3pVBwI3VXe5JsgCFsDBNk9nmT_s2vEe7cZjmA,14025
|
|
142
150
|
exaaiagnt/tools/waf_bypass.py,sha256=71oPWnDHjn2EHi6I1SluZCKfqfXkA5j61oIkL5kNoSw,12047
|
|
143
151
|
exaaiagnt/tools/web_search/__init__.py,sha256=m5PCHXqeNVraLRLNIbh54Z2N4Y_75d-ftqwyq3dbCd0,70
|
|
144
152
|
exaaiagnt/tools/web_search/web_search_actions.py,sha256=jmlN2uIq8lRbhRnyaMQkC-44jhpfkLQZ_byYNlNNlOY,3111
|
|
145
153
|
exaaiagnt/tools/web_search/web_search_actions_schema.xml,sha256=Ihc3Gv4LaPI_MzBbwZOt3y4pwg9xmtl8KfPNvFihEP4,4805
|
|
146
|
-
exaai_agent-2.
|
|
147
|
-
exaai_agent-2.
|
|
148
|
-
exaai_agent-2.
|
|
149
|
-
exaai_agent-2.
|
|
150
|
-
exaai_agent-2.
|
|
154
|
+
exaai_agent-2.1.2.dist-info/METADATA,sha256=OjaCfqExnqZH9WLe1FU-hfJk7sJndMruISsjGZnlMvQ,12762
|
|
155
|
+
exaai_agent-2.1.2.dist-info/WHEEL,sha256=kJCRJT_g0adfAJzTx2GUMmS80rTJIVHRCfG0DQgLq3o,88
|
|
156
|
+
exaai_agent-2.1.2.dist-info/entry_points.txt,sha256=iLSTRDSjN8Zyc2Wo6WXmr4MtyEWkdqtZ1j_Hx73MiUs,137
|
|
157
|
+
exaai_agent-2.1.2.dist-info/licenses/LICENSE,sha256=RV6IGl0sWdfbbtJmjPr1w_qwGyGt2jv02PXsAzN_kNs,11460
|
|
158
|
+
exaai_agent-2.1.2.dist-info/RECORD,,
|
exaaiagnt/interface/cli.py
CHANGED
|
@@ -31,38 +31,54 @@ BANNER = r"""
|
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
async def run_cli(args: Any) -> None: # noqa: PLR0915
|
|
34
|
-
|
|
34
|
+
# Detect if running in a real terminal or headless (pipe/background)
|
|
35
|
+
is_tty = sys.stdout.isatty()
|
|
36
|
+
console = Console(force_terminal=is_tty, no_color=not is_tty)
|
|
35
37
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
38
|
+
if is_tty:
|
|
39
|
+
# Clear screen and show banner only in interactive terminal
|
|
40
|
+
console.clear()
|
|
41
|
+
console.print()
|
|
42
|
+
console.print(BANNER, style="bold cyan", justify="center")
|
|
43
|
+
console.print("[bold purple]Advanced AI-Powered Cybersecurity Agent[/]", justify="center")
|
|
44
|
+
console.print("[dim]v2.1.2[/]", justify="center")
|
|
45
|
+
console.print()
|
|
46
|
+
else:
|
|
47
|
+
# Simple text output for headless/pipe mode
|
|
48
|
+
print("=" * 50)
|
|
49
|
+
print("ExaAiAgent - AI-Powered Security Scanner")
|
|
50
|
+
print("=" * 50)
|
|
51
|
+
|
|
52
|
+
if is_tty:
|
|
53
|
+
# Target info table (rich formatting)
|
|
54
|
+
target_table = Table(show_header=True, header_style="bold cyan", border_style="cyan")
|
|
55
|
+
target_table.add_column("Type", style="dim")
|
|
56
|
+
target_table.add_column("Target", style="white")
|
|
57
|
+
|
|
58
|
+
for target_info in args.targets_info:
|
|
59
|
+
target_type = target_info.get("type", "URL")
|
|
60
|
+
target_table.add_row(target_type, target_info["original"])
|
|
61
|
+
|
|
62
|
+
console.print(Panel(target_table, title="[bold cyan]🎯 Targets", border_style="cyan"))
|
|
63
|
+
console.print()
|
|
55
64
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
65
|
+
# Config info
|
|
66
|
+
config_text = Text()
|
|
67
|
+
config_text.append("📁 Results: ", style="dim")
|
|
68
|
+
config_text.append(f"exaai_runs/{args.run_name}\n", style="white")
|
|
69
|
+
if args.instruction:
|
|
70
|
+
config_text.append("📝 Instruction: ", style="dim")
|
|
71
|
+
config_text.append(f"{args.instruction[:100]}{'...' if len(args.instruction) > 100 else ''}", style="white")
|
|
72
|
+
|
|
73
|
+
console.print(Panel(config_text, title="[bold green]⚙️ Configuration", border_style="green"))
|
|
74
|
+
console.print()
|
|
75
|
+
else:
|
|
76
|
+
# Simple text output for headless mode
|
|
77
|
+
print(f"Targets: {[t['original'] for t in args.targets_info]}")
|
|
78
|
+
print(f"Results: exaai_runs/{args.run_name}")
|
|
79
|
+
if args.instruction:
|
|
80
|
+
print(f"Instruction: {args.instruction[:100]}")
|
|
81
|
+
print("-" * 50)
|
|
66
82
|
|
|
67
83
|
scan_config = {
|
|
68
84
|
"scan_id": args.run_name,
|
|
@@ -71,7 +87,12 @@ async def run_cli(args: Any) -> None: # noqa: PLR0915
|
|
|
71
87
|
"run_name": args.run_name,
|
|
72
88
|
}
|
|
73
89
|
|
|
74
|
-
|
|
90
|
+
# Handle prompt modules
|
|
91
|
+
prompt_modules = None
|
|
92
|
+
if getattr(args, "prompt_modules", None):
|
|
93
|
+
prompt_modules = [m.strip() for m in args.prompt_modules.split(",")]
|
|
94
|
+
|
|
95
|
+
llm_config = LLMConfig(prompt_modules=prompt_modules)
|
|
75
96
|
agent_config = {
|
|
76
97
|
"llm_config": llm_config,
|
|
77
98
|
"max_iterations": 300,
|
exaaiagnt/interface/main.py
CHANGED
|
@@ -242,7 +242,7 @@ async def warm_up_llm() -> None:
|
|
|
242
242
|
|
|
243
243
|
def get_version() -> str:
|
|
244
244
|
"""Get the current ExaAi version."""
|
|
245
|
-
return "2.1.
|
|
245
|
+
return "2.1.2"
|
|
246
246
|
|
|
247
247
|
|
|
248
248
|
def parse_arguments() -> argparse.Namespace:
|
|
@@ -276,6 +276,10 @@ Examples:
|
|
|
276
276
|
# Custom instructions
|
|
277
277
|
exaai -t example.com -i "Focus on authentication vulnerabilities"
|
|
278
278
|
exaai -t example.com --instruction ./instructions.txt
|
|
279
|
+
|
|
280
|
+
# Specific security modules
|
|
281
|
+
exaai -t example.com --prompt-modules kubernetes_security,cloud_security
|
|
282
|
+
exaai -t example.com --prompt-modules prompt_injection
|
|
279
283
|
""",
|
|
280
284
|
)
|
|
281
285
|
|
|
@@ -306,6 +310,12 @@ Examples:
|
|
|
306
310
|
"or test credentials (e.g., 'Use the following credentials: admin:password123'). "
|
|
307
311
|
"You can also provide a path to a file containing detailed instructions.",
|
|
308
312
|
)
|
|
313
|
+
parser.add_argument(
|
|
314
|
+
"--prompt-modules",
|
|
315
|
+
type=str,
|
|
316
|
+
help="Comma-separated list of prompt modules to load (e.g., 'kubernetes_security,prompt_injection'). "
|
|
317
|
+
"Overrides auto-detection.",
|
|
318
|
+
)
|
|
309
319
|
parser.add_argument(
|
|
310
320
|
"--run-name",
|
|
311
321
|
type=str,
|
exaaiagnt/interface/tui.py
CHANGED
|
@@ -45,7 +45,7 @@ def get_package_version() -> str:
|
|
|
45
45
|
return pkg_version("exaai-agent")
|
|
46
46
|
except PackageNotFoundError:
|
|
47
47
|
# Fallback version if package not installed
|
|
48
|
-
return "2.
|
|
48
|
+
return "2.1.2"
|
|
49
49
|
|
|
50
50
|
|
|
51
51
|
class ChatTextArea(TextArea): # type: ignore[misc]
|
|
@@ -80,7 +80,7 @@ class SplashScreen(Static): # type: ignore[misc]
|
|
|
80
80
|
NEON_ORANGE = "#ff8800"
|
|
81
81
|
SOFT_WHITE = "#e0e0e0"
|
|
82
82
|
|
|
83
|
-
# Enhanced ASCII Logo - ExaAi v2.
|
|
83
|
+
# Enhanced ASCII Logo - ExaAi v2.1.2
|
|
84
84
|
BANNER = r"""
|
|
85
85
|
███████╗██╗ ██╗ █████╗ █████╗ ██╗
|
|
86
86
|
██╔════╝╚██╗██╔╝██╔══██╗ ██╔══██╗██║
|
|
@@ -104,7 +104,7 @@ class SplashScreen(Static): # type: ignore[misc]
|
|
|
104
104
|
self._animation_step = 0
|
|
105
105
|
self._animation_timer: Timer | None = None
|
|
106
106
|
self._panel_static: Static | None = None
|
|
107
|
-
self._version = "2.1.
|
|
107
|
+
self._version = "2.1.2"
|
|
108
108
|
|
|
109
109
|
def compose(self) -> ComposeResult:
|
|
110
110
|
self._version = get_package_version()
|
|
@@ -181,14 +181,14 @@ class SplashScreen(Static): # type: ignore[misc]
|
|
|
181
181
|
return text
|
|
182
182
|
|
|
183
183
|
def _build_new_features_text(self) -> Text:
|
|
184
|
-
"""Build new features highlight for v2.0.
|
|
184
|
+
"""Build new features highlight for v2.1.0."""
|
|
185
185
|
text = Text("🔥 ", style=Style(color=self.NEON_ORANGE))
|
|
186
186
|
text.append("NEW: ", style=Style(color=self.NEON_ORANGE, bold=True))
|
|
187
|
-
text.append("
|
|
187
|
+
text.append("K8s Security", style=Style(color=self.NEON_PINK))
|
|
188
188
|
text.append(" • ", style=Style(color=self.SOFT_WHITE, dim=True))
|
|
189
|
-
text.append("
|
|
189
|
+
text.append("Prompt Injection", style=Style(color=self.NEON_CYAN))
|
|
190
190
|
text.append(" • ", style=Style(color=self.SOFT_WHITE, dim=True))
|
|
191
|
-
text.append("
|
|
191
|
+
text.append("Azure/GCP", style=Style(color=self.NEON_GREEN))
|
|
192
192
|
return text
|
|
193
193
|
|
|
194
194
|
|
|
@@ -391,7 +391,11 @@ class ExaaiTUIApp(App): # type: ignore[misc]
|
|
|
391
391
|
}
|
|
392
392
|
|
|
393
393
|
def _build_agent_config(self, args: argparse.Namespace) -> dict[str, Any]:
|
|
394
|
-
|
|
394
|
+
prompt_modules = None
|
|
395
|
+
if getattr(args, "prompt_modules", None):
|
|
396
|
+
prompt_modules = [m.strip() for m in args.prompt_modules.split(",")]
|
|
397
|
+
|
|
398
|
+
llm_config = LLMConfig(prompt_modules=prompt_modules)
|
|
395
399
|
|
|
396
400
|
config = {
|
|
397
401
|
"llm_config": llm_config,
|
exaaiagnt/llm/llm.py
CHANGED
|
@@ -17,6 +17,7 @@ from litellm.utils import supports_prompt_caching
|
|
|
17
17
|
|
|
18
18
|
from exaaiagnt.llm.config import LLMConfig
|
|
19
19
|
from exaaiagnt.llm.memory_compressor import MemoryCompressor
|
|
20
|
+
from exaaiagnt.llm.request_queue import get_global_queue
|
|
20
21
|
from exaaiagnt.llm.llm_traffic_controller import get_traffic_controller, RequestPriority
|
|
21
22
|
from exaaiagnt.llm.utils import _truncate_to_first_function, parse_tool_invocations
|
|
22
23
|
from exaaiagnt.prompts import load_prompt_modules
|
|
@@ -54,11 +54,13 @@ class AdaptiveLLMController:
|
|
|
54
54
|
"""
|
|
55
55
|
|
|
56
56
|
_instance: Optional["AdaptiveLLMController"] = None
|
|
57
|
+
_lock_cls = __import__("threading").Lock()
|
|
57
58
|
|
|
58
59
|
def __new__(cls) -> "AdaptiveLLMController":
|
|
59
|
-
|
|
60
|
-
cls._instance
|
|
61
|
-
|
|
60
|
+
with cls._lock_cls:
|
|
61
|
+
if cls._instance is None:
|
|
62
|
+
cls._instance = super().__new__(cls)
|
|
63
|
+
cls._instance._initialized = False
|
|
62
64
|
return cls._instance
|
|
63
65
|
|
|
64
66
|
def __init__(self):
|
|
@@ -73,8 +75,8 @@ class AdaptiveLLMController:
|
|
|
73
75
|
# Rate limiting state
|
|
74
76
|
self._last_request_time = 0.0
|
|
75
77
|
self._consecutive_rate_limits = 0
|
|
76
|
-
self._base_delay =
|
|
77
|
-
self._current_delay =
|
|
78
|
+
self._base_delay = 4.0 # Base delay between requests
|
|
79
|
+
self._current_delay = 4.0
|
|
78
80
|
self._max_delay = 30.0
|
|
79
81
|
|
|
80
82
|
# Statistics
|
|
@@ -88,8 +90,8 @@ class AdaptiveLLMController:
|
|
|
88
90
|
self._tool_execution_lock = asyncio.Lock()
|
|
89
91
|
|
|
90
92
|
# Configuration
|
|
91
|
-
self._max_retries =
|
|
92
|
-
self._rate_limit_wait =
|
|
93
|
+
self._max_retries = 10 # Increased for Gemini
|
|
94
|
+
self._rate_limit_wait = 15.0 # Longer wait after rate limit
|
|
93
95
|
self._enable_verbose_logging = False
|
|
94
96
|
|
|
95
97
|
self._initialized = True
|
exaaiagnt/llm/request_queue.py
CHANGED
|
@@ -65,8 +65,8 @@ class LLMRequestQueue:
|
|
|
65
65
|
|
|
66
66
|
def __init__(
|
|
67
67
|
self,
|
|
68
|
-
max_concurrent: int =
|
|
69
|
-
delay_between_requests: float =
|
|
68
|
+
max_concurrent: int = 2,
|
|
69
|
+
delay_between_requests: float = 4.0,
|
|
70
70
|
request_timeout: int = 300,
|
|
71
71
|
):
|
|
72
72
|
# Load configuration from environment
|
|
@@ -161,8 +161,8 @@ class LLMRequestQueue:
|
|
|
161
161
|
self._semaphore.release()
|
|
162
162
|
|
|
163
163
|
@retry(
|
|
164
|
-
stop=stop_after_attempt(
|
|
165
|
-
wait=wait_exponential(multiplier=
|
|
164
|
+
stop=stop_after_attempt(15), # Increased for rate limits
|
|
165
|
+
wait=wait_exponential(multiplier=3, min=10, max=180), # Longer delays
|
|
166
166
|
retry=retry_if_exception(should_retry_exception),
|
|
167
167
|
before_sleep=before_sleep_log(logger, logging.WARNING),
|
|
168
168
|
reraise=True,
|
exaaiagnt/prompts/README.md
CHANGED
|
@@ -43,12 +43,14 @@ The modules are dynamically injected into the agent's system prompt, allowing it
|
|
|
43
43
|
| `race_conditions` | Race condition and TOCTOU exploits |
|
|
44
44
|
| `path_traversal` | Directory traversal attacks |
|
|
45
45
|
|
|
46
|
-
### NEW: Advanced Modules
|
|
46
|
+
### NEW: Advanced Modules (v2.1)
|
|
47
47
|
|
|
48
48
|
| Module | Description |
|
|
49
49
|
|--------|-------------|
|
|
50
50
|
| `api_security` | REST, GraphQL, gRPC API security testing |
|
|
51
51
|
| `cloud_security` | AWS, Azure, GCP security assessment |
|
|
52
|
+
| `kubernetes_security` | **NEW!** K8s RBAC, Pod Security, Network Policy audit |
|
|
53
|
+
| `prompt_injection` | **NEW!** AI/LLM prompt injection & jailbreaking |
|
|
52
54
|
| `reconnaissance_osint` | Reconnaissance and OSINT techniques |
|
|
53
55
|
| `privilege_escalation` | Linux/Windows privilege escalation |
|
|
54
56
|
| `high_impact_bugs` | Bug bounty hunting for critical vulns |
|
exaaiagnt/prompts/auto_loader.py
CHANGED
|
@@ -210,6 +210,37 @@ MODULE_PATTERNS = {
|
|
|
210
210
|
],
|
|
211
211
|
"keywords": ["aws", "s3", "ec2", "lambda", "azure", "gcp", "cloud", "bucket", "metadata"],
|
|
212
212
|
},
|
|
213
|
+
|
|
214
|
+
# Kubernetes Security (NEW v2.1)
|
|
215
|
+
"kubernetes_security": {
|
|
216
|
+
"url_patterns": [
|
|
217
|
+
r"/api/v1/",
|
|
218
|
+
r"/apis/",
|
|
219
|
+
r":6443",
|
|
220
|
+
r":10250",
|
|
221
|
+
r":8443",
|
|
222
|
+
],
|
|
223
|
+
"keywords": ["kubernetes", "k8s", "kubectl", "pod", "deployment", "service",
|
|
224
|
+
"ingress", "helm", "kubelet", "etcd", "rbac", "namespace"],
|
|
225
|
+
},
|
|
226
|
+
|
|
227
|
+
# AI/LLM Prompt Injection (NEW v2.1)
|
|
228
|
+
"prompt_injection": {
|
|
229
|
+
"url_patterns": [
|
|
230
|
+
r"/chat",
|
|
231
|
+
r"/completions",
|
|
232
|
+
r"/generate",
|
|
233
|
+
r"/ask",
|
|
234
|
+
r"/ai",
|
|
235
|
+
r"/llm",
|
|
236
|
+
r"/v1/chat",
|
|
237
|
+
r"/v1/completions",
|
|
238
|
+
r"/assistant",
|
|
239
|
+
],
|
|
240
|
+
"keywords": ["openai", "anthropic", "llm", "gpt", "claude", "chatbot",
|
|
241
|
+
"ai assistant", "langchain", "llama", "gemini", "copilot",
|
|
242
|
+
"rag", "embedding", "vector", "prompt"],
|
|
243
|
+
},
|
|
213
244
|
}
|
|
214
245
|
|
|
215
246
|
|