扫描报告
5 /100
gstack
Fast headless browser for QA testing and site dogfooding via Playwright/Chromium
gstack 是一个合法的 Playwright 驱动的无头浏览器 QA 工具,所有声称的能力与实际行为一致,无恶意功能。预扫描标记的 IOC 均为文档示例(test fixtures 和 README 安装/卸载说明),非运行时危险。
可以安装
该技能安全,可直接使用。无需修改。
安全发现 3 项
| 严重性 | 安全发现 | 位置 |
|---|---|---|
| 提示 | 预扫描 IOC 非真实危险 文档欺骗 | README.md, browse/test/cookie-import-browser.test.ts:629, 641, 8, 25 |
| 提示 | Keychain 访问有合理用途 敏感访问 | browse/src/cookie-import-browser.ts:160 |
| 低危 | Playwright 依赖无版本锁定上限 供应链 | package.json:1 |
| 资源类型 | 声明权限 | 推断权限 | 状态 | 证据 |
|---|---|---|---|---|
| 浏览器 | WRITE | WRITE | ✓ 一致 | SKILL.md 声明使用 headless Chromium,代码使用 Playwright 实现 |
| 文件系统 | READ | READ | ✓ 一致 | Read 工具用于读取页面内容、HTML、截图等,eval/chain 命令有路径限制(/tmp 或 cwd) |
| 命令执行 | WRITE | WRITE | ✓ 一致 | Bash 用于执行 browse 二进制,setup 时安装 bun,无其他 shell 执行 |
| 网络访问 | NONE | READ | ✓ 一致 | 通过 goto 命令访问用户指定 URL,server 仅监听 127.0.0.1 localhost |
| 环境变量 | NONE | READ | ✓ 一致 | 代码仅读取 _CONTRIB、_BRANCH 等会话元信息,无凭证收集行为 |
| 技能调用 | NONE | NONE | — | 无跨技能调用 |
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 | 否 | 仅指定最低版本,建议锁定版本上限 |
diff | ^7.0.0 | npm | 否 | 纯文本 diff 库,无安全风险 |
安全亮点
✓ 工具行为与文档声明完全一致,无阴影功能
✓ 所有网络通信仅在 127.0.0.1 localhost,带 Bearer token 认证
✓ Cookie 导入有完整的 SQL 注入防护(参数化查询)、路径遍历检查、profile 名称白名单验证
✓ 代码无 base64 编码执行、无 eval(atob(...))、无裸 IP 请求、无凭证外传
✓ Cookie 解密使用标准 Chromium v10 格式(PBKDF2 + AES-128-CBC),无自制弱加密
✓ Eval/chain 命令限制路径于 /tmp 或 cwd,防止任意文件执行
✓ Legacy /tmp 状态文件清理有进程 PID 验证,防止误杀其他进程
✓ Auto-shutdown 机制(30min idle)防止浏览器进程泄露
✓ 所有 skill SKILL.md 均从模板生成,行为可审计