github.com / Tencent
Tencent/ BrowserSkill
TypeScript·1152 files·commit e58b95b·scanned 7h ago·cached ✓
25/100
LOW RISK
Minor findings consistent with the project type. Nothing reachable from install hooks.
score capped at 25 — 9,818 stars — findings likely legitimate code patterns
verdict accurate?
Partial architecture graph
threat-state: lowlive
FINDINGS ░▒▓
what this code does░▒▓
What happens when you open, install or run it, from the findings below.
- when runcrates/bsk-cli/src/cli/update.rs and 2 other files start system processes. crates/bsk-cli/src/cli/update.rs, crates/bsk-cli/src/cli/update/windows.rs, crates/bsk-cli/src/daemon/lockfile.rs
criticalRust process Command usagestd::process::Command can execute arbitrary shell commands. Malware uses it to drop payloads, exfiltrate data, or establish persistence.crates/bsk-cli/src/cli/update.rs
fn verify_executable(exe: &Path, version: &Version) -> Result<()> {
let mut command = std::process::Command::new(exe);
command
.arg("--version")+8criticalRust process Command usagestd::process::Command can execute arbitrary shell commands. Malware uses it to drop payloads, exfiltrate data, or establish persistence.crates/bsk-cli/src/cli/update/windows.rs
fs::copy(std::env::current_exe().unwrap(), &target).unwrap();
let mut running = std::process::Command::new(&target)
.args([
"--exact",+8criticalRust process Command usagestd::process::Command can execute arbitrary shell commands. Malware uses it to drop payloads, exfiltrate data, or establish persistence.crates/bsk-cli/src/daemon/lockfile.rs
for exit_code in [0, 259] {
let mut child = Command::new("cmd.exe")
.args(["/D", "/C", &format!("exit {exit_code}")])
.creation_flags(0x0800_0000) /...+8criticalFunction() constructor detectednew Function() is equivalent to eval() and can execute arbitrary code strings.packages/dsh-plugin-browserskill/tests/client/client-bundle.test.tsx
let client!: { apply(ctx: unknown): void };
new Function("window", source)({
__ModuleLoader__: {
load: ({ factory }: { factory: (require: (id: string) => unknown) => typeof client }) => ...+5criticalFunction() constructor detectednew Function() is equivalent to eval() and can execute arbitrary code strings.packages/dsh-plugin-browserskill/tests/client/step-web-card.test.tsx
let client!: { apply(ctx: unknown): void };
new Function("window", source)({
__ModuleLoader__: {
load: ({ factory }: { factory: (require: (id: string) => unknown) => typeof client }) => ...+5infoBase64 encoding usedatob() or Buffer.from with base64. Common in legitimate code but also used to hide malicious URLs.apps/extension/src/video/encoder.browser.test.ts
);
return Buffer.from(data, "base64");
});
}+2warningHigh-entropy string literalsFound 7 long strings with high Shannon entropy. This is common in obfuscated payloads that hide URLs, keys, or bytecode.evals/browser/cases/regression/cooperation/run.mjs+3
infoSuspicious file in repoExecutable file (install-windows.test.ps1) in repositoryscripts/install-windows.test.ps1+2
infoSuspicious file in repoExecutable file (test-windows-daemon.ps1) in repositoryscripts/test-windows-daemon.ps1+2
warningDependency runs install scripts"<root>/postinstall" executes code during installation. Malicious packages use this to drop payloads before the app even runs.package.json+3
Scores are heuristics. A “safe” verdict means no known-malicious patterns were found — clever malware can look boring. Wrong verdict? Flag it above; confirmed false positives become regression tests.
820 files scanned @ e58b95b | 10/30/2026 | heuristic scan — always review manually
risk by category
code execution25
network & exfiltration2
file system access0
obfuscation3
supply chain13
owasp / injection0
telemetry
files 820/1152rules hit 13engine v10commit e58b95b
github
Tencent/BrowserSkill
Let AI agents use your real, logged-in browser without interrupting your work. CLI + extension for browser automation across any shell-capable AI agent.
9818
701
131d
1152 files
820 scanned(71%)
e58b95b
network indicators░▒▓
Hosts this code names or would connect to. 31 found, decoded and call-site destinations first. Informational, not scored.
- https://api.github.com/repos/urlnext to network callscripts/windows-release.py:56
- https://github.comurlnext to network callscripts/windows-release.py:336 +3 more
- https://api.github.com/repos/Tencent/BrowserSkillurlnext to network callscripts/windows-release.test.py:42
- https://raw.githubusercontent.com/$paste hostscripts/render-version-json.mjs:97
- https://github.com/$urlinstall.sh:17 +1 more
- https://chrome.google.com/webstoreurlapps/extension/src/tools/record.ts:146
- https://chromewebstore.google.com/detail/hhcmgoofomhgciiibhipgmgkgnoenaoiurlcrates/bsk-cli/src/cli/doctor.rs:27
- https://microsoftedge.microsoft.com/addons/detail/browserskill/emacgiaaaiojkkpkddmmdfhmokgmnikgurlcrates/bsk-cli/src/cli/doctor.rs:30
- https://api.github.com/repos/Tencent/BrowserSkill/contributorsurlscripts/update-readme-contributors.mjs:26
- https://avatars.githubusercontent.com/u/$urlscripts/update-readme-contributors.mjs:106
- https://api.github.com/repos/a/b/actions/artifacts/1/zipurlscripts/windows-release.test.py:84
- tool.networkdomainapps/extension/src/cooperation/controller.ts:93 +7 more
- tool.downloaddomainapps/extension/src/cooperation/controller.ts:1313 +13 more
- tool.clickdomainapps/extension/src/debug/manager.ts:47 +32 more
- debug.rundomainapps/extension/src/entrypoints/debug/App.tsx:438
- inspect.networkdomainpackages/dsh-plugin-browserskill/src/browser-tools.ts:250 +6 more
- interact.clickdomainpackages/dsh-plugin-browserskill/src/browser-tools.ts:289 +16 more
- interact.downloaddomainpackages/dsh-plugin-browserskill/src/browser-tools.ts:302 +1 more
- notarization.zipdomainscripts/macos-release.py:222 +3 more
- signed-macos.zipdomainscripts/macos-release.py:254 +6 more
- uploads.github.comdomainscripts/windows-release.py:57
- https://chromewebstore.google.comurltest onlyapps/extension/src/long-screenshot/long-screenshot.browser.test.ts:549
- result.zipdomaintest onlycrates/bsk-cli/tests/cli_parse.rs:487
- window.moved.mouse.dxdomaintest onlyevals/browser/cases/regression/drag-interactions/run.mjs:204
- window.moved.hold.dxdomaintest onlyevals/browser/cases/regression/drag-interactions/run.mjs:206
- window.moved.pointer.dxdomaintest onlyevals/browser/cases/regression/drag-interactions/run.mjs:227
- prompts.endomaintest onlyevals/browser/lib/case-loader.mjs:171
- https://developer.chrome.com/docs/extensions/how-to/web-platform/websocketsurlcomment onlyapps/extension/src/lib/heartbeat.ts:6
- https://developer.chrome.com/docs/extensions/develop/concepts/match-patternsurlcomment onlyapps/extension/src/tools/borrow-confirmation.ts:277
- https://github.com/MoonshotAI/kimi-code/blob/main/docs/en/customization/skills.mdurlcomment onlycrates/bsk-cli/src/skill_install/harness.rs:96
- https://github.com/NousResearch/hermes-agent/blob/main/hermes_constants.pyurlcomment onlycrates/bsk-cli/src/skill_install/harness.rs:321
architecture░▒▓
entry (0) flagged (11) pkg (242)
642 nodes · 1610 edgesscroll to zoom · click node to jump to finding