@scenar/cli
Scenar CLI — validate scenarios, generate narration, and render videos.
Supply chain provenance
Status for the latest visible version.
Without SLSA provenance there is no cryptographic link between this tarball and the public source, so a manually published version cannot be tied back to a reviewed commit.
Maintainers
Keywords
Accepted risks
Findings the reviewer chose to accept rather than block on.
| Source | Rule | Reason | Accepted by | When |
|---|---|---|---|---|
| phantom-deps | phantom-dep:@scenar/embed | AI (phantom-deps): Same-org package, likely used via bundled build output. | ai | |
| semgrep | semgrep:etc-passwd-access | AI (semgrep): Test asserting path traversal is rejected, not actual access. | ai | |
| semgrep | semgrep:silent-process-exec | AI (semgrep): Cross-platform open-URL-in-browser helper for `serve`, not a reverse shell. | ai | |
| semgrep | semgrep:silent-process-exec-var | AI (semgrep): Same open-URL call as silent-process-exec finding. | ai | |
| source-diff | obfuscated-file:example-bundle/assets/index-BLQ14SEo.js | AI (source-diff): React/bundled build artifact with license headers, not obfuscation. | ai | |
| source-diff | obfuscated-file:example-bundle/embed.js | AI (source-diff): Minified embed SDK using postMessage protocol, not malicious. | ai | |
| phantom-deps | phantom-dep:@bufbuild/protobuf | AI (phantom-deps): protobuf runtime used via generated connectrpc stubs; heuristic FP. | ai | |
| phantom-deps | phantom-dep:@scenar/core | AI (phantom-deps): Same-org monorepo dep; may be used transitively rather than directly imported. | ai | |
| typosquat | typosquat.levenshtein:joi | AI (typosquat): @scenar/cli is a scoped CLI tool unrelated to joi; Levenshtein match is coincidental. | ai |
Versions (showing 28 of 28)
| Version | Deps | Published |
|---|---|---|
| 0.4.0 | 5 / 0 | |
| 0.3.0 | 10 / 0 | |
| 0.2.1 | 9 / 0 | |
| 0.2.0 | 9 / 0 | |
| 0.1.20 | 9 / 0 | |
| 0.1.19 | 5 / 0 | |
| 0.1.18 | 5 / 0 | |
| 0.1.17 | 5 / 0 | |
| 0.1.16 | 5 / 0 | |
| 0.1.15 | 5 / 0 | |
| 0.1.14 | 5 / 0 | |
| 0.1.13 | 5 / 0 | |
| 0.1.12 | 5 / 0 | |
| 0.1.11 | 5 / 0 | |
| 0.1.10 | 5 / 0 | |
| 0.1.9 | 5 / 0 | |
| 0.1.8 | 5 / 0 | |
| 0.1.7 | 5 / 0 | |
| 0.1.6 | 4 / 0 | |
| 0.1.5 | 4 / 0 | |
| 0.1.4 | 4 / 0 | |
| 0.1.3 | 4 / 0 | |
| 0.1.2 | 4 / 0 | |
| 0.1.1 | 4 / 0 | |
| 0.1.0 | 4 / 0 | |
| 0.0.4 | 3 / 0 | |
| 0.0.3 | 3 / 0 | |
| 0.0.2 | 3 / 0 |
v0.4.0
13 findingsNewly added source file contains lines over 3000 chars, suggesting minified or obfuscated code. New obfuscated files are a strong attack indicator.
Newly added source file contains lines over 3000 chars, suggesting minified or obfuscated code. New obfuscated files are a strong attack indicator.
Accessing /etc/passwd or /etc/shadow — credential harvesting on Linux Source: https://github.com/stigmer/scenar/blob/6f91dbb6007c78b48ef9eb3b20992b9c3488963c/src/__tests__/serve-request-path.test.ts#L27 25 | it("rejects parent-directory traversal in every form", () => { 26 | expect(resolveStaticPath("/../secret")).toBeNull(); > 27 | expect(resolveStaticPath("/assets/../../etc/passwd")).toBeNull(); 28 | expect(resolveStaticPath("/%2e%2e/secret")).toBeNull(); 29 | expect(resolveStaticPath("/foo/%2e%2e/%2e%2e/bar")).toBeNull();
Accessing /etc/passwd or /etc/shadow — credential harvesting on Linux Source: https://github.com/stigmer/scenar/blob/6f91dbb6007c78b48ef9eb3b20992b9c3488963c/src/__tests__/serve-static-server.test.ts#L86 84 | // Sent verbatim via node:http so the "%2e%2e" survives to the server. 85 | expect(await rawGetStatus(server.url, "/%2e%2e/%2e%2e/secret")).toBe(400); > 86 | expect(await rawGetStatus(server.url, "/assets/%2e%2e/%2e%2e/etc/passwd")).toBe(400); 87 | }); 88 | });
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/6f91dbb6007c78b48ef9eb3b20992b9c3488963c/src/commands/serve.js#L77 75 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 76 | try { > 77 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 78 | child.on("error", () => { }); 79 | child.unref();
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/6f91dbb6007c78b48ef9eb3b20992b9c3488963c/src/commands/serve.js#L77 75 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 76 | try { > 77 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 78 | child.on("error", () => { }); 79 | child.unref();
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/6f91dbb6007c78b48ef9eb3b20992b9c3488963c/src/commands/serve.ts#L100 98 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 99 | try { > 100 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 101 | child.on("error", () => {}); 102 | child.unref();
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/6f91dbb6007c78b48ef9eb3b20992b9c3488963c/src/commands/serve.ts#L100 98 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 99 | try { > 100 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 101 | child.on("error", () => {}); 102 | child.unref();
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/6f91dbb6007c78b48ef9eb3b20992b9c3488963c/src/commands/try.js#L84 82 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 83 | try { > 84 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 85 | child.on("error", () => { }); 86 | child.unref();
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/6f91dbb6007c78b48ef9eb3b20992b9c3488963c/src/commands/try.js#L84 82 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 83 | try { > 84 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 85 | child.on("error", () => { }); 86 | child.unref();
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/6f91dbb6007c78b48ef9eb3b20992b9c3488963c/src/commands/try.ts#L107 105 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 106 | try { > 107 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 108 | child.on("error", () => {}); 109 | child.unref();
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/6f91dbb6007c78b48ef9eb3b20992b9c3488963c/src/commands/try.ts#L107 105 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 106 | try { > 107 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 108 | child.on("error", () => {}); 109 | child.unref();
Package was published without Sigstore provenance. Consider requesting the maintainer enable provenance via CI/CD.
v0.3.0
13 findingsNewly added source file contains lines over 3000 chars, suggesting minified or obfuscated code. New obfuscated files are a strong attack indicator.
Newly added source file contains lines over 3000 chars, suggesting minified or obfuscated code. New obfuscated files are a strong attack indicator.
Accessing /etc/passwd or /etc/shadow — credential harvesting on Linux Source: https://github.com/stigmer/scenar/blob/d4a899ae5507059aebc0fff3f2aee48760c89bdd/src/__tests__/serve-request-path.test.ts#L27 25 | it("rejects parent-directory traversal in every form", () => { 26 | expect(resolveStaticPath("/../secret")).toBeNull(); > 27 | expect(resolveStaticPath("/assets/../../etc/passwd")).toBeNull(); 28 | expect(resolveStaticPath("/%2e%2e/secret")).toBeNull(); 29 | expect(resolveStaticPath("/foo/%2e%2e/%2e%2e/bar")).toBeNull();
Accessing /etc/passwd or /etc/shadow — credential harvesting on Linux Source: https://github.com/stigmer/scenar/blob/d4a899ae5507059aebc0fff3f2aee48760c89bdd/src/__tests__/serve-static-server.test.ts#L86 84 | // Sent verbatim via node:http so the "%2e%2e" survives to the server. 85 | expect(await rawGetStatus(server.url, "/%2e%2e/%2e%2e/secret")).toBe(400); > 86 | expect(await rawGetStatus(server.url, "/assets/%2e%2e/%2e%2e/etc/passwd")).toBe(400); 87 | }); 88 | });
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/d4a899ae5507059aebc0fff3f2aee48760c89bdd/src/commands/serve.js#L78 76 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 77 | try { > 78 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 79 | child.on("error", () => { }); 80 | child.unref();
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/d4a899ae5507059aebc0fff3f2aee48760c89bdd/src/commands/serve.js#L78 76 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 77 | try { > 78 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 79 | child.on("error", () => { }); 80 | child.unref();
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/d4a899ae5507059aebc0fff3f2aee48760c89bdd/src/commands/serve.ts#L101 99 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 100 | try { > 101 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 102 | child.on("error", () => {}); 103 | child.unref();
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/d4a899ae5507059aebc0fff3f2aee48760c89bdd/src/commands/serve.ts#L101 99 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 100 | try { > 101 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 102 | child.on("error", () => {}); 103 | child.unref();
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/d4a899ae5507059aebc0fff3f2aee48760c89bdd/src/commands/try.js#L84 82 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 83 | try { > 84 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 85 | child.on("error", () => { }); 86 | child.unref();
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/d4a899ae5507059aebc0fff3f2aee48760c89bdd/src/commands/try.js#L84 82 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 83 | try { > 84 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 85 | child.on("error", () => { }); 86 | child.unref();
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/d4a899ae5507059aebc0fff3f2aee48760c89bdd/src/commands/try.ts#L107 105 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 106 | try { > 107 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 108 | child.on("error", () => {}); 109 | child.unref();
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/d4a899ae5507059aebc0fff3f2aee48760c89bdd/src/commands/try.ts#L107 105 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 106 | try { > 107 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 108 | child.on("error", () => {}); 109 | child.unref();
Package was published without Sigstore provenance. Consider requesting the maintainer enable provenance via CI/CD.
v0.2.1
12 findingsNewly added source file contains lines over 3000 chars, suggesting minified or obfuscated code. New obfuscated files are a strong attack indicator.
Accessing /etc/passwd or /etc/shadow — credential harvesting on Linux Source: https://github.com/stigmer/scenar/blob/56408a359c6d5ff408cfba59d60b693096c6f7fc/src/__tests__/serve-request-path.test.ts#L27 25 | it("rejects parent-directory traversal in every form", () => { 26 | expect(resolveStaticPath("/../secret")).toBeNull(); > 27 | expect(resolveStaticPath("/assets/../../etc/passwd")).toBeNull(); 28 | expect(resolveStaticPath("/%2e%2e/secret")).toBeNull(); 29 | expect(resolveStaticPath("/foo/%2e%2e/%2e%2e/bar")).toBeNull();
Accessing /etc/passwd or /etc/shadow — credential harvesting on Linux Source: https://github.com/stigmer/scenar/blob/56408a359c6d5ff408cfba59d60b693096c6f7fc/src/__tests__/serve-static-server.test.ts#L86 84 | // Sent verbatim via node:http so the "%2e%2e" survives to the server. 85 | expect(await rawGetStatus(server.url, "/%2e%2e/%2e%2e/secret")).toBe(400); > 86 | expect(await rawGetStatus(server.url, "/assets/%2e%2e/%2e%2e/etc/passwd")).toBe(400); 87 | }); 88 | });
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/56408a359c6d5ff408cfba59d60b693096c6f7fc/src/commands/serve.js#L76 74 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 75 | try { > 76 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 77 | child.on("error", () => { }); 78 | child.unref();
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/56408a359c6d5ff408cfba59d60b693096c6f7fc/src/commands/serve.js#L76 74 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 75 | try { > 76 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 77 | child.on("error", () => { }); 78 | child.unref();
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/56408a359c6d5ff408cfba59d60b693096c6f7fc/src/commands/serve.ts#L97 95 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 96 | try { > 97 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 98 | child.on("error", () => {}); 99 | child.unref();
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/56408a359c6d5ff408cfba59d60b693096c6f7fc/src/commands/serve.ts#L97 95 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 96 | try { > 97 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 98 | child.on("error", () => {}); 99 | child.unref();
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/56408a359c6d5ff408cfba59d60b693096c6f7fc/src/commands/try.js#L84 82 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 83 | try { > 84 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 85 | child.on("error", () => { }); 86 | child.unref();
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/56408a359c6d5ff408cfba59d60b693096c6f7fc/src/commands/try.js#L84 82 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 83 | try { > 84 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 85 | child.on("error", () => { }); 86 | child.unref();
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/56408a359c6d5ff408cfba59d60b693096c6f7fc/src/commands/try.ts#L107 105 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 106 | try { > 107 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 108 | child.on("error", () => {}); 109 | child.unref();
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/56408a359c6d5ff408cfba59d60b693096c6f7fc/src/commands/try.ts#L107 105 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 106 | try { > 107 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 108 | child.on("error", () => {}); 109 | child.unref();
Package was published without Sigstore provenance. Consider requesting the maintainer enable provenance via CI/CD.
v0.2.0
7 findingsAccessing /etc/passwd or /etc/shadow — credential harvesting on Linux Source: https://github.com/stigmer/scenar/blob/b7b27e68c8840592fe2dd77c3bcb1c7ef61dac59/src/__tests__/serve-request-path.test.ts#L27 25 | it("rejects parent-directory traversal in every form", () => { 26 | expect(resolveStaticPath("/../secret")).toBeNull(); > 27 | expect(resolveStaticPath("/assets/../../etc/passwd")).toBeNull(); 28 | expect(resolveStaticPath("/%2e%2e/secret")).toBeNull(); 29 | expect(resolveStaticPath("/foo/%2e%2e/%2e%2e/bar")).toBeNull();
Accessing /etc/passwd or /etc/shadow — credential harvesting on Linux Source: https://github.com/stigmer/scenar/blob/b7b27e68c8840592fe2dd77c3bcb1c7ef61dac59/src/__tests__/serve-static-server.test.ts#L86 84 | // Sent verbatim via node:http so the "%2e%2e" survives to the server. 85 | expect(await rawGetStatus(server.url, "/%2e%2e/%2e%2e/secret")).toBe(400); > 86 | expect(await rawGetStatus(server.url, "/assets/%2e%2e/%2e%2e/etc/passwd")).toBe(400); 87 | }); 88 | });
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/b7b27e68c8840592fe2dd77c3bcb1c7ef61dac59/src/commands/serve.js#L76 74 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 75 | try { > 76 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 77 | child.on("error", () => { }); 78 | child.unref();
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/b7b27e68c8840592fe2dd77c3bcb1c7ef61dac59/src/commands/serve.js#L76 74 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 75 | try { > 76 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 77 | child.on("error", () => { }); 78 | child.unref();
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/b7b27e68c8840592fe2dd77c3bcb1c7ef61dac59/src/commands/serve.ts#L97 95 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 96 | try { > 97 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 98 | child.on("error", () => {}); 99 | child.unref();
Silent detached process — runs invisibly in the background (reverse shells, miners) Source: https://github.com/stigmer/scenar/blob/b7b27e68c8840592fe2dd77c3bcb1c7ef61dac59/src/commands/serve.ts#L97 95 | const command = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open"; 96 | try { > 97 | const child = spawn(command, [url], { stdio: "ignore", detached: true, shell: platform === "win32" }); 98 | child.on("error", () => {}); 99 | child.unref();
Package was published without Sigstore provenance. Consider requesting the maintainer enable provenance via CI/CD.
v0.1.20
1 findingPackage was published without Sigstore provenance. Consider requesting the maintainer enable provenance via CI/CD.