Dangerous exec
- Finding
- Shell command execution detected (child_process).
Security checks across static analysis, malware telemetry, and agentic risk
The skill’s Google Flow automation is purpose-related, but it handles Google session tokens/cookies and leaves a CDP-controlled Chrome profile running in ways users should review carefully.
Only install if you are comfortable letting the skill automate a logged-in Google Flow browser session. Use a dedicated Chrome/Google profile, confirm the consent prompt is actually performed, protect or delete the stored cookies.json when done, close the remote-debugging Chrome instance after use, and prefer installing Bun directly instead of relying on npx at runtime.
VirusTotal findings are pending for this skill version.
Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.
The skill can use and retain reusable Google Flow session credentials for the logged-in account.
The skill uses cached Google Flow cookies to obtain an OAuth access token and persists refreshed auth material, while the registry metadata declares no primary credential.
const refreshed = await refresh_token_via_session(cached.cookies, verbose); ... await write_cookie_file(refreshed, cached.cookies, resolveFlowWebCookiePath(), 'refresh')
Use a dedicated Chrome/Google profile, treat the cookie file as sensitive, and require the publisher to declare the Google session credential and storage behavior clearly.
An authenticated browser profile and debugging port may remain available locally after image generation finishes.
Chrome is launched with a remote debugging port and a persistent profile, then detached from the parent process, so it may continue running after the skill task.
`--remote-debugging-port=${get_cdp_port()}`, `--user-data-dir=${userDataDir}` ... const child = spawn(cmdExe, args, { detached: true, stdio: 'ignore' }); child.unref();Close the launched Chrome instance after use, use a dedicated profile, and prefer code that records and terminates the spawned process or provides a clear cleanup command.
If the script is invoked directly or the agent skips the markdown workflow, credential/session access can begin without the documented consent prompt.
The entry point starts authentication and normal generation through client.init(); the consent workflow described in SKILL.md is not enforced in this executable before those calls.
if (args.login) { process.env.FLOW_WEB_LOGIN = '1'; await client.init(); ... } ... await client.init();Implement the consent-file check in the script itself, not only in instructions, before any login, token extraction, or generation action.
A malformed or attacker-controlled local environment value could potentially change the shell command that runs.
An environment-derived Windows path is interpolated into a shell command rather than passed as an argument array.
return execSync(`wslpath -u "${rawWindowsPath}"`, { encoding: 'utf-8', timeout: 5000 }).trim() || null;Replace execSync string interpolation with execFileSync or spawn using an argument array.
The first run may depend on a package fetched through the local npm/npx toolchain.
If Bun is not installed, the documented fallback executes Bun via npx at runtime rather than relying only on a preinstalled, pinned binary.
${BUN_X} = `bun` if installed, else `npx -y bun`Install Bun from a trusted source before use, or require a pinned/runtime-managed dependency path.
While expected for UI automation, any local process that can reach the debugging port may be able to interact with that browser profile.
The skill communicates with a localhost Chrome DevTools Protocol endpoint that controls an authenticated browser profile.
fetch_with_timeout(`http://127.0.0.1:${port}/json/version`, { timeout_ms: 5_000 }); ... CdpConnection.connect(wsUrl, 15_000)Keep the debug port local, use a dedicated profile and nondefault port where possible, and close the debugging browser when finished.