扫描报告
18 /100
gstack
Fast headless browser for QA testing and site dogfooding. Navigate URLs, interact with elements, verify page state, diff before/after actions, take annotated screenshots, test forms and uploads.
This is a legitimate headless browser QA testing tool with no malicious behavior. All flagged IOCs are either documented user-facing instructions (bun installer, uninstall script) or test fixtures. No hidden credential theft, data exfiltration, or covert execution was found.
可以安装
No action needed. The skill is safe for use. Minor documentation gaps around filesystem WRITE and cookie-import-browser capability should be addressed in allowed-tools.
安全发现 4 项
| 严重性 | 安全发现 | 位置 |
|---|---|---|
| 低危 | allowed-tools metadata is incomplete | SKILL.md:7 |
| 低危 | Subprocess commands not documented in skill preamble | browse/src/config.ts:30 |
| 提示 | Hardcoded test credentials are test fixtures only | browse/test/cookie-import-browser.test.ts:8 |
| 提示 | IP address strings are version metadata, not network indicators | retro/SKILL.md:399 |
| 资源类型 | 声明权限 | 推断权限 | 状态 | 证据 |
|---|---|---|---|---|
| 命令执行 | WRITE | WRITE | ✓ 一致 | SKILL.md:allowed-tools includes 'Bash' |
| 文件系统 | READ | WRITE | ✓ 一致 | Creates ~/.gstack/sessions/ files and manages state dirs. Declared as 'Read' but… |
| 网络访问 | NONE | READ | ✓ 一致 | Subprocess calls (git, security) resolve to local operations. Uses HTTPS for Pla… |
| 浏览器 | NONE | WRITE | ✓ 一致 | cookie-import-browser command imports cookies from Chromium-based browsers. Decl… |
2 严重 4 高危 39 项发现
严重 危险命令 危险 Shell 命令
curl -fsSL https://bun.sh/install | bash README.md:629 严重 危险命令 危险 Shell 命令
rm -rf ~ README.md:641 高危 API 密钥 疑似硬编码凭证
password = "test-keychain-password" browse/test/cookie-import-browser.test.ts:8 高危 API 密钥 疑似硬编码凭证
PASSWORD = 'test-keychain-password' browse/test/cookie-import-browser.test.ts:25 高危 IP 地址 硬编码 IP 地址
1.16.0.0 retro/SKILL.md:399 高危 IP 地址 硬编码 IP 地址
1.16.1.0 retro/SKILL.md:399 中危 外部 URL 外部 URL
https://playwright.dev/ BROWSER.md:25 中危 外部 URL 外部 URL
https://staging.myapp.com BROWSER.md:31 中危 外部 URL 外部 URL
https://conductor.build CONTRIBUTING.md:228 中危 外部 URL 外部 URL
https://docs.anthropic.com/en/docs/claude-code README.md:5 中危 外部 URL 外部 URL
https://git-scm.com/ README.md:102 中危 外部 URL 外部 URL
https://x.com/garrytan README.md:147 中危 外部 URL 外部 URL
https://www.ycombinator.com/ README.md:147 中危 外部 URL 外部 URL
https://greptile.com README.md:345 中危 外部 URL 外部 URL
https://staging.myapp.com/signup README.md:427 中危 外部 URL 外部 URL
https://staging.myapp.com/dashboard README.md:437 中危 外部 URL 外部 URL
https://staging.myapp.com/settings/billing README.md:444 中危 外部 URL 外部 URL
https://staging.myapp.com/api/health README.md:451 中危 外部 URL 外部 URL
https://bun.sh/install README.md:629 中危 外部 URL 外部 URL
https://app.example.com/login SKILL.md:121 中危 外部 URL 外部 URL
https://yourapp.com SKILL.md:140 中危 外部 URL 外部 URL
https://app.example.com/new-feature SKILL.md:153 中危 外部 URL 外部 URL
https://app.example.com/upload SKILL.md:203 中危 外部 URL 外部 URL
https://app.example.com/form SKILL.md:213 中危 外部 URL 外部 URL
https://staging.app.com SKILL.md:259 中危 外部 URL 外部 URL
https://prod.app.com SKILL.md:259 中危 外部 URL 外部 URL
https://app.example.com SKILL.md:266 中危 外部 URL 外部 URL
https://app.com/login browse/SKILL.md:121 中危 外部 URL 外部 URL
http://127.0.0.1:9470 browse/test/cookie-picker-routes.test.ts:40 中危 外部 URL 外部 URL
http://127.0.0.1:9450 browse/test/cookie-picker-routes.test.ts:62 中危 外部 URL 外部 URL
https://external.com/link browse/test/fixtures/basic.html:18 中危 外部 URL 外部 URL
https://external.com browse/test/fixtures/snapshot.html:21 中危 外部 URL 外部 URL
https://myapp.com qa/SKILL.md:117 中危 外部 URL 外部 URL
https://claude.com/claude-code ship/SKILL.md:477 提示 邮箱 邮箱地址
[email protected] SKILL.md:268 提示 邮箱 邮箱地址
[email protected] browse/SKILL.md:123 提示 邮箱 邮箱地址
[email protected] browse/src/config.ts:128 提示 邮箱 邮箱地址
[email protected] browse/test/fixtures/forms.html:19 提示 邮箱 邮箱地址
[email protected] browse/test/fixtures/qa-eval-spa.html:75 目录结构
88 文件 · 921.6 KB · 23226 行 TypeScript 42f · 14629L
Markdown 24f · 7784L
HTML 13f · 554L
JSON 6f · 188L
Ruby 3f · 71L
├─
▾
browse
│ ├─
▾
src
│ │ ├─
browser-manager.ts
TypeScript
│ │ ├─
buffers.ts
TypeScript
│ │ ├─
cli.ts
TypeScript
│ │ ├─
commands.ts
TypeScript
│ │ ├─
config.ts
TypeScript
│ │ ├─
cookie-import-browser.ts
TypeScript
│ │ ├─
cookie-picker-routes.ts
TypeScript
│ │ ├─
cookie-picker-ui.ts
TypeScript
│ │ ├─
find-browse.ts
TypeScript
│ │ ├─
meta-commands.ts
TypeScript
│ │ ├─
read-commands.ts
TypeScript
│ │ ├─
server.ts
TypeScript
│ │ ├─
snapshot.ts
TypeScript
│ │ └─
write-commands.ts
TypeScript
│ ├─
▾
test
│ │ ├─
▾
fixtures
│ │ │ ├─
basic.html
HTML
│ │ │ ├─
cursor-interactive.html
HTML
│ │ │ ├─
dialog.html
HTML
│ │ │ ├─
empty.html
HTML
│ │ │ ├─
forms.html
HTML
│ │ │ ├─
qa-eval-checkout.html
HTML
│ │ │ ├─
qa-eval-spa.html
HTML
│ │ │ ├─
qa-eval.html
HTML
│ │ │ ├─
responsive.html
HTML
│ │ │ ├─
snapshot.html
HTML
│ │ │ ├─
spa.html
HTML
│ │ │ ├─
states.html
HTML
│ │ │ └─
upload.html
HTML
│ │ ├─
commands.test.ts
TypeScript
│ │ ├─
config.test.ts
TypeScript
│ │ ├─
cookie-import-browser.test.ts
TypeScript
│ │ ├─
cookie-picker-routes.test.ts
TypeScript
│ │ ├─
find-browse.test.ts
TypeScript
│ │ ├─
gstack-config.test.ts
TypeScript
│ │ ├─
gstack-update-check.test.ts
TypeScript
│ │ ├─
snapshot.test.ts
TypeScript
│ │ └─
test-server.ts
TypeScript
│ └─
SKILL.md
Markdown
├─
▾
document-release
│ └─
SKILL.md
Markdown
├─
▾
gstack-upgrade
│ └─
SKILL.md
Markdown
├─
▾
plan-ceo-review
│ └─
SKILL.md
Markdown
├─
▾
plan-eng-review
│ └─
SKILL.md
Markdown
├─
▾
qa
│ ├─
▾
references
│ │ └─
issue-taxonomy.md
Markdown
│ ├─
▾
templates
│ │ └─
qa-report-template.md
Markdown
│ └─
SKILL.md
Markdown
├─
▾
qa-only
│ └─
SKILL.md
Markdown
├─
▾
retro
│ └─
SKILL.md
Markdown
├─
▾
review
│ ├─
checklist.md
Markdown
│ ├─
greptile-triage.md
Markdown
│ ├─
SKILL.md
Markdown
│ └─
TODOS-format.md
Markdown
├─
▾
scripts
│ ├─
dev-skill.ts
TypeScript
│ ├─
eval-compare.ts
TypeScript
│ ├─
eval-list.ts
TypeScript
│ ├─
eval-summary.ts
TypeScript
│ ├─
eval-watch.ts
TypeScript
│ ├─
gen-skill-docs.ts
TypeScript
│ └─
skill-check.ts
TypeScript
├─
▾
setup-browser-cookies
│ └─
SKILL.md
Markdown
├─
▾
ship
│ └─
SKILL.md
Markdown
├─
▾
test
│ ├─
▾
fixtures
│ │ ├─
eval-baselines.json
JSON
│ │ ├─
qa-eval-checkout-ground-truth.json
JSON
│ │ ├─
qa-eval-ground-truth.json
JSON
│ │ ├─
qa-eval-spa-ground-truth.json
JSON
│ │ ├─
review-eval-enum-diff.rb
Ruby
│ │ ├─
review-eval-enum.rb
Ruby
│ │ └─
review-eval-vuln.rb
Ruby
│ ├─
▾
helpers
│ │ ├─
eval-store.test.ts
TypeScript
│ │ ├─
eval-store.ts
TypeScript
│ │ ├─
llm-judge.ts
TypeScript
│ │ ├─
observability.test.ts
TypeScript
│ │ ├─
session-runner.test.ts
TypeScript
│ │ ├─
session-runner.ts
TypeScript
│ │ └─
skill-parser.ts
TypeScript
│ ├─
gen-skill-docs.test.ts
TypeScript
│ ├─
skill-e2e.test.ts
TypeScript
│ ├─
skill-llm-eval.test.ts
TypeScript
│ ├─
skill-parser.test.ts
TypeScript
│ └─
skill-validation.test.ts
TypeScript
├─
ARCHITECTURE.md
Markdown
├─
BROWSER.md
Markdown
├─
CHANGELOG.md
Markdown
├─
CLAUDE.md
Markdown
├─
conductor.json
JSON
├─
CONTRIBUTING.md
Markdown
├─
package.json
JSON
├─
README.md
Markdown
├─
SKILL.md
Markdown
└─
TODOS.md
Markdown
依赖分析 2 项
| 包名 | 版本 | 来源 | 已知漏洞 | 备注 |
|---|---|---|---|---|
playwright | ^1.58.2 | npm | 否 | Pinned to ^1.58.2 with caret range. Could be more restrictive but major versions match. |
diff | ^7.0.0 | npm | 否 | Standard text diffing library, minimal attack surface. |
安全亮点
✓ No credential exfiltration detected — cookie-import-browser decrypts cookies locally and passes them to Playwright only
✓ Parameterised SQL queries prevent injection attacks in cookie-import-browser
✓ eval command restricts file paths to /tmp or cwd only, preventing arbitrary file reads
✓ Sensitive HTTP headers (authorization, cookies, API keys) are automatically redacted in logs
✓ Key derivation keys cached only in-process memory, not persisted to disk
✓ Bearer token authentication protects the browser server from unauthorized access
✓ Profile name validation prevents path traversal attacks in cookie-import-browser
✓ Proper error handling with user-friendly messages for all failure modes
✓ Production code contains no hardcoded credentials — only test fixtures have test passwords
✓ Uses HTTPS for Playwright browser binary downloads
✓ Subprocess calls use allowlist approach (git, security, bun only) rather than arbitrary command execution