bla-agents 1.1.0 → 1.5.3
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/.agents/skills/blind-llm-agents/SKILL.md +20 -14
- package/DISCLAIMER.md +15 -7
- package/README.md +153 -198
- package/dist/bundler/index.d.ts +19 -2
- package/dist/bundler/index.d.ts.map +1 -1
- package/dist/bundler/index.js +47 -4
- package/dist/bundler/index.js.map +1 -1
- package/dist/cli.d.ts +5 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +123 -18
- package/dist/cli.js.map +1 -1
- package/dist/core/config.d.ts +54 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +160 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/coverage-contract.d.ts +97 -0
- package/dist/core/coverage-contract.d.ts.map +1 -0
- package/dist/core/coverage-contract.js +164 -0
- package/dist/core/coverage-contract.js.map +1 -0
- package/dist/core/debug-posture.d.ts +40 -0
- package/dist/core/debug-posture.d.ts.map +1 -0
- package/dist/core/debug-posture.js +197 -0
- package/dist/core/debug-posture.js.map +1 -0
- package/dist/core/detector.d.ts.map +1 -1
- package/dist/core/detector.js +58 -6
- package/dist/core/detector.js.map +1 -1
- package/dist/core/identifiers.d.ts +32 -0
- package/dist/core/identifiers.d.ts.map +1 -0
- package/dist/core/identifiers.js +263 -0
- package/dist/core/identifiers.js.map +1 -0
- package/dist/core/llm-directives.d.ts +12 -0
- package/dist/core/llm-directives.d.ts.map +1 -0
- package/dist/core/llm-directives.js +23 -0
- package/dist/core/llm-directives.js.map +1 -0
- package/dist/core/prng.d.ts +10 -1
- package/dist/core/prng.d.ts.map +1 -1
- package/dist/core/prng.js +27 -2
- package/dist/core/prng.js.map +1 -1
- package/dist/core/release-plan.d.ts +68 -0
- package/dist/core/release-plan.d.ts.map +1 -0
- package/dist/core/release-plan.js +235 -0
- package/dist/core/release-plan.js.map +1 -0
- package/dist/core/sarif.d.ts +53 -0
- package/dist/core/sarif.d.ts.map +1 -0
- package/dist/core/sarif.js +91 -0
- package/dist/core/sarif.js.map +1 -0
- package/dist/core/sqlite-runtime.d.ts +13 -0
- package/dist/core/sqlite-runtime.d.ts.map +1 -1
- package/dist/core/sqlite-runtime.js +38 -8
- package/dist/core/sqlite-runtime.js.map +1 -1
- package/dist/core/types.d.ts +7 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/engine/auditor.d.ts.map +1 -1
- package/dist/engine/auditor.js +251 -8
- package/dist/engine/auditor.js.map +1 -1
- package/dist/engine/benchmark.d.ts +1 -1
- package/dist/engine/benchmark.d.ts.map +1 -1
- package/dist/engine/benchmark.js +121 -41
- package/dist/engine/benchmark.js.map +1 -1
- package/dist/engine/defender.d.ts +1 -0
- package/dist/engine/defender.d.ts.map +1 -1
- package/dist/engine/defender.js +7 -1
- package/dist/engine/defender.js.map +1 -1
- package/dist/engine/harden.d.ts +61 -0
- package/dist/engine/harden.d.ts.map +1 -0
- package/dist/engine/harden.js +292 -0
- package/dist/engine/harden.js.map +1 -0
- package/dist/engine/protector.d.ts.map +1 -1
- package/dist/engine/protector.js +162 -21
- package/dist/engine/protector.js.map +1 -1
- package/dist/identity.d.ts +112 -2
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +112 -2
- package/dist/identity.js.map +1 -1
- package/dist/index.d.ts +26 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -9
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts +59 -152
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +466 -50
- package/dist/mcp/server.js.map +1 -1
- package/dist/setup/clients.d.ts +49 -1
- package/dist/setup/clients.d.ts.map +1 -1
- package/dist/setup/clients.js +1193 -20
- package/dist/setup/clients.js.map +1 -1
- package/dist/setup/doctor.d.ts +58 -14
- package/dist/setup/doctor.d.ts.map +1 -1
- package/dist/setup/doctor.js +316 -22
- package/dist/setup/doctor.js.map +1 -1
- package/dist/setup/setup.d.ts +77 -7
- package/dist/setup/setup.d.ts.map +1 -1
- package/dist/setup/setup.js +591 -62
- package/dist/setup/setup.js.map +1 -1
- package/dist/shields/chaff/chaff-generator.d.ts.map +1 -1
- package/dist/shields/chaff/chaff-generator.js +12 -3
- package/dist/shields/chaff/chaff-generator.js.map +1 -1
- package/dist/shields/deception/architecture-mirage.js +1 -1
- package/dist/shields/deception/architecture-mirage.js.map +1 -1
- package/dist/shields/deception/canary-honeypot.d.ts +33 -0
- package/dist/shields/deception/canary-honeypot.d.ts.map +1 -0
- package/dist/shields/deception/canary-honeypot.js +95 -0
- package/dist/shields/deception/canary-honeypot.js.map +1 -0
- package/dist/shields/deception/cognitive-armor-trigger.d.ts +43 -0
- package/dist/shields/deception/cognitive-armor-trigger.d.ts.map +1 -0
- package/dist/shields/deception/cognitive-armor-trigger.js +204 -0
- package/dist/shields/deception/cognitive-armor-trigger.js.map +1 -0
- package/dist/shields/deception/crash-trace-decoy.js +1 -1
- package/dist/shields/deception/crash-trace-decoy.js.map +1 -1
- package/dist/shields/deception/decompiler-illusion.js +1 -1
- package/dist/shields/deception/decompiler-illusion.js.map +1 -1
- package/dist/shields/deception/diff-noise-injector.js +1 -1
- package/dist/shields/deception/diff-noise-injector.js.map +1 -1
- package/dist/shields/deception/evidence-contract-poison.js +1 -1
- package/dist/shields/deception/evidence-contract-poison.js.map +1 -1
- package/dist/shields/deception/format-payloads.d.ts +21 -0
- package/dist/shields/deception/format-payloads.d.ts.map +1 -0
- package/dist/shields/deception/format-payloads.js +24 -0
- package/dist/shields/deception/format-payloads.js.map +1 -0
- package/dist/shields/deception/index.d.ts +10 -2
- package/dist/shields/deception/index.d.ts.map +1 -1
- package/dist/shields/deception/index.js +20 -3
- package/dist/shields/deception/index.js.map +1 -1
- package/dist/shields/deception/prompt-completion-poison.d.ts +3 -2
- package/dist/shields/deception/prompt-completion-poison.d.ts.map +1 -1
- package/dist/shields/deception/prompt-completion-poison.js +6 -3
- package/dist/shields/deception/prompt-completion-poison.js.map +1 -1
- package/dist/shields/deception/shadow-business-logic.js +4 -4
- package/dist/shields/deception/shadow-business-logic.js.map +1 -1
- package/dist/shields/deception/system-diagnostic-decoy.d.ts +36 -0
- package/dist/shields/deception/system-diagnostic-decoy.d.ts.map +1 -0
- package/dist/shields/deception/system-diagnostic-decoy.js +101 -0
- package/dist/shields/deception/system-diagnostic-decoy.js.map +1 -0
- package/dist/shields/exhaustion/asar-header-amplifier.d.ts +12 -3
- package/dist/shields/exhaustion/asar-header-amplifier.d.ts.map +1 -1
- package/dist/shields/exhaustion/asar-header-amplifier.js +30 -8
- package/dist/shields/exhaustion/asar-header-amplifier.js.map +1 -1
- package/dist/shields/exhaustion/bpe-token-amplifier.js +2 -2
- package/dist/shields/exhaustion/bpe-token-amplifier.js.map +1 -1
- package/dist/shields/exhaustion/callgraph-labyrinth.js +2 -2
- package/dist/shields/exhaustion/callgraph-labyrinth.js.map +1 -1
- package/dist/shields/exhaustion/cdp-shape-budget-breaker.js +1 -1
- package/dist/shields/exhaustion/cdp-shape-budget-breaker.js.map +1 -1
- package/dist/shields/exhaustion/frida-capture-saturation.d.ts +10 -5
- package/dist/shields/exhaustion/frida-capture-saturation.d.ts.map +1 -1
- package/dist/shields/exhaustion/frida-capture-saturation.js +21 -8
- package/dist/shields/exhaustion/frida-capture-saturation.js.map +1 -1
- package/dist/shields/exhaustion/index.d.ts +2 -2
- package/dist/shields/exhaustion/index.d.ts.map +1 -1
- package/dist/shields/exhaustion/index.js +2 -2
- package/dist/shields/exhaustion/index.js.map +1 -1
- package/dist/shields/exhaustion/obligation-flooder.d.ts +17 -5
- package/dist/shields/exhaustion/obligation-flooder.d.ts.map +1 -1
- package/dist/shields/exhaustion/obligation-flooder.js +20 -8
- package/dist/shields/exhaustion/obligation-flooder.js.map +1 -1
- package/dist/shields/exhaustion/rea-budget-matrix.d.ts +8 -2
- package/dist/shields/exhaustion/rea-budget-matrix.d.ts.map +1 -1
- package/dist/shields/exhaustion/rea-budget-matrix.js +139 -16
- package/dist/shields/exhaustion/rea-budget-matrix.js.map +1 -1
- package/dist/shields/exhaustion/regex-worker-tarpit.d.ts.map +1 -1
- package/dist/shields/exhaustion/regex-worker-tarpit.js +2 -1
- package/dist/shields/exhaustion/regex-worker-tarpit.js.map +1 -1
- package/dist/shields/exhaustion/wasm-interface-exhaustion.d.ts +7 -4
- package/dist/shields/exhaustion/wasm-interface-exhaustion.d.ts.map +1 -1
- package/dist/shields/exhaustion/wasm-interface-exhaustion.js +16 -7
- package/dist/shields/exhaustion/wasm-interface-exhaustion.js.map +1 -1
- package/dist/shields/formats/android-dex-xref.d.ts +19 -0
- package/dist/shields/formats/android-dex-xref.d.ts.map +1 -0
- package/dist/shields/formats/android-dex-xref.js +427 -0
- package/dist/shields/formats/android-dex-xref.js.map +1 -0
- package/dist/shields/formats/android-manifest.d.ts +44 -0
- package/dist/shields/formats/android-manifest.d.ts.map +1 -0
- package/dist/shields/formats/android-manifest.js +240 -0
- package/dist/shields/formats/android-manifest.js.map +1 -0
- package/dist/shields/formats/android-r8.d.ts +44 -0
- package/dist/shields/formats/android-r8.d.ts.map +1 -0
- package/dist/shields/formats/android-r8.js +246 -0
- package/dist/shields/formats/android-r8.js.map +1 -0
- package/dist/shields/formats/apple-plist.d.ts +15 -0
- package/dist/shields/formats/apple-plist.d.ts.map +1 -1
- package/dist/shields/formats/apple-plist.js +59 -1
- package/dist/shields/formats/apple-plist.js.map +1 -1
- package/dist/shields/formats/archive.d.ts +27 -6
- package/dist/shields/formats/archive.d.ts.map +1 -1
- package/dist/shields/formats/archive.js +247 -45
- package/dist/shields/formats/archive.js.map +1 -1
- package/dist/shields/formats/asar.d.ts +50 -10
- package/dist/shields/formats/asar.d.ts.map +1 -1
- package/dist/shields/formats/asar.js +265 -39
- package/dist/shields/formats/asar.js.map +1 -1
- package/dist/shields/formats/bun-standalone.d.ts +78 -0
- package/dist/shields/formats/bun-standalone.d.ts.map +1 -0
- package/dist/shields/formats/bun-standalone.js +272 -0
- package/dist/shields/formats/bun-standalone.js.map +1 -0
- package/dist/shields/formats/dotnet-managed.d.ts +9 -0
- package/dist/shields/formats/dotnet-managed.d.ts.map +1 -1
- package/dist/shields/formats/dotnet-managed.js +26 -1
- package/dist/shields/formats/dotnet-managed.js.map +1 -1
- package/dist/shields/formats/electron-fuses.d.ts +63 -8
- package/dist/shields/formats/electron-fuses.d.ts.map +1 -1
- package/dist/shields/formats/electron-fuses.js +297 -65
- package/dist/shields/formats/electron-fuses.js.map +1 -1
- package/dist/shields/formats/erlang-beam.d.ts +34 -0
- package/dist/shields/formats/erlang-beam.d.ts.map +1 -0
- package/dist/shields/formats/erlang-beam.js +319 -0
- package/dist/shields/formats/erlang-beam.js.map +1 -0
- package/dist/shields/formats/evm-bytecode.d.ts +28 -0
- package/dist/shields/formats/evm-bytecode.d.ts.map +1 -0
- package/dist/shields/formats/evm-bytecode.js +124 -0
- package/dist/shields/formats/evm-bytecode.js.map +1 -0
- package/dist/shields/formats/go-flutter-exhaustion.d.ts +55 -0
- package/dist/shields/formats/go-flutter-exhaustion.d.ts.map +1 -0
- package/dist/shields/formats/go-flutter-exhaustion.js +346 -0
- package/dist/shields/formats/go-flutter-exhaustion.js.map +1 -0
- package/dist/shields/formats/gpu-ptx.d.ts +40 -0
- package/dist/shields/formats/gpu-ptx.d.ts.map +1 -0
- package/dist/shields/formats/gpu-ptx.js +62 -0
- package/dist/shields/formats/gpu-ptx.js.map +1 -0
- package/dist/shields/formats/headers.d.ts.map +1 -1
- package/dist/shields/formats/headers.js +54 -14
- package/dist/shields/formats/headers.js.map +1 -1
- package/dist/shields/formats/jvm-bytecode.d.ts +20 -0
- package/dist/shields/formats/jvm-bytecode.d.ts.map +1 -0
- package/dist/shields/formats/jvm-bytecode.js +134 -0
- package/dist/shields/formats/jvm-bytecode.js.map +1 -0
- package/dist/shields/formats/mobile-game.d.ts +4 -0
- package/dist/shields/formats/mobile-game.d.ts.map +1 -1
- package/dist/shields/formats/mobile-game.js +16 -0
- package/dist/shields/formats/mobile-game.js.map +1 -1
- package/dist/shields/formats/model.d.ts +22 -8
- package/dist/shields/formats/model.d.ts.map +1 -1
- package/dist/shields/formats/model.js +231 -59
- package/dist/shields/formats/model.js.map +1 -1
- package/dist/shields/formats/native.d.ts +65 -11
- package/dist/shields/formats/native.d.ts.map +1 -1
- package/dist/shields/formats/native.js +413 -108
- package/dist/shields/formats/native.js.map +1 -1
- package/dist/shields/formats/pcap-capture.d.ts +27 -0
- package/dist/shields/formats/pcap-capture.d.ts.map +1 -0
- package/dist/shields/formats/pcap-capture.js +201 -0
- package/dist/shields/formats/pcap-capture.js.map +1 -0
- package/dist/shields/formats/python.d.ts +22 -1
- package/dist/shields/formats/python.d.ts.map +1 -1
- package/dist/shields/formats/python.js +568 -27
- package/dist/shields/formats/python.js.map +1 -1
- package/dist/shields/formats/sourcemap.d.ts.map +1 -1
- package/dist/shields/formats/sourcemap.js +2 -0
- package/dist/shields/formats/sourcemap.js.map +1 -1
- package/dist/shields/formats/sqlite.d.ts +87 -15
- package/dist/shields/formats/sqlite.d.ts.map +1 -1
- package/dist/shields/formats/sqlite.js +377 -42
- package/dist/shields/formats/sqlite.js.map +1 -1
- package/dist/shields/formats/wasm.d.ts +6 -0
- package/dist/shields/formats/wasm.d.ts.map +1 -1
- package/dist/shields/formats/wasm.js +118 -3
- package/dist/shields/formats/wasm.js.map +1 -1
- package/dist/shields/javascript/ast-shield.d.ts +25 -5
- package/dist/shields/javascript/ast-shield.d.ts.map +1 -1
- package/dist/shields/javascript/ast-shield.js +428 -58
- package/dist/shields/javascript/ast-shield.js.map +1 -1
- package/dist/shields/runtime/memory-diff-shield.d.ts +56 -0
- package/dist/shields/runtime/memory-diff-shield.d.ts.map +1 -0
- package/dist/shields/runtime/memory-diff-shield.js +170 -0
- package/dist/shields/runtime/memory-diff-shield.js.map +1 -0
- package/dist/shields/runtime/runtime-shield.d.ts +12 -16
- package/dist/shields/runtime/runtime-shield.d.ts.map +1 -1
- package/dist/shields/runtime/runtime-shield.js +30 -24
- package/dist/shields/runtime/runtime-shield.js.map +1 -1
- package/dist/shields/tarpit/opaque-predicates.d.ts.map +1 -1
- package/dist/shields/tarpit/opaque-predicates.js +3 -3
- package/dist/shields/tarpit/opaque-predicates.js.map +1 -1
- package/dist/shields/tarpit/tarpit-generator.d.ts +9 -4
- package/dist/shields/tarpit/tarpit-generator.d.ts.map +1 -1
- package/dist/shields/tarpit/tarpit-generator.js +30 -23
- package/dist/shields/tarpit/tarpit-generator.js.map +1 -1
- package/package.json +13 -6
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
2
|
+
import { join, resolve } from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* Read-only production debug exposure inspector (Issue #19).
|
|
5
|
+
*
|
|
6
|
+
* Inspects authorized local build/deployment configuration files to identify
|
|
7
|
+
* unnecessary debug/inspector entry points (`--inspect`, `--remote-debugging-port`,
|
|
8
|
+
* `com.apple.security.get-task-allow`, `android:debuggable="true"`).
|
|
9
|
+
*
|
|
10
|
+
* Never probes network ports, never attaches to processes, and never claims that
|
|
11
|
+
* client-side JS markers can block Frida/GDB/CDP when the observer holds OS privileges.
|
|
12
|
+
*/
|
|
13
|
+
export function inspectProductionDebugPosture(options) {
|
|
14
|
+
const rootDir = resolve(options.targetDir);
|
|
15
|
+
const pkgPath = options.packageJsonPath
|
|
16
|
+
? resolve(options.packageJsonPath)
|
|
17
|
+
: join(rootDir, "package.json");
|
|
18
|
+
const envPath = options.envFilePath
|
|
19
|
+
? resolve(options.envFilePath)
|
|
20
|
+
: join(rootDir, ".env.production");
|
|
21
|
+
const entitlementsPath = options.macosEntitlementsPath
|
|
22
|
+
? resolve(options.macosEntitlementsPath)
|
|
23
|
+
: join(rootDir, "entitlements.plist");
|
|
24
|
+
const androidManifestPath = options.androidManifestPath
|
|
25
|
+
? resolve(options.androidManifestPath)
|
|
26
|
+
: join(rootDir, "AndroidManifest.xml");
|
|
27
|
+
const checks = [];
|
|
28
|
+
// 1. Node CLI inspector & NODE_OPTIONS check
|
|
29
|
+
{
|
|
30
|
+
const sources = [];
|
|
31
|
+
const exposedFlags = [];
|
|
32
|
+
if (existsSync(pkgPath) && statSync(pkgPath).isFile()) {
|
|
33
|
+
try {
|
|
34
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
|
|
35
|
+
if (pkg.scripts && typeof pkg.scripts === "object") {
|
|
36
|
+
for (const [name, cmd] of Object.entries(pkg.scripts)) {
|
|
37
|
+
if (typeof cmd !== "string")
|
|
38
|
+
continue;
|
|
39
|
+
// Focus on production/start/serve/pack scripts or all scripts
|
|
40
|
+
if (/(^|[\s"'])(--inspect(?:-brk|-port)?|ELECTRON_RUN_AS_NODE=1)\b/.test(cmd)) {
|
|
41
|
+
exposedFlags.push(`package.json#scripts.${name}: "${cmd}"`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
sources.push("package.json#scripts");
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Ignore malformed package.json here; status falls back if no valid sources
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (existsSync(envPath) && statSync(envPath).isFile()) {
|
|
52
|
+
const envText = readFileSync(envPath, "utf8");
|
|
53
|
+
sources.push(".env.production");
|
|
54
|
+
if (/(--inspect(?:-brk|-port)?|ELECTRON_RUN_AS_NODE\s*=\s*1)/.test(envText)) {
|
|
55
|
+
exposedFlags.push(`.env.production contains inspector/run-as-node directive`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const status = exposedFlags.length > 0
|
|
59
|
+
? "exposed"
|
|
60
|
+
: sources.length > 0
|
|
61
|
+
? "not-observed"
|
|
62
|
+
: "unknown";
|
|
63
|
+
checks.push({
|
|
64
|
+
id: "node-cli-inspector-exposure",
|
|
65
|
+
platform: "cross-platform",
|
|
66
|
+
status,
|
|
67
|
+
observedConfig: exposedFlags.length > 0
|
|
68
|
+
? exposedFlags.join("; ")
|
|
69
|
+
: sources.length > 0
|
|
70
|
+
? `Inspected ${sources.join(", ")}; no --inspect or ELECTRON_RUN_AS_NODE flags found.`
|
|
71
|
+
: "No package.json or .env.production found to verify Node launch flags.",
|
|
72
|
+
restrictedChannel: "Node.js V8 Inspector WebSocket (--inspect / NODE_OPTIONS)",
|
|
73
|
+
remediation: "Remove --inspect, --inspect-brk, and ELECTRON_RUN_AS_NODE=1 from production start scripts and environment files, and disable RunAsNode / EnableNodeCliInspectArguments in Electron fuses.",
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
// 2. Chromium / WebView remote debugging port exposure
|
|
77
|
+
{
|
|
78
|
+
const sources = [];
|
|
79
|
+
const exposedFlags = [];
|
|
80
|
+
if (existsSync(pkgPath) && statSync(pkgPath).isFile()) {
|
|
81
|
+
try {
|
|
82
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
|
|
83
|
+
if (pkg.scripts && typeof pkg.scripts === "object") {
|
|
84
|
+
for (const [name, cmd] of Object.entries(pkg.scripts)) {
|
|
85
|
+
if (typeof cmd !== "string")
|
|
86
|
+
continue;
|
|
87
|
+
if (/--remote-debugging-(?:port|pipe|address)|--remote-allow-origins/.test(cmd)) {
|
|
88
|
+
exposedFlags.push(`package.json#scripts.${name}: "${cmd}"`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
sources.push("package.json#scripts");
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// Ignore
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const status = exposedFlags.length > 0
|
|
99
|
+
? "exposed"
|
|
100
|
+
: sources.length > 0
|
|
101
|
+
? "not-observed"
|
|
102
|
+
: "unknown";
|
|
103
|
+
checks.push({
|
|
104
|
+
id: "chromium-remote-debugging-exposure",
|
|
105
|
+
platform: "cross-platform",
|
|
106
|
+
status,
|
|
107
|
+
observedConfig: exposedFlags.length > 0
|
|
108
|
+
? exposedFlags.join("; ")
|
|
109
|
+
: sources.length > 0
|
|
110
|
+
? `Inspected ${sources.join(", ")}; no --remote-debugging-port flags found.`
|
|
111
|
+
: "No launch configuration found to verify Chromium remote debugging flags.",
|
|
112
|
+
restrictedChannel: "Chrome DevTools Protocol (CDP) HTTP/WebSocket endpoint",
|
|
113
|
+
remediation: "Remove --remote-debugging-port and --remote-allow-origins from production launch scripts and BrowserWindow startup switches.",
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
// 3. macOS Entitlements / Hardened Runtime debug posture
|
|
117
|
+
{
|
|
118
|
+
if (existsSync(entitlementsPath) && statSync(entitlementsPath).isFile()) {
|
|
119
|
+
const xml = readFileSync(entitlementsPath, "utf8");
|
|
120
|
+
const riskyKeys = [
|
|
121
|
+
"com.apple.security.get-task-allow",
|
|
122
|
+
"com.apple.security.cs.allow-dyld-environment-variables",
|
|
123
|
+
"com.apple.security.cs.disable-library-validation",
|
|
124
|
+
"com.apple.security.cs.allow-unsigned-executable-memory",
|
|
125
|
+
];
|
|
126
|
+
const enabledKeys = riskyKeys.filter((key) => {
|
|
127
|
+
const regex = new RegExp(`<key>\\s*${key.replace(/\./g, "\\.")}\\s*</key>\\s*<true\\s*/>`, "i");
|
|
128
|
+
return regex.test(xml);
|
|
129
|
+
});
|
|
130
|
+
checks.push({
|
|
131
|
+
id: "macos-entitlements-debug-posture",
|
|
132
|
+
platform: "macos",
|
|
133
|
+
status: enabledKeys.length > 0 ? "exposed" : "not-observed",
|
|
134
|
+
observedConfig: enabledKeys.length > 0
|
|
135
|
+
? `Enabled debug/injection entitlements in ${entitlementsPath}: ${enabledKeys.join(", ")}`
|
|
136
|
+
: `Inspected ${entitlementsPath}; get-task-allow and dyld injection entitlements are not enabled.`,
|
|
137
|
+
restrictedChannel: "macOS task_for_pid / LLDB / Frida attach & DYLD_INSERT_LIBRARIES",
|
|
138
|
+
remediation: "Set com.apple.security.get-task-allow, allow-dyld-environment-variables, and disable-library-validation to false (or remove them) in production release entitlements with Hardened Runtime enabled.",
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
checks.push({
|
|
143
|
+
id: "macos-entitlements-debug-posture",
|
|
144
|
+
platform: "macos",
|
|
145
|
+
status: "unknown",
|
|
146
|
+
observedConfig: "No macOS entitlements.plist provided or discovered in target directory.",
|
|
147
|
+
restrictedChannel: "macOS task_for_pid / LLDB / Frida attach & DYLD_INSERT_LIBRARIES",
|
|
148
|
+
remediation: "Provide macosEntitlementsPath to verify that com.apple.security.get-task-allow is omitted in release builds.",
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// 4. Android Manifest debuggable posture
|
|
153
|
+
{
|
|
154
|
+
if (existsSync(androidManifestPath) && statSync(androidManifestPath).isFile()) {
|
|
155
|
+
const xml = readFileSync(androidManifestPath, "utf8");
|
|
156
|
+
const isDebuggable = /android:debuggable\s*=\s*["']true["']/i.test(xml);
|
|
157
|
+
checks.push({
|
|
158
|
+
id: "android-manifest-debuggable-posture",
|
|
159
|
+
platform: "android",
|
|
160
|
+
status: isDebuggable ? "exposed" : "not-observed",
|
|
161
|
+
observedConfig: isDebuggable
|
|
162
|
+
? `android:debuggable="true" observed in ${androidManifestPath}`
|
|
163
|
+
: `Inspected ${androidManifestPath}; android:debuggable="true" is not set.`,
|
|
164
|
+
restrictedChannel: "Android JDWP / run-as / Frida gadget attach on non-rooted devices",
|
|
165
|
+
remediation: "Ensure android:debuggable=\"false\" in release buildTypes in build.gradle / AndroidManifest.xml.",
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
checks.push({
|
|
170
|
+
id: "android-manifest-debuggable-posture",
|
|
171
|
+
platform: "android",
|
|
172
|
+
status: "unknown",
|
|
173
|
+
observedConfig: "No AndroidManifest.xml provided or discovered in target directory.",
|
|
174
|
+
restrictedChannel: "Android JDWP / run-as / Frida gadget attach on non-rooted devices",
|
|
175
|
+
remediation: "Provide androidManifestPath to verify that android:debuggable is false in release builds.",
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
const overallPosture = checks.some((c) => c.status === "exposed")
|
|
180
|
+
? "exposed"
|
|
181
|
+
: checks.some((c) => c.status === "not-observed")
|
|
182
|
+
? "not-observed"
|
|
183
|
+
: "unknown";
|
|
184
|
+
return {
|
|
185
|
+
targetPath: rootDir,
|
|
186
|
+
overallPosture,
|
|
187
|
+
checks,
|
|
188
|
+
runtimeBoundaryContract: {
|
|
189
|
+
shadowObjectsClassification: "decorative-deception-signal",
|
|
190
|
+
absenceOfRuntimeMarkersImpliesNoDebugger: false,
|
|
191
|
+
blocksFridaOrGdbWithLocalPrivileges: false,
|
|
192
|
+
blocksRuntimeStateRecovery: false,
|
|
193
|
+
secretStorageGuidance: "BLA JavaScript runtime shields cannot guarantee confidentiality of plaintext or decryption keys held by a client process when the observer has OS-level debugging/instrumentation permissions (e.g., Frida, GDB, LLDB, or root/admin access). Keep authoritative access control and long-lived secrets in trusted server or hardware boundaries.",
|
|
194
|
+
},
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=debug-posture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-posture.js","sourceRoot":"","sources":["../../src/core/debug-posture.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/core/detector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/core/detector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAmNvE"}
|
package/dist/core/detector.js
CHANGED
|
@@ -16,8 +16,8 @@ export function detectArtifactFormat(targetPath) {
|
|
|
16
16
|
return "directory";
|
|
17
17
|
}
|
|
18
18
|
const ext = extname(targetPath).toLowerCase();
|
|
19
|
-
// Read up to
|
|
20
|
-
const header = Buffer.alloc(Math.min(
|
|
19
|
+
// Read up to 4096 header bytes for binary magic & CLR metadata inspection
|
|
20
|
+
const header = Buffer.alloc(Math.min(4096, stats.size));
|
|
21
21
|
if (header.length > 0) {
|
|
22
22
|
const fd = openSync(targetPath, "r");
|
|
23
23
|
try {
|
|
@@ -27,6 +27,11 @@ export function detectArtifactFormat(targetPath) {
|
|
|
27
27
|
closeSync(fd);
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
+
// 0. Apple Binary PropertyList (`bplist00` / `bplist01`)
|
|
31
|
+
if (header.length >= 8 &&
|
|
32
|
+
header.subarray(0, 6).toString("latin1") === "bplist") {
|
|
33
|
+
return "apple-plist";
|
|
34
|
+
}
|
|
30
35
|
// 1. SQLite 3 database: `SQLite format 3\0`
|
|
31
36
|
if (header.length >= 16 &&
|
|
32
37
|
header.subarray(0, 16).toString("latin1") === "SQLite format 3\0") {
|
|
@@ -68,20 +73,36 @@ export function detectArtifactFormat(targetPath) {
|
|
|
68
73
|
header[3] === 0x46) {
|
|
69
74
|
return "native-elf";
|
|
70
75
|
}
|
|
71
|
-
// 7. Mach-O binary (thin 32/64 BE/LE or fat universal)
|
|
76
|
+
// 7. JVM `.class` vs Mach-O binary (thin 32/64 BE/LE or fat universal)
|
|
72
77
|
if (header.length >= 4) {
|
|
73
78
|
const magicBE = header.readUInt32BE(0);
|
|
79
|
+
if (magicBE === 0xcafebabe) {
|
|
80
|
+
if (ext === ".class")
|
|
81
|
+
return "jvm-class";
|
|
82
|
+
// In Mach-O universal fat binaries, uint32BE(4) is nfat_arch (1..20).
|
|
83
|
+
// In JVM .class files, uint16BE(4) is minor_version and uint16BE(6) is major_version (>= 45).
|
|
84
|
+
if (header.length >= 8) {
|
|
85
|
+
const nfatOrVersion = header.readUInt32BE(4);
|
|
86
|
+
const majorVersion = header.readUInt16BE(6);
|
|
87
|
+
if (nfatOrVersion > 30 && majorVersion >= 45 && majorVersion <= 90) {
|
|
88
|
+
return "jvm-class";
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return "native-macho";
|
|
92
|
+
}
|
|
74
93
|
if (magicBE === 0xfeedface ||
|
|
75
94
|
magicBE === 0xcefaedfe ||
|
|
76
95
|
magicBE === 0xfeedfacf ||
|
|
77
96
|
magicBE === 0xcffaedfe ||
|
|
78
|
-
magicBE === 0xcafebabe ||
|
|
79
97
|
magicBE === 0xbebafeca) {
|
|
80
98
|
return "native-macho";
|
|
81
99
|
}
|
|
82
100
|
}
|
|
83
|
-
// 8. PE binary (`MZ`)
|
|
101
|
+
// 8. PE binary (`MZ`) or .NET Managed CLR assembly (contains `BSJB` metadata root)
|
|
84
102
|
if (header.length >= 2 && header[0] === 0x4d && header[1] === 0x5a) {
|
|
103
|
+
if (header.includes(Buffer.from("BSJB", "ascii"))) {
|
|
104
|
+
return "dotnet-managed";
|
|
105
|
+
}
|
|
85
106
|
return "native-pe";
|
|
86
107
|
}
|
|
87
108
|
// 9. Electron ASAR archive: Pickles header (uint32LE(0) === 4, uint32LE(12) === jsonLen)
|
|
@@ -114,7 +135,26 @@ export function detectArtifactFormat(targetPath) {
|
|
|
114
135
|
(header.length >= 16 && header[2] === 0x0d && header[3] === 0x0a)) {
|
|
115
136
|
return "python-pyc";
|
|
116
137
|
}
|
|
117
|
-
// 13.
|
|
138
|
+
// 13. Erlang BEAM IFF: `FOR1....BEAM`
|
|
139
|
+
if (header.length >= 12 &&
|
|
140
|
+
header.subarray(0, 4).toString("latin1") === "FOR1" &&
|
|
141
|
+
header.subarray(8, 12).toString("latin1") === "BEAM") {
|
|
142
|
+
return "erlang-beam";
|
|
143
|
+
}
|
|
144
|
+
// 14. Classic libpcap / pcapng magic
|
|
145
|
+
if (header.length >= 4) {
|
|
146
|
+
const magicLE = header.readUInt32LE(0);
|
|
147
|
+
if (magicLE === 0xa1b2c3d4 ||
|
|
148
|
+
magicLE === 0xa1b23c4d ||
|
|
149
|
+
magicLE === 0xd4c3b2a1) {
|
|
150
|
+
return "pcap-capture";
|
|
151
|
+
}
|
|
152
|
+
// pcapng section header block
|
|
153
|
+
if (magicLE === 0x0a0d0d0a) {
|
|
154
|
+
return "pcap-capture";
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// 15. Extension-based formats
|
|
118
158
|
if ([".js", ".mjs", ".cjs", ".jsx"].includes(ext))
|
|
119
159
|
return "javascript";
|
|
120
160
|
if ([".ts", ".mts", ".cts", ".tsx"].includes(ext))
|
|
@@ -133,6 +173,18 @@ export function detectArtifactFormat(targetPath) {
|
|
|
133
173
|
return "model-gguf";
|
|
134
174
|
if (ext === ".dex")
|
|
135
175
|
return "android-dex";
|
|
176
|
+
if ([".plist", ".entitlements", ".mobileprovision"].includes(ext))
|
|
177
|
+
return "apple-plist";
|
|
178
|
+
if (ext === ".class")
|
|
179
|
+
return "jvm-class";
|
|
180
|
+
if (ext === ".beam")
|
|
181
|
+
return "erlang-beam";
|
|
182
|
+
if ([".evm", ".bin-evm", ".solidity-bin"].includes(ext))
|
|
183
|
+
return "evm-bytecode";
|
|
184
|
+
if ([".pcap", ".pcapng", ".cap"].includes(ext))
|
|
185
|
+
return "pcap-capture";
|
|
186
|
+
if (ext === ".ptx")
|
|
187
|
+
return "gpu-ptx";
|
|
136
188
|
return "unknown";
|
|
137
189
|
}
|
|
138
190
|
//# sourceMappingURL=detector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/core/detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,UAAkB;IACrD,IAAI,KAAK,CAAC;IACV,IAAI,CAAC;QACH,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QACxB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;IAE9C,
|
|
1
|
+
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/core/detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { SeededPrng } from "./prng.js";
|
|
2
|
+
export type IdentifierStyle = "camel" | "pascal" | "snake" | "privateCamel" | "earlySort";
|
|
3
|
+
export interface RealisticIdentifierOptions {
|
|
4
|
+
readonly style?: IdentifierStyle;
|
|
5
|
+
/** Extra suffix entropy hex length (default 3). */
|
|
6
|
+
readonly entropy?: number;
|
|
7
|
+
/** Optional semantic stem forced into the name (still mixed with vocabulary). */
|
|
8
|
+
readonly hint?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Draw a realistic identifier from a seeded distribution.
|
|
12
|
+
* Guarantees: no `_bla`, `__bla`, `$00_AAA` substring; valid JS/TS/Python ident.
|
|
13
|
+
*/
|
|
14
|
+
export declare function realisticIdentifier(prng: SeededPrng, options?: RealisticIdentifierOptions): string;
|
|
15
|
+
/**
|
|
16
|
+
* Draw N unique realistic identifiers (retry on collision within the batch).
|
|
17
|
+
*/
|
|
18
|
+
export declare function realisticIdentifierBatch(prng: SeededPrng, count: number, options?: RealisticIdentifierOptions): string[];
|
|
19
|
+
/** Shared honey-table names for SQLite (no `_bla_` prefix; probe looks these up by name). */
|
|
20
|
+
export declare const SQLITE_HONEY_TABLES: Readonly<{
|
|
21
|
+
readonly keyHierarchy: "enclave_key_hierarchy";
|
|
22
|
+
readonly attestationLedger: "tpm2_attestation_ledger";
|
|
23
|
+
readonly sessionLeases: "zero_trust_session_leases";
|
|
24
|
+
readonly canaryTransport: "canary_transport_redaction";
|
|
25
|
+
readonly systemDiagnostic: "system_diagnostic_log";
|
|
26
|
+
readonly activeTopologyView: "v_enclave_active_topology";
|
|
27
|
+
}>;
|
|
28
|
+
export declare const SQLITE_HONEY_TABLE_NAME_SET: ReadonlySet<string>;
|
|
29
|
+
/** Forbidden greppable marker substrings that must NEVER appear in emitted artifacts. */
|
|
30
|
+
export declare const FORBIDDEN_EMITTED_MARKERS: readonly RegExp[];
|
|
31
|
+
export declare function assertNoForbiddenMarkers(emitted: string, context?: string): void;
|
|
32
|
+
//# sourceMappingURL=identifiers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identifiers.d.ts","sourceRoot":"","sources":["../../src/core/identifiers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAiL5C,MAAM,MAAM,eAAe,GACvB,OAAO,GACP,QAAQ,GACR,OAAO,GACP,cAAc,GACd,WAAW,CAAC;AAEhB,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC;IACjC,mDAAmD;IACnD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,iFAAiF;IACjF,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE,0BAA+B,GACvC,MAAM,CAiDR;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,0BAA+B,GACvC,MAAM,EAAE,CAeV;AAED,6FAA6F;AAC7F,eAAO,MAAM,mBAAmB;;;;;;;EAOrB,CAAC;AAEZ,eAAO,MAAM,2BAA2B,EAAE,WAAW,CAAC,MAAM,CAE3D,CAAC;AAEF,yFAAyF;AACzF,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EAIrD,CAAC;AAEH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,SAAqB,GAC3B,IAAI,CAQN"}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Realistic identifier vocabulary for emitted shield artifacts.
|
|
3
|
+
*
|
|
4
|
+
* CRITICAL DEFENSIVE PROPERTY: every name drawn from this module must be
|
|
5
|
+
* statistically indistinguishable from ordinary application identifiers.
|
|
6
|
+
* No shared greppable substring (`_bla`, `$00_AAA`, `__bla_`, …) may appear
|
|
7
|
+
* in the emitted artifact — a single `grep -v` must not be able to separate
|
|
8
|
+
* injected noise from real code.
|
|
9
|
+
*/
|
|
10
|
+
const VERBS = Object.freeze([
|
|
11
|
+
"resolve",
|
|
12
|
+
"compute",
|
|
13
|
+
"derive",
|
|
14
|
+
"validate",
|
|
15
|
+
"dispatch",
|
|
16
|
+
"project",
|
|
17
|
+
"reconcile",
|
|
18
|
+
"normalize",
|
|
19
|
+
"assemble",
|
|
20
|
+
"compose",
|
|
21
|
+
"evaluate",
|
|
22
|
+
"schedule",
|
|
23
|
+
"acquire",
|
|
24
|
+
"release",
|
|
25
|
+
"bind",
|
|
26
|
+
"adapt",
|
|
27
|
+
"mirror",
|
|
28
|
+
"fold",
|
|
29
|
+
"reduce",
|
|
30
|
+
"expand",
|
|
31
|
+
"encode",
|
|
32
|
+
"decode",
|
|
33
|
+
"seal",
|
|
34
|
+
"unseal",
|
|
35
|
+
"attest",
|
|
36
|
+
"verify",
|
|
37
|
+
"sync",
|
|
38
|
+
"flush",
|
|
39
|
+
"prime",
|
|
40
|
+
"hydrate",
|
|
41
|
+
"materialize",
|
|
42
|
+
"capture",
|
|
43
|
+
"emit",
|
|
44
|
+
"observe",
|
|
45
|
+
"trace",
|
|
46
|
+
"probe",
|
|
47
|
+
"sample",
|
|
48
|
+
"filter",
|
|
49
|
+
"transform",
|
|
50
|
+
"allocate",
|
|
51
|
+
]);
|
|
52
|
+
const NOUNS = Object.freeze([
|
|
53
|
+
"Ledger",
|
|
54
|
+
"Envelope",
|
|
55
|
+
"Session",
|
|
56
|
+
"Ticket",
|
|
57
|
+
"Digest",
|
|
58
|
+
"Frame",
|
|
59
|
+
"Cursor",
|
|
60
|
+
"Handle",
|
|
61
|
+
"Slot",
|
|
62
|
+
"Epoch",
|
|
63
|
+
"Quota",
|
|
64
|
+
"Policy",
|
|
65
|
+
"Manifest",
|
|
66
|
+
"Bundle",
|
|
67
|
+
"Shard",
|
|
68
|
+
"Segment",
|
|
69
|
+
"Vector",
|
|
70
|
+
"Matrix",
|
|
71
|
+
"Buffer",
|
|
72
|
+
"Stream",
|
|
73
|
+
"Channel",
|
|
74
|
+
"Bridge",
|
|
75
|
+
"Gateway",
|
|
76
|
+
"Router",
|
|
77
|
+
"Registry",
|
|
78
|
+
"Catalog",
|
|
79
|
+
"Index",
|
|
80
|
+
"Cache",
|
|
81
|
+
"Pool",
|
|
82
|
+
"Queue",
|
|
83
|
+
"Stack",
|
|
84
|
+
"Tree",
|
|
85
|
+
"Graph",
|
|
86
|
+
"Node",
|
|
87
|
+
"Edge",
|
|
88
|
+
"Probe",
|
|
89
|
+
"Sensor",
|
|
90
|
+
"Metric",
|
|
91
|
+
"Sample",
|
|
92
|
+
"Record",
|
|
93
|
+
"Entry",
|
|
94
|
+
"Token",
|
|
95
|
+
"Claim",
|
|
96
|
+
"Scope",
|
|
97
|
+
"Context",
|
|
98
|
+
"Runtime",
|
|
99
|
+
"Worker",
|
|
100
|
+
"Service",
|
|
101
|
+
"Client",
|
|
102
|
+
"Provider",
|
|
103
|
+
]);
|
|
104
|
+
const ADJECTIVES = Object.freeze([
|
|
105
|
+
"Active",
|
|
106
|
+
"Pending",
|
|
107
|
+
"Sealed",
|
|
108
|
+
"Transient",
|
|
109
|
+
"Durable",
|
|
110
|
+
"Local",
|
|
111
|
+
"Remote",
|
|
112
|
+
"Shared",
|
|
113
|
+
"Private",
|
|
114
|
+
"Mutable",
|
|
115
|
+
"Frozen",
|
|
116
|
+
"Lazy",
|
|
117
|
+
"Eager",
|
|
118
|
+
"Inline",
|
|
119
|
+
"Deferred",
|
|
120
|
+
"Primary",
|
|
121
|
+
"Secondary",
|
|
122
|
+
"Nested",
|
|
123
|
+
"Composite",
|
|
124
|
+
"Sparse",
|
|
125
|
+
]);
|
|
126
|
+
const SNAKE_STEMS = Object.freeze([
|
|
127
|
+
"session",
|
|
128
|
+
"ledger",
|
|
129
|
+
"envelope",
|
|
130
|
+
"digest",
|
|
131
|
+
"cursor",
|
|
132
|
+
"handle",
|
|
133
|
+
"epoch",
|
|
134
|
+
"quota",
|
|
135
|
+
"policy",
|
|
136
|
+
"manifest",
|
|
137
|
+
"bundle",
|
|
138
|
+
"shard",
|
|
139
|
+
"segment",
|
|
140
|
+
"vector",
|
|
141
|
+
"matrix",
|
|
142
|
+
"buffer",
|
|
143
|
+
"stream",
|
|
144
|
+
"channel",
|
|
145
|
+
"bridge",
|
|
146
|
+
"gateway",
|
|
147
|
+
"router",
|
|
148
|
+
"registry",
|
|
149
|
+
"catalog",
|
|
150
|
+
"index",
|
|
151
|
+
"cache",
|
|
152
|
+
"pool",
|
|
153
|
+
"queue",
|
|
154
|
+
"probe",
|
|
155
|
+
"metric",
|
|
156
|
+
"sample",
|
|
157
|
+
"record",
|
|
158
|
+
"token",
|
|
159
|
+
"claim",
|
|
160
|
+
"scope",
|
|
161
|
+
"context",
|
|
162
|
+
"runtime",
|
|
163
|
+
"worker",
|
|
164
|
+
"service",
|
|
165
|
+
"client",
|
|
166
|
+
"provider",
|
|
167
|
+
"slot",
|
|
168
|
+
"frame",
|
|
169
|
+
"ticket",
|
|
170
|
+
]);
|
|
171
|
+
/**
|
|
172
|
+
* Draw a realistic identifier from a seeded distribution.
|
|
173
|
+
* Guarantees: no `_bla`, `__bla`, `$00_AAA` substring; valid JS/TS/Python ident.
|
|
174
|
+
*/
|
|
175
|
+
export function realisticIdentifier(prng, options = {}) {
|
|
176
|
+
const style = options.style ?? "camel";
|
|
177
|
+
const entropy = options.entropy ?? 3;
|
|
178
|
+
const tag = prng.hex(entropy);
|
|
179
|
+
const verb = prng.pick(VERBS);
|
|
180
|
+
const noun = prng.pick(NOUNS);
|
|
181
|
+
const adj = prng.pick(ADJECTIVES);
|
|
182
|
+
const hint = options.hint
|
|
183
|
+
? options.hint.replace(/[^A-Za-z0-9_]/g, "").slice(0, 24)
|
|
184
|
+
: "";
|
|
185
|
+
if (style === "snake") {
|
|
186
|
+
const a = prng.pick(SNAKE_STEMS);
|
|
187
|
+
const b = prng.pick(SNAKE_STEMS);
|
|
188
|
+
const c = hint
|
|
189
|
+
? hint.replace(/([a-z])([A-Z])/g, "$1_$2").toLowerCase()
|
|
190
|
+
: prng.pick(SNAKE_STEMS);
|
|
191
|
+
return `${a}_${b}_${c}_${tag}`;
|
|
192
|
+
}
|
|
193
|
+
if (style === "pascal") {
|
|
194
|
+
const head = hint
|
|
195
|
+
? hint.charAt(0).toUpperCase() + hint.slice(1)
|
|
196
|
+
: adj;
|
|
197
|
+
return `${head}${noun}${tag.charAt(0).toUpperCase()}${tag.slice(1)}`;
|
|
198
|
+
}
|
|
199
|
+
if (style === "privateCamel") {
|
|
200
|
+
const body = hint
|
|
201
|
+
? hint.charAt(0).toLowerCase() + hint.slice(1)
|
|
202
|
+
: verb;
|
|
203
|
+
return `_${body}${noun}_${tag}`;
|
|
204
|
+
}
|
|
205
|
+
if (style === "earlySort") {
|
|
206
|
+
// `$` sorts before [A-Za-z_] in Unicode; vary the next chars so there is
|
|
207
|
+
// NO shared greppable literal across the emitted set (unlike `$00_AAA`).
|
|
208
|
+
const rank = prng.hex(2);
|
|
209
|
+
const body = hint
|
|
210
|
+
? hint.charAt(0).toUpperCase() + hint.slice(1)
|
|
211
|
+
: `${adj}${noun}`;
|
|
212
|
+
return `$${rank}${body}_${tag}`;
|
|
213
|
+
}
|
|
214
|
+
// camel (default)
|
|
215
|
+
const body = hint
|
|
216
|
+
? hint.charAt(0).toLowerCase() + hint.slice(1)
|
|
217
|
+
: verb;
|
|
218
|
+
return `${body}${adj}${noun}_${tag}`;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Draw N unique realistic identifiers (retry on collision within the batch).
|
|
222
|
+
*/
|
|
223
|
+
export function realisticIdentifierBatch(prng, count, options = {}) {
|
|
224
|
+
const out = [];
|
|
225
|
+
const seen = new Set();
|
|
226
|
+
let guard = 0;
|
|
227
|
+
while (out.length < count && guard < count * 16) {
|
|
228
|
+
guard++;
|
|
229
|
+
const name = realisticIdentifier(prng, options);
|
|
230
|
+
if (seen.has(name))
|
|
231
|
+
continue;
|
|
232
|
+
seen.add(name);
|
|
233
|
+
out.push(name);
|
|
234
|
+
}
|
|
235
|
+
if (out.length < count) {
|
|
236
|
+
throw new Error(`Failed to draw ${count} unique realistic identifiers`);
|
|
237
|
+
}
|
|
238
|
+
return out;
|
|
239
|
+
}
|
|
240
|
+
/** Shared honey-table names for SQLite (no `_bla_` prefix; probe looks these up by name). */
|
|
241
|
+
export const SQLITE_HONEY_TABLES = Object.freeze({
|
|
242
|
+
keyHierarchy: "enclave_key_hierarchy",
|
|
243
|
+
attestationLedger: "tpm2_attestation_ledger",
|
|
244
|
+
sessionLeases: "zero_trust_session_leases",
|
|
245
|
+
canaryTransport: "canary_transport_redaction",
|
|
246
|
+
systemDiagnostic: "system_diagnostic_log",
|
|
247
|
+
activeTopologyView: "v_enclave_active_topology",
|
|
248
|
+
});
|
|
249
|
+
export const SQLITE_HONEY_TABLE_NAME_SET = new Set(Object.values(SQLITE_HONEY_TABLES));
|
|
250
|
+
/** Forbidden greppable marker substrings that must NEVER appear in emitted artifacts. */
|
|
251
|
+
export const FORBIDDEN_EMITTED_MARKERS = Object.freeze([
|
|
252
|
+
/_bla/i,
|
|
253
|
+
/\$00_AAA/,
|
|
254
|
+
/__bla/i,
|
|
255
|
+
]);
|
|
256
|
+
export function assertNoForbiddenMarkers(emitted, context = "emitted artifact") {
|
|
257
|
+
for (const re of FORBIDDEN_EMITTED_MARKERS) {
|
|
258
|
+
if (re.test(emitted)) {
|
|
259
|
+
throw new Error(`Forbidden marker ${re} found in ${context} — shield would be trivially strippable`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
//# sourceMappingURL=identifiers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identifiers.js","sourceRoot":"","sources":["../../src/core/identifiers.ts"],"names":[],"mappings":"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"}
|