blitzstrike 2.4.48 → 2.4.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/dist/index.js +16 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,19 @@ All notable changes to Blitz Strike are documented here.
|
|
|
5
5
|
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
7
7
|
|
|
8
|
+
## [2.4.49] — 2026-09-14
|
|
9
|
+
|
|
10
|
+
### Changed — REST permission_callback precision (traced to WP_REST_Server)
|
|
11
|
+
|
|
12
|
+
- Traced WP core `class-wp-rest-server.php` dispatch: `permission_callback` is
|
|
13
|
+
OPTIONAL and defaults to PUBLIC when absent. Now distinguishes three cases:
|
|
14
|
+
missing (HIGH — forgot, defaults public), `__return_true` (MEDIUM — explicitly
|
|
15
|
+
public, the classic "commented out check_admin_permission" pattern), and a
|
|
16
|
+
real callback (skip — function/method/current_user_can).
|
|
17
|
+
- Sanitizer table widened to the full `formatting.php` surface: `esc_textarea`,
|
|
18
|
+
`esc_js`, `sanitize_url`, `sanitize_title`, `sanitize_title_with_dashes`,
|
|
19
|
+
`sanitize_user`, `wp_validate_boolean`.
|
|
20
|
+
|
|
8
21
|
## [2.4.48] — 2026-09-14
|
|
9
22
|
|
|
10
23
|
### Changed — Precision + consistency (traced to WP core dispatch)
|
package/dist/index.js
CHANGED
|
@@ -56202,6 +56202,8 @@ var SANITIZERS2 = {
|
|
|
56202
56202
|
esc_attr: { context: "html_attr", level: "sanitized" },
|
|
56203
56203
|
esc_url: { context: "url", level: "sanitized" },
|
|
56204
56204
|
esc_url_raw: { context: "url", level: "sanitized" },
|
|
56205
|
+
esc_textarea: { context: "html", level: "sanitized" },
|
|
56206
|
+
esc_js: { context: "js", level: "sanitized" },
|
|
56205
56207
|
urlencode: { context: "url", level: "sanitized" },
|
|
56206
56208
|
rawurlencode: { context: "url", level: "sanitized" },
|
|
56207
56209
|
wp_json_encode: { context: "json", level: "sanitized" },
|
|
@@ -56211,7 +56213,12 @@ var SANITIZERS2 = {
|
|
|
56211
56213
|
sanitize_key: { context: "key", level: "validated" },
|
|
56212
56214
|
sanitize_email: { context: "email", level: "validated" },
|
|
56213
56215
|
sanitize_file_name: { context: "filename", level: "validated" },
|
|
56214
|
-
|
|
56216
|
+
sanitize_url: { context: "url", level: "validated" },
|
|
56217
|
+
sanitize_title: { context: "slug", level: "validated" },
|
|
56218
|
+
sanitize_title_with_dashes: { context: "slug", level: "validated" },
|
|
56219
|
+
sanitize_user: { context: "username", level: "validated" },
|
|
56220
|
+
filter_var: { context: "validated", level: "validated" },
|
|
56221
|
+
wp_validate_boolean: { context: "validated", level: "validated" }
|
|
56215
56222
|
};
|
|
56216
56223
|
var PSEUDO_SANITIZERS = new Set([
|
|
56217
56224
|
"trim",
|
|
@@ -56529,8 +56536,14 @@ function detectWpAuthz(code, file, out) {
|
|
|
56529
56536
|
while ((m = restRe.exec(code)) !== null) {
|
|
56530
56537
|
const line = lineNoOf(code, m.index);
|
|
56531
56538
|
const window2 = code.slice(m.index, m.index + 800);
|
|
56532
|
-
|
|
56539
|
+
const pc = window2.match(/permission_callback['"]?\s*=>\s*(.+?)(?:,|\s*\n|\])/);
|
|
56540
|
+
if (pc) {
|
|
56541
|
+
const expr = pc[1].trim();
|
|
56542
|
+
if (/__return_true/.test(expr)) {
|
|
56543
|
+
out.push({ file, line, type: "missing_authz", category: "REST route explicitly public (__return_true)", severity: "medium", evidence: `register_rest_route('${m[1]}', '${m[2]}')`, detail: `REST route '${m[1]}${m[2]}' sets permission_callback to __return_true (always allow) — verify the endpoint does not expose sensitive data or perform privileged actions.` });
|
|
56544
|
+
}
|
|
56533
56545
|
continue;
|
|
56546
|
+
}
|
|
56534
56547
|
out.push({ file, line, type: "missing_authz", category: "REST route missing permission_callback", severity: "high", evidence: `register_rest_route('${m[1]}', '${m[2]}')`, detail: `REST route '${m[1]}${m[2]}' has no permission_callback — the endpoint defaults to public (auth bypass).` });
|
|
56535
56548
|
}
|
|
56536
56549
|
const formRe = /add_action\s*\(\s*['"](init|admin_init|wp_loaded|template_redirect|parse_request|wp)['"]\s*,\s*(.+?)\s*\)/g;
|
|
@@ -57953,7 +57966,7 @@ var ENTERPRISE_FIXTURES = [
|
|
|
57953
57966
|
{ id: "js-express", dir: join18(ROOT6, "js-express"), expected_vulns: 2 },
|
|
57954
57967
|
{ id: "py-django", dir: join18(ROOT6, "py-django"), expected_vulns: 2 },
|
|
57955
57968
|
{ id: "java-spring", dir: join18(ROOT6, "java-spring"), expected_vulns: 2 },
|
|
57956
|
-
{ id: "wp-batch-route", dir: join18(ROOT6, "wp-batch-route"), expected_vulns:
|
|
57969
|
+
{ id: "wp-batch-route", dir: join18(ROOT6, "wp-batch-route"), expected_vulns: 3 },
|
|
57957
57970
|
{ id: "php-complex", dir: join18(ROOT6, "php-complex"), expected_vulns: 4 }
|
|
57958
57971
|
];
|
|
57959
57972
|
function sourceFiles(root) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "blitzstrike",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.49",
|
|
4
4
|
"description": "Blitz Strike — a universal MCP security-audit toolbelt. BLITZ sweeps the attack surface, EAGLE-EYE traces source-to-sink, STRIKE verifies live. 57 attack chains, 130-tool catalog, intelligence data layer. One server, every agent.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|