blitzstrike 2.4.75 → 2.4.77
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 +23 -0
- package/dist/index.js +29 -5
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,29 @@ 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.77] — 2026-09-17
|
|
9
|
+
|
|
10
|
+
### Changed — SQLi Node/Python coverage + missing_authz root-path precision
|
|
11
|
+
|
|
12
|
+
- `detectSqlInjection` now matches Node/Python sinks (`pool.query`, `client.query`,
|
|
13
|
+
`connection.query`, `db.query`, `pg.query`, `sequelize.query`, `knex.raw`,
|
|
14
|
+
`sqlx::query(&format!`, `cursor.execute` / `.execute`) and recognizes Node
|
|
15
|
+
template-literal `${var}`, Python f-string `{var}`, and JS `+ var` interpolation
|
|
16
|
+
as string-built queries (cross-file case).
|
|
17
|
+
- `detectRouteAuthz` now skips root/empty paths (`@app.get("/")`) as public-by-design
|
|
18
|
+
(was flagging the index route), plus `home`/`index`/`root` route segments.
|
|
19
|
+
|
|
20
|
+
## [2.4.76] — 2026-09-17
|
|
21
|
+
|
|
22
|
+
### Fixed — config/manifest files were not scanned (whole-class FN)
|
|
23
|
+
|
|
24
|
+
- `iterSourceFiles` only walked code extensions (php/py/js/ts/...), so the
|
|
25
|
+
detectors never saw nginx configs, manifests, or other-language sources.
|
|
26
|
+
Added `.conf/.config/.nginx`, `.json/.yaml/.yml/.toml/.xml/.properties/.gradle/.proto`,
|
|
27
|
+
`.env/.txt`, and `.rb/.go/.rs/.cs/.c/.h/.cpp/.cc/.hpp/.sh/.bash`. This unblocks
|
|
28
|
+
`cache_deception` (nginx.conf — caught labs01) and `dependency_confusion` /
|
|
29
|
+
`oauth_misconfig` / `grpc_reflection` (package.json / requirements.txt / yaml).
|
|
30
|
+
|
|
8
31
|
## [2.4.75] — 2026-09-17
|
|
9
32
|
|
|
10
33
|
### Fixed — detection FP/FN remediation (Hackbot Arena benchmark-driven)
|
package/dist/index.js
CHANGED
|
@@ -7280,7 +7280,31 @@ var init_scanner = __esm(() => {
|
|
|
7280
7280
|
".mjs",
|
|
7281
7281
|
".cjs",
|
|
7282
7282
|
".ts",
|
|
7283
|
-
".tsx"
|
|
7283
|
+
".tsx",
|
|
7284
|
+
".rb",
|
|
7285
|
+
".go",
|
|
7286
|
+
".rs",
|
|
7287
|
+
".cs",
|
|
7288
|
+
".c",
|
|
7289
|
+
".h",
|
|
7290
|
+
".cpp",
|
|
7291
|
+
".cc",
|
|
7292
|
+
".hpp",
|
|
7293
|
+
".sh",
|
|
7294
|
+
".bash",
|
|
7295
|
+
".conf",
|
|
7296
|
+
".config",
|
|
7297
|
+
".nginx",
|
|
7298
|
+
".json",
|
|
7299
|
+
".yaml",
|
|
7300
|
+
".yml",
|
|
7301
|
+
".toml",
|
|
7302
|
+
".xml",
|
|
7303
|
+
".properties",
|
|
7304
|
+
".gradle",
|
|
7305
|
+
".proto",
|
|
7306
|
+
".env",
|
|
7307
|
+
".txt"
|
|
7284
7308
|
]);
|
|
7285
7309
|
SKIP_PARTS = new Set(["vendor", "node_modules", ".git", "tests", "test"]);
|
|
7286
7310
|
LIB_PARTS = new Set([
|
|
@@ -16074,7 +16098,7 @@ var init_framework_security = __esm(() => {
|
|
|
16074
16098
|
{ framework: "aspnet", entry: /\[Http(?:Get|Post|Put|Delete|Patch)\b/g, auth: /\[Authorize|User\.Identity|IsInRole|AuthorizeAsync|\[AllowAnonymous|IAuthorizationService/, window: 2 },
|
|
16075
16099
|
{ framework: "rails", entry: /class\s+\w+\s*<\s*ApplicationController/g, auth: /before_action\s+:authenticate|before_action\s+:authorize|authenticate_user!|authorize\s+|current_user|authenticate/, window: 6 }
|
|
16076
16100
|
];
|
|
16077
|
-
PUBLIC_ROUTE_RE = /['"`]\/?(?:(?:api|v1|v2|o|auth|adminapi)\/)?(?:register|login|logout|signup|signin|forgot-password|reset-password|health|healthz|ready|status|version|ping|static|public|assets|css|js|img|favicon|echo|config|docs|openapi|swagger|robots|sitemap|graphql|graphiql|query|upload|callback|webhook)[/'"?]|['"`]\/?['"`]
|
|
16101
|
+
PUBLIC_ROUTE_RE = /['"`]\/?(?:(?:api|v1|v2|o|auth|adminapi)\/)?(?:register|login|logout|signup|signin|forgot-password|reset-password|health|healthz|ready|status|version|ping|static|public|assets|css|js|img|favicon|echo|config|docs|openapi|swagger|robots|sitemap|graphql|graphiql|query|upload|callback|webhook|home|index|root)[/'"?]|['"`]\/?['"`](?!["'`])/i;
|
|
16078
16102
|
});
|
|
16079
16103
|
|
|
16080
16104
|
// src/complex-bugs.ts
|
|
@@ -16519,7 +16543,7 @@ function detectUnrestrictedUpload(code, file, out) {
|
|
|
16519
16543
|
}
|
|
16520
16544
|
function detectSqlInjection(code, file, out) {
|
|
16521
16545
|
const ls = lines2(code);
|
|
16522
|
-
const sinkRe = /\$wpdb->(get_results|get_col|get_var|get_row|query)\s*\(
|
|
16546
|
+
const sinkRe = /\$wpdb->(get_results|get_col|get_var|get_row|query)\s*\(|[->.]query\s*\(|[->.]execute\s*\(|mysqli_query\s*\(|pg_query\s*\(|DB::unprepared\s*\(|[->.]whereRaw\s*\(|[->.]selectRaw\s*\(|sqlx::query(?:_as)?\s*\(\s*&\s*format!|sequelize\.query\s*\(|knex\.raw\s*\(|\bpool\.query\s*\(|\bclient\.query\s*\(|\bconnection\.query\s*\(|\bdb\.query\s*\(|\bpg\.query\s*\(/g;
|
|
16523
16547
|
let m;
|
|
16524
16548
|
while ((m = sinkRe.exec(code)) !== null) {
|
|
16525
16549
|
const ln = lineNo2(code, m.index);
|
|
@@ -16530,8 +16554,8 @@ function detectSqlInjection(code, file, out) {
|
|
|
16530
16554
|
continue;
|
|
16531
16555
|
if (SOURCE_TOKENS3.test(scope))
|
|
16532
16556
|
continue;
|
|
16533
|
-
const inlineConcat = /(\.\s*\$[A-Za-z_]\w*|\+\s*[A-Za-z_$]\w*)/.test(l);
|
|
16534
|
-
const assignConcat = /(?:^|\n)\s*\$[A-Za-z_]\w*\s*(?:\.=|=)\s*[^;\n]*["'][^"']*["']\s*\.\s*\$[A-Za-z_]\w*/.test(scope);
|
|
16557
|
+
const inlineConcat = /(\.\s*\$[A-Za-z_]\w*|\+\s*[A-Za-z_$]\w*|\$\{[^}]+\}|<<\s*[A-Za-z_$]|\{[A-Za-z_]\w*\})/.test(l);
|
|
16558
|
+
const assignConcat = /(?:^|\n)\s*\$[A-Za-z_]\w*\s*(?:\.=|=)\s*[^;\n]*["'][^"']*["']\s*\.\s*\$[A-Za-z_]\w*/.test(scope) || /(?:^|\n)\s*(?:const|let|var)\s+[A-Za-z_$]\w*\s*=\s*`[^`]*\$\{[^}]+\}[^`]*`/.test(scope) || /(?:^|\n)\s*[A-Za-z_]\w*\s*=\s*f["']/.test(scope);
|
|
16535
16559
|
if (!inlineConcat && !assignConcat)
|
|
16536
16560
|
continue;
|
|
16537
16561
|
out.push({
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "blitzstrike",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.77",
|
|
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": {
|