Skill Trust Decision

Dpetclaw 龙虾守护宠物

Dpetclaw 龙虾守护宠物是一个合法的桌面 AI 语音助手,具有声纹认证、语音识别和 OpenClaw 集成功能。代码审查未发现恶意行为,但存在轻微配置瑕疵(硬编码路径、shell=True 使用)

Install decision first Source: ClawHub Scanned: Apr 6, 2026
Files 29
Artifacts 77
Violations 0
Findings 4

Why this conclusion was reached

0/4 dimensions flagged
Pass
Declared vs actual capability

Declared resources and inferred behavior are broadly aligned.

Review
Hidden execution and egress

77 lower-risk artifacts were extracted and still need context.

Pass
Attack chain and severe findings

There is no explicit malicious chain in the report.

Review
Dependencies and supply chain hygiene

3 dependency or supply-chain issues need attention.

What drove the risk score up

subprocess.Popen 使用 shell=True +10

app.py:694 和 openclaw_client.py:65 使用 shell=True 执行本地脚本,存在潜在命令注入风险但 context 为受信任的本地启动脚本

硬编码 Windows 用户路径 +5

config.py 中包含 C:\Users\super\... 硬编码路径,为开发遗留配置

权限声明缺失 +5

SKILL.md 未声明 allowed-tools,权限声明宽泛但不构成实质威胁

Most important evidence

Medium Priv Escalation

subprocess 使用 shell=True 执行本地脚本

app.py:694 使用 subprocess.Popen(..., shell=True) 执行 launch_command,存在潜在的命令注入风险。虽然执行的是受信任的本地启动脚本,但 shell=True 应避免使用。

lobster_pet/app.py:694
将 shell=True 改为列表参数形式:subprocess.Popen([self.config.launch_command], ...)
Low Sensitive Access

硬编码的 Windows 用户路径

config.py 中包含硬编码的 Windows 用户路径(如 C:\Users\super\...),这是开发环境遗留配置,在不同用户环境下会失效。

lobster_pet/config.py:31
使用 Path.home() / 'Desktop' / ... 动态获取用户桌面路径
Low Doc Mismatch

SKILL.md 缺少 allowed-tools 声明

SKILL.md 未声明 allowed-tools 权限,导致无法确认实际权限范围。

SKILL.md:1
在 SKILL.md 中添加 allowed-tools 字段,明确声明所需的工具权限
Info Supply Chain

requirements.txt 无版本锁定

requirements.txt 中依赖无版本锁定(如 SpeechRecognition>=3.14),存在供应链风险。

requirements.txt:1
锁定依赖版本以防止依赖混淆攻击

Declared capability vs actual capability

Filesystem Pass
Declared NONE
→
Inferred READ
代码仅读取配置文件和声纹模型
Network Pass
Declared READ
→
Inferred READ
仅与 SiliconFlow API 和本地 OpenClaw Gateway 通信
Shell Pass
Declared NONE
→
Inferred WRITE
app.py:694 subprocess.Popen 执行启动脚本
Environment Pass
Declared NONE
→
Inferred READ
仅读取 SILICONFLOW_API_KEY

Suspicious artifacts and egress

Medium External URL
https://cloud.siliconflow.cn

README.md:34

Medium External URL
https://alphacephei.com/vosk/models/vosk-model-small-cn-0.22.zip

README.md:103

Medium External URL
https://alphacephei.com/vosk/models

README.md:107

Medium External URL
http://127.0.0.1:19001/

lobster_pet/app.py:1254

Medium External URL
https://api.siliconflow.cn/v1/chat/completions

lobster_pet/chat_client.py:40

Medium External URL
https://api.siliconflow.cn/v1/audio/speech

lobster_pet/tts_client.py:44

Medium External URL
https://registry.npmmirror.com/@electron/get/-/get-2.0.3.tgz

package-lock.json:16

Medium External URL
https://registry.npmmirror.com/@sindresorhus/is/-/is-4.6.0.tgz

package-lock.json:38

Medium External URL
https://registry.npmmirror.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz

package-lock.json:51

Medium External URL
https://registry.npmmirror.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz

package-lock.json:64

Medium External URL
https://registry.npmmirror.com/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz

package-lock.json:77

Medium External URL
https://registry.npmmirror.com/@types/keyv/-/keyv-3.1.4.tgz

package-lock.json:84

Dependencies and supply chain

PackageVersionSourceKnown vulnNotes
SpeechRecognition >=3.14 pip No 无版本锁定
PyAudio >=0.2.14 pip No 无版本锁定
soundfile >=0.12.1 pip No 无版本锁定
speechbrain 未指定 代码导入 No 用于声纹识别模型

File composition

29 files · 6756 lines
Python 18 files · 4402 linesJSON 2 files · 883 linesCSS 1 files · 596 linesJavaScript 4 files · 513 linesMarkdown 2 files · 295 linesHTML 1 files · 64 lines
Files of concern · 5
lobster_pet/app.py Python · 1570 lines
subprocess 使用 shell=True 执行本地脚本 · http://127.0.0.1:19001/
package-lock.json JSON · 871 lines
https://registry.npmmirror.com/@electron/get/-/get-2.0.3.tgz · https://registry.npmmirror.com/@sindresorhus/is/-/is-4.6.0.tgz · https://registry.npmmirror.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz · https://registry.npmmirror.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz · https://registry.npmmirror.com/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz · https://registry.npmmirror.com/@types/keyv/-/keyv-3.1.4.tgz · https://registry.npmmirror.com/@types/node/-/node-22.19.15.tgz · https://registry.npmmirror.com/@types/responselike/-/responselike-1.0.3.tgz · https://registry.npmmirror.com/@types/yauzl/-/yauzl-2.10.3.tgz · https://registry.npmmirror.com/boolean/-/boolean-3.2.0.tgz · https://www.npmjs.com/support · https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz · https://registry.npmmirror.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz · https://registry.npmmirror.com/cacheable-request/-/cacheable-request-7.0.4.tgz · https://registry.npmmirror.com/clone-response/-/clone-response-1.0.3.tgz · https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz · https://registry.npmmirror.com/decompress-response/-/decompress-response-6.0.0.tgz · https://registry.npmmirror.com/mimic-response/-/mimic-response-3.1.0.tgz · https://registry.npmmirror.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz · https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz · https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz · https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz · https://registry.npmmirror.com/electron/-/electron-35.7.5.tgz · https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.5.tgz · https://registry.npmmirror.com/env-paths/-/env-paths-2.2.1.tgz · https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz · https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz · https://registry.npmmirror.com/es6-error/-/es6-error-4.1.1.tgz · https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz · https://registry.npmmirror.com/extract-zip/-/extract-zip-2.0.1.tgz · https://registry.npmmirror.com/fd-slicer/-/fd-slicer-1.1.0.tgz · https://registry.npmmirror.com/fs-extra/-/fs-extra-8.1.0.tgz · https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz · https://registry.npmmirror.com/global-agent/-/global-agent-3.0.0.tgz · https://registry.npmmirror.com/semver/-/semver-7.7.4.tgz · https://registry.npmmirror.com/globalthis/-/globalthis-1.0.4.tgz · https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz · https://registry.npmmirror.com/got/-/got-11.8.6.tgz · https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz · https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz · https://registry.npmmirror.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz · https://registry.npmmirror.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz · https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz · https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz · https://registry.npmmirror.com/jsonfile/-/jsonfile-4.0.0.tgz · https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz · https://registry.npmmirror.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz · https://registry.npmmirror.com/matcher/-/matcher-3.0.0.tgz · https://registry.npmmirror.com/mimic-response/-/mimic-response-1.0.1.tgz · https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz · https://registry.npmmirror.com/normalize-url/-/normalize-url-6.1.0.tgz · https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz · https://registry.npmmirror.com/once/-/once-1.4.0.tgz · https://registry.npmmirror.com/p-cancelable/-/p-cancelable-2.1.1.tgz · https://registry.npmmirror.com/pend/-/pend-1.2.0.tgz · https://registry.npmmirror.com/progress/-/progress-2.0.3.tgz · https://registry.npmmirror.com/pump/-/pump-3.0.4.tgz · https://registry.npmmirror.com/quick-lru/-/quick-lru-5.1.1.tgz · https://registry.npmmirror.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz · https://registry.npmmirror.com/responselike/-/responselike-2.0.1.tgz · https://registry.npmmirror.com/roarr/-/roarr-2.15.4.tgz · https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz · https://registry.npmmirror.com/semver-compare/-/semver-compare-1.0.0.tgz · https://registry.npmmirror.com/serialize-error/-/serialize-error-7.0.1.tgz · https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.1.3.tgz · https://registry.npmmirror.com/sumchecker/-/sumchecker-3.0.1.tgz · https://registry.npmmirror.com/type-fest/-/type-fest-0.13.1.tgz · https://registry.npmmirror.com/undici-types/-/undici-types-6.21.0.tgz · https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz · https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz · https://registry.npmmirror.com/yauzl/-/yauzl-2.10.0.tgz
README.md Markdown · 190 lines
https://cloud.siliconflow.cn · https://alphacephei.com/vosk/models/vosk-model-small-cn-0.22.zip · https://alphacephei.com/vosk/models
lobster_pet/chat_client.py Python · 139 lines
https://api.siliconflow.cn/v1/chat/completions
lobster_pet/config.py Python · 97 lines
硬编码的 Windows 用户路径
Other files · voice_listener.py · pet_window.py · styles.css · speaker_verifier.py · openclaw_bridge.mjs · openclaw_client.py +1

Security positives

声纹验证机制合法且有效,非主人无法操控系统
访客模式设计合理,限制了对本地数据的访问
外部通信仅限 SiliconFlow API 和本地 OpenClaw Gateway,无可疑外泄
代码无混淆、无隐藏后门、无提示词注入
base64 仅用于音频数据编码用于 ASR API,符合正常用途