@intentsolutionsio/penetration-tester 2.0.0 → 3.0.4
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/.claude-plugin/plugin.json +8 -3
- package/README.md +8 -0
- package/commands/pentest.md +5 -0
- package/package.json +8 -3
- package/skills/analyzing-tls-config/SKILL.md +221 -0
- package/skills/analyzing-tls-config/references/AUTHORIZATION.md +133 -0
- package/skills/analyzing-tls-config/references/PLAYBOOK.md +267 -0
- package/skills/analyzing-tls-config/references/THEORY.md +128 -0
- package/skills/analyzing-tls-config/scripts/analyze_tls.py +415 -0
- package/skills/auditing-cors-policy/SKILL.md +186 -0
- package/skills/auditing-cors-policy/references/PLAYBOOK.md +220 -0
- package/skills/auditing-cors-policy/references/THEORY.md +142 -0
- package/skills/auditing-cors-policy/scripts/audit_cors.py +350 -0
- package/skills/auditing-npm-dependencies/SKILL.md +254 -0
- package/skills/auditing-npm-dependencies/references/PLAYBOOK.md +175 -0
- package/skills/auditing-npm-dependencies/references/THEORY.md +122 -0
- package/skills/auditing-npm-dependencies/scripts/audit_npm.py +408 -0
- package/skills/auditing-python-dependencies/SKILL.md +251 -0
- package/skills/auditing-python-dependencies/references/PLAYBOOK.md +193 -0
- package/skills/auditing-python-dependencies/references/THEORY.md +122 -0
- package/skills/auditing-python-dependencies/scripts/audit_python.py +459 -0
- package/skills/checking-http-security-headers/SKILL.md +176 -0
- package/skills/checking-http-security-headers/references/PLAYBOOK.md +212 -0
- package/skills/checking-http-security-headers/references/THEORY.md +137 -0
- package/skills/checking-http-security-headers/scripts/check_headers.py +362 -0
- package/skills/checking-license-compliance/SKILL.md +225 -0
- package/skills/checking-license-compliance/references/PLAYBOOK.md +161 -0
- package/skills/checking-license-compliance/references/THEORY.md +152 -0
- package/skills/checking-license-compliance/scripts/check_licenses.py +461 -0
- package/skills/composing-vulnerability-report/SKILL.md +212 -0
- package/skills/composing-vulnerability-report/references/PLAYBOOK.md +180 -0
- package/skills/composing-vulnerability-report/references/THEORY.md +178 -0
- package/skills/composing-vulnerability-report/scripts/compose_report.py +396 -0
- package/skills/confirming-pentest-authorization/SKILL.md +247 -0
- package/skills/confirming-pentest-authorization/references/PLAYBOOK.md +189 -0
- package/skills/confirming-pentest-authorization/references/THEORY.md +167 -0
- package/skills/confirming-pentest-authorization/scripts/check_authorization.py +457 -0
- package/skills/defining-pentest-scope/SKILL.md +227 -0
- package/skills/defining-pentest-scope/references/PLAYBOOK.md +238 -0
- package/skills/defining-pentest-scope/references/THEORY.md +170 -0
- package/skills/defining-pentest-scope/scripts/define_scope.py +472 -0
- package/skills/detecting-command-injection-patterns/SKILL.md +144 -0
- package/skills/detecting-command-injection-patterns/references/PLAYBOOK.md +302 -0
- package/skills/detecting-command-injection-patterns/references/THEORY.md +206 -0
- package/skills/detecting-command-injection-patterns/scripts/scan_cmdi.py +290 -0
- package/skills/detecting-debug-endpoints/SKILL.md +207 -0
- package/skills/detecting-debug-endpoints/references/PLAYBOOK.md +402 -0
- package/skills/detecting-debug-endpoints/references/THEORY.md +218 -0
- package/skills/detecting-debug-endpoints/scripts/probe_debug.py +518 -0
- package/skills/detecting-directory-listing/SKILL.md +206 -0
- package/skills/detecting-directory-listing/references/PLAYBOOK.md +277 -0
- package/skills/detecting-directory-listing/references/THEORY.md +203 -0
- package/skills/detecting-directory-listing/scripts/probe_directory_listing.py +180 -0
- package/skills/detecting-eval-exec-usage/SKILL.md +128 -0
- package/skills/detecting-eval-exec-usage/references/PLAYBOOK.md +306 -0
- package/skills/detecting-eval-exec-usage/references/THEORY.md +159 -0
- package/skills/detecting-eval-exec-usage/scripts/scan_eval.py +223 -0
- package/skills/detecting-exposed-secrets-files/SKILL.md +179 -0
- package/skills/detecting-exposed-secrets-files/references/PLAYBOOK.md +274 -0
- package/skills/detecting-exposed-secrets-files/references/THEORY.md +174 -0
- package/skills/detecting-exposed-secrets-files/scripts/probe_secrets.py +207 -0
- package/skills/detecting-insecure-deserialization/SKILL.md +148 -0
- package/skills/detecting-insecure-deserialization/references/PLAYBOOK.md +333 -0
- package/skills/detecting-insecure-deserialization/references/THEORY.md +199 -0
- package/skills/detecting-insecure-deserialization/scripts/scan_deserialization.py +250 -0
- package/skills/detecting-sql-injection-patterns/SKILL.md +161 -0
- package/skills/detecting-sql-injection-patterns/references/PLAYBOOK.md +317 -0
- package/skills/detecting-sql-injection-patterns/references/THEORY.md +261 -0
- package/skills/detecting-sql-injection-patterns/scripts/scan_sqli.py +354 -0
- package/skills/detecting-ssl-cert-issues/SKILL.md +182 -0
- package/skills/detecting-ssl-cert-issues/references/PLAYBOOK.md +203 -0
- package/skills/detecting-ssl-cert-issues/references/THEORY.md +133 -0
- package/skills/detecting-ssl-cert-issues/scripts/check_cert_chain.py +481 -0
- package/skills/detecting-weak-cryptography/SKILL.md +147 -0
- package/skills/detecting-weak-cryptography/references/PLAYBOOK.md +466 -0
- package/skills/detecting-weak-cryptography/references/THEORY.md +194 -0
- package/skills/detecting-weak-cryptography/scripts/scan_weak_crypto.py +417 -0
- package/skills/fingerprinting-server-software/SKILL.md +191 -0
- package/skills/fingerprinting-server-software/references/PLAYBOOK.md +337 -0
- package/skills/fingerprinting-server-software/references/THEORY.md +183 -0
- package/skills/fingerprinting-server-software/scripts/fingerprint_server.py +347 -0
- package/skills/generating-executive-summary/SKILL.md +261 -0
- package/skills/generating-executive-summary/references/PLAYBOOK.md +201 -0
- package/skills/generating-executive-summary/references/THEORY.md +195 -0
- package/skills/generating-executive-summary/scripts/exec_summary.py +538 -0
- package/skills/mapping-findings-to-owasp-top10/SKILL.md +235 -0
- package/skills/mapping-findings-to-owasp-top10/references/PLAYBOOK.md +193 -0
- package/skills/mapping-findings-to-owasp-top10/references/THEORY.md +160 -0
- package/skills/mapping-findings-to-owasp-top10/scripts/map_owasp.py +540 -0
- package/skills/performing-penetration-testing/SKILL.md +282 -190
- package/skills/performing-penetration-testing/references/OWASP_TOP_10.md +22 -0
- package/skills/performing-penetration-testing/references/REMEDIATION_PLAYBOOK.md +46 -0
- package/skills/performing-penetration-testing/references/SECURITY_HEADERS.md +41 -0
- package/skills/performing-penetration-testing/scripts/code_security_scanner.py +144 -79
- package/skills/performing-penetration-testing/scripts/dependency_auditor.py +116 -93
- package/skills/performing-penetration-testing/scripts/security_scanner.py +574 -446
- package/skills/probing-dangerous-http-methods/SKILL.md +182 -0
- package/skills/probing-dangerous-http-methods/references/PLAYBOOK.md +234 -0
- package/skills/probing-dangerous-http-methods/references/THEORY.md +145 -0
- package/skills/probing-dangerous-http-methods/scripts/probe_methods.py +263 -0
- package/skills/recording-pentest-engagement/SKILL.md +253 -0
- package/skills/recording-pentest-engagement/references/PLAYBOOK.md +203 -0
- package/skills/recording-pentest-engagement/references/THEORY.md +195 -0
- package/skills/recording-pentest-engagement/scripts/record_engagement.py +461 -0
- package/skills/scanning-for-hardcoded-secrets/SKILL.md +215 -0
- package/skills/scanning-for-hardcoded-secrets/references/PLAYBOOK.md +325 -0
- package/skills/scanning-for-hardcoded-secrets/references/THEORY.md +175 -0
- package/skills/scanning-for-hardcoded-secrets/scripts/scan_secrets.py +395 -0
- package/skills/tracing-transitive-vulnerabilities/SKILL.md +235 -0
- package/skills/tracing-transitive-vulnerabilities/references/PLAYBOOK.md +233 -0
- package/skills/tracing-transitive-vulnerabilities/references/THEORY.md +138 -0
- package/skills/tracing-transitive-vulnerabilities/scripts/trace_vulns.py +484 -0
|
@@ -11,11 +11,13 @@ recommended values, and implementation across common frameworks.
|
|
|
11
11
|
resources the browser is allowed to load.
|
|
12
12
|
|
|
13
13
|
**Recommended value:**
|
|
14
|
+
|
|
14
15
|
```
|
|
15
16
|
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'; connect-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'
|
|
16
17
|
```
|
|
17
18
|
|
|
18
19
|
**What security_scanner.py checks:**
|
|
20
|
+
|
|
19
21
|
- Header is present
|
|
20
22
|
- `default-src` directive exists
|
|
21
23
|
- No `unsafe-eval` in `script-src`
|
|
@@ -24,6 +26,7 @@ Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'
|
|
|
24
26
|
**Implementation:**
|
|
25
27
|
|
|
26
28
|
Express.js:
|
|
29
|
+
|
|
27
30
|
```javascript
|
|
28
31
|
const helmet = require("helmet");
|
|
29
32
|
app.use(helmet.contentSecurityPolicy({
|
|
@@ -38,6 +41,7 @@ app.use(helmet.contentSecurityPolicy({
|
|
|
38
41
|
```
|
|
39
42
|
|
|
40
43
|
Django:
|
|
44
|
+
|
|
41
45
|
```python
|
|
42
46
|
# settings.py
|
|
43
47
|
CSP_DEFAULT_SRC = ("'self'",)
|
|
@@ -48,11 +52,13 @@ CSP_FRAME_ANCESTORS = ("'none'",)
|
|
|
48
52
|
```
|
|
49
53
|
|
|
50
54
|
Nginx:
|
|
55
|
+
|
|
51
56
|
```nginx
|
|
52
57
|
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; frame-ancestors 'none';" always;
|
|
53
58
|
```
|
|
54
59
|
|
|
55
60
|
Apache:
|
|
61
|
+
|
|
56
62
|
```apache
|
|
57
63
|
Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; frame-ancestors 'none';"
|
|
58
64
|
```
|
|
@@ -65,11 +71,13 @@ Header always set Content-Security-Policy "default-src 'self'; script-src 'self'
|
|
|
65
71
|
preventing protocol downgrade attacks and cookie hijacking.
|
|
66
72
|
|
|
67
73
|
**Recommended value:**
|
|
74
|
+
|
|
68
75
|
```
|
|
69
76
|
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
|
|
70
77
|
```
|
|
71
78
|
|
|
72
79
|
**What security_scanner.py checks:**
|
|
80
|
+
|
|
73
81
|
- Header is present (critical if site supports HTTPS)
|
|
74
82
|
- `max-age` >= 31536000 (1 year)
|
|
75
83
|
- `includeSubDomains` directive present
|
|
@@ -78,6 +86,7 @@ Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
|
|
|
78
86
|
**Implementation:**
|
|
79
87
|
|
|
80
88
|
Express.js:
|
|
89
|
+
|
|
81
90
|
```javascript
|
|
82
91
|
app.use(helmet.hsts({
|
|
83
92
|
maxAge: 31536000,
|
|
@@ -87,6 +96,7 @@ app.use(helmet.hsts({
|
|
|
87
96
|
```
|
|
88
97
|
|
|
89
98
|
Django:
|
|
99
|
+
|
|
90
100
|
```python
|
|
91
101
|
# settings.py
|
|
92
102
|
SECURE_HSTS_SECONDS = 31536000
|
|
@@ -95,11 +105,13 @@ SECURE_HSTS_PRELOAD = True
|
|
|
95
105
|
```
|
|
96
106
|
|
|
97
107
|
Nginx:
|
|
108
|
+
|
|
98
109
|
```nginx
|
|
99
110
|
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
|
|
100
111
|
```
|
|
101
112
|
|
|
102
113
|
Apache:
|
|
114
|
+
|
|
103
115
|
```apache
|
|
104
116
|
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
|
|
105
117
|
```
|
|
@@ -112,29 +124,35 @@ Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains
|
|
|
112
124
|
in a frame, iframe, embed, or object.
|
|
113
125
|
|
|
114
126
|
**Recommended value:**
|
|
127
|
+
|
|
115
128
|
```
|
|
116
129
|
X-Frame-Options: DENY
|
|
117
130
|
```
|
|
131
|
+
|
|
118
132
|
Or `SAMEORIGIN` if framing by same-origin pages is needed.
|
|
119
133
|
|
|
120
134
|
**What security_scanner.py checks:**
|
|
135
|
+
|
|
121
136
|
- Header is present
|
|
122
137
|
- Value is DENY or SAMEORIGIN (not ALLOW-FROM, which is deprecated)
|
|
123
138
|
|
|
124
139
|
**Implementation:**
|
|
125
140
|
|
|
126
141
|
Express.js:
|
|
142
|
+
|
|
127
143
|
```javascript
|
|
128
144
|
app.use(helmet.frameguard({ action: "deny" }));
|
|
129
145
|
```
|
|
130
146
|
|
|
131
147
|
Django:
|
|
148
|
+
|
|
132
149
|
```python
|
|
133
150
|
# settings.py (default in Django 3+)
|
|
134
151
|
X_FRAME_OPTIONS = "DENY"
|
|
135
152
|
```
|
|
136
153
|
|
|
137
154
|
Nginx:
|
|
155
|
+
|
|
138
156
|
```nginx
|
|
139
157
|
add_header X-Frame-Options "DENY" always;
|
|
140
158
|
```
|
|
@@ -147,28 +165,33 @@ add_header X-Frame-Options "DENY" always;
|
|
|
147
165
|
interpret files as a different content type than declared.
|
|
148
166
|
|
|
149
167
|
**Recommended value:**
|
|
168
|
+
|
|
150
169
|
```
|
|
151
170
|
X-Content-Type-Options: nosniff
|
|
152
171
|
```
|
|
153
172
|
|
|
154
173
|
**What security_scanner.py checks:**
|
|
174
|
+
|
|
155
175
|
- Header is present
|
|
156
176
|
- Value is exactly `nosniff`
|
|
157
177
|
|
|
158
178
|
**Implementation:**
|
|
159
179
|
|
|
160
180
|
Express.js:
|
|
181
|
+
|
|
161
182
|
```javascript
|
|
162
183
|
app.use(helmet.noSniff());
|
|
163
184
|
```
|
|
164
185
|
|
|
165
186
|
Django:
|
|
187
|
+
|
|
166
188
|
```python
|
|
167
189
|
# Enabled by default via SecurityMiddleware
|
|
168
190
|
SECURE_CONTENT_TYPE_NOSNIFF = True
|
|
169
191
|
```
|
|
170
192
|
|
|
171
193
|
Nginx:
|
|
194
|
+
|
|
172
195
|
```nginx
|
|
173
196
|
add_header X-Content-Type-Options "nosniff" always;
|
|
174
197
|
```
|
|
@@ -181,12 +204,15 @@ add_header X-Content-Type-Options "nosniff" always;
|
|
|
181
204
|
preventing leakage of sensitive URLs to third parties.
|
|
182
205
|
|
|
183
206
|
**Recommended values:**
|
|
207
|
+
|
|
184
208
|
```
|
|
185
209
|
Referrer-Policy: strict-origin-when-cross-origin
|
|
186
210
|
```
|
|
211
|
+
|
|
187
212
|
Or `no-referrer` for maximum privacy.
|
|
188
213
|
|
|
189
214
|
**What security_scanner.py checks:**
|
|
215
|
+
|
|
190
216
|
- Header is present
|
|
191
217
|
- Value is not `unsafe-url` (leaks full URL including path and query)
|
|
192
218
|
- Value is not empty
|
|
@@ -194,16 +220,19 @@ Or `no-referrer` for maximum privacy.
|
|
|
194
220
|
**Implementation:**
|
|
195
221
|
|
|
196
222
|
Express.js:
|
|
223
|
+
|
|
197
224
|
```javascript
|
|
198
225
|
app.use(helmet.referrerPolicy({ policy: "strict-origin-when-cross-origin" }));
|
|
199
226
|
```
|
|
200
227
|
|
|
201
228
|
Django:
|
|
229
|
+
|
|
202
230
|
```python
|
|
203
231
|
SECURE_REFERRER_POLICY = "strict-origin-when-cross-origin"
|
|
204
232
|
```
|
|
205
233
|
|
|
206
234
|
Nginx:
|
|
235
|
+
|
|
207
236
|
```nginx
|
|
208
237
|
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
|
|
209
238
|
```
|
|
@@ -216,17 +245,20 @@ add_header Referrer-Policy "strict-origin-when-cross-origin" always;
|
|
|
216
245
|
its iframes (camera, microphone, geolocation, etc.).
|
|
217
246
|
|
|
218
247
|
**Recommended value:**
|
|
248
|
+
|
|
219
249
|
```
|
|
220
250
|
Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=()
|
|
221
251
|
```
|
|
222
252
|
|
|
223
253
|
**What security_scanner.py checks:**
|
|
254
|
+
|
|
224
255
|
- Header is present
|
|
225
256
|
- Notes which features are restricted
|
|
226
257
|
|
|
227
258
|
**Implementation:**
|
|
228
259
|
|
|
229
260
|
Express.js:
|
|
261
|
+
|
|
230
262
|
```javascript
|
|
231
263
|
app.use(helmet.permittedCrossDomainPolicies());
|
|
232
264
|
// Or manually:
|
|
@@ -238,6 +270,7 @@ app.use((req, res, next) => {
|
|
|
238
270
|
```
|
|
239
271
|
|
|
240
272
|
Nginx:
|
|
273
|
+
|
|
241
274
|
```nginx
|
|
242
275
|
add_header Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=()" always;
|
|
243
276
|
```
|
|
@@ -251,13 +284,16 @@ Deprecated in modern browsers in favor of CSP. Can cause issues if set to
|
|
|
251
284
|
`1; mode=block` on some older browsers.
|
|
252
285
|
|
|
253
286
|
**Recommended value:**
|
|
287
|
+
|
|
254
288
|
```
|
|
255
289
|
X-XSS-Protection: 0
|
|
256
290
|
```
|
|
291
|
+
|
|
257
292
|
Set to 0 (disabled) since the browser feature is deprecated and CSP is the
|
|
258
293
|
proper replacement.
|
|
259
294
|
|
|
260
295
|
**What security_scanner.py checks:**
|
|
296
|
+
|
|
261
297
|
- Notes if present
|
|
262
298
|
- Info-level finding (not a vulnerability)
|
|
263
299
|
|
|
@@ -269,6 +305,7 @@ proper replacement.
|
|
|
269
305
|
unauthorized users.
|
|
270
306
|
|
|
271
307
|
**Recommended value for sensitive pages:**
|
|
308
|
+
|
|
272
309
|
```
|
|
273
310
|
Cache-Control: no-store, no-cache, must-revalidate, private
|
|
274
311
|
```
|
|
@@ -276,6 +313,7 @@ Cache-Control: no-store, no-cache, must-revalidate, private
|
|
|
276
313
|
**Implementation:**
|
|
277
314
|
|
|
278
315
|
Express.js:
|
|
316
|
+
|
|
279
317
|
```javascript
|
|
280
318
|
app.use("/api/private", (req, res, next) => {
|
|
281
319
|
res.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, private");
|
|
@@ -284,6 +322,7 @@ app.use("/api/private", (req, res, next) => {
|
|
|
284
322
|
```
|
|
285
323
|
|
|
286
324
|
Django:
|
|
325
|
+
|
|
287
326
|
```python
|
|
288
327
|
from django.views.decorators.cache import never_cache
|
|
289
328
|
|
|
@@ -309,6 +348,7 @@ X-XSS-Protection: 0
|
|
|
309
348
|
```
|
|
310
349
|
|
|
311
350
|
### Nginx complete block:
|
|
351
|
+
|
|
312
352
|
```nginx
|
|
313
353
|
# Security Headers
|
|
314
354
|
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; frame-ancestors 'none'" always;
|
|
@@ -324,6 +364,7 @@ server_tokens off;
|
|
|
324
364
|
```
|
|
325
365
|
|
|
326
366
|
### Apache complete block:
|
|
367
|
+
|
|
327
368
|
```apache
|
|
328
369
|
# Security Headers
|
|
329
370
|
Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; frame-ancestors 'none'"
|