glasscast@0.1.0
CAUTION· not startedPublisher claims: "Enables voice-controlled mirroring of a computer screen to Qwen AI glasses S1 by starting, stopping, and checking cast sessions while serving grayscale JPEG frames over a public HTTPS endpoint. It provides MCP tools for cast control while the glasses page refreshes images for a slow secondary display." Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Not started: dependency install failed; the server itself was not observed.- Tested
- the dependency install step · every file read, file written and host contacted by what ran
- Not tested
- server startup · the tool list · tool behavior
What this means for the label: Caution here covers what ran. The server's tools were not exercised with a real credential, so nothing about their behavior is asserted; the credential summary below says what to do with that.
Before you give it your token
- It will ask for
- no credential variables read in the code
- Where it talks to
- no vendor host named in the codeAlso ipify.org, alicdn.com, aliyuncs.com, a.example, evil.example, mybox.local, public.test, rebind.test — not the publisher's domain; check what for before connecting.
- What the honeypot saw
- no credential files read · no network
- What we could not test
- server startup · the tool list · tool behavior
Connect it under the guard. Not started: dependency install failed; the server itself was not observed. The code names no credential variable; the guard pins the network to what the honeypot saw and logs every call.
Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.
Is [email protected] safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (2 scenarios; not started: dependency install failed; the server itself was not observed) on 2026-11-12 and scored it 68/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Access to sensitive file paths; Destructive file system command detected; Privileged sudo command. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 2 scenarios · 0 deviationsStatic findings
# 每一项都可以不改文件:用环境变量(例如写进 .env 后 `. ./.env`)或命令行参数覆盖,命令行优先。Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.docker run --rm \Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# 前提:能免密 SSH 到服务器,并且那个用户能免密 sudo(ssh user@server 'sudo -n true' 不报错),Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# 手动运行:sudo /opt/glasscast/renew-cert.shFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell."${SSH[@]}" "sudo -n cat '$REMOTE_DIR/privkey.pem'" > "$DEST/privkey.pem.new"Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# sudo sh server-setup.sh --check --domain cast.example.com --email [email protected] # 只检查,不改任何东西Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.1. . ./.env && uv run glasscast serve --public-url https://$DOMAINFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# sudo sh /opt/glasscast/deploy/server-setup.sh --check(或 --uninstall、重跑),不用再写参数。Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell."${SSH[@]}" "sudo -n cat '$REMOTE_DIR/fullchain.pem'" > "$DEST/fullchain.pem.new"Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# sudo sh server-setup.sh --domain cast.example.com --email [email protected] --cert-dry-run # 演练签证书Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# sudo sh server-setup.sh --uninstall # 回滚:停用配置(证书保留)Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# sudo sh server-setup.sh --domain cast.example.com --email [email protected] --sshd-keepalive # 部署(幂等)Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# . ./.env && ./deploy/sync_lan_cert.sh # 参数都在 .env 里Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.err " 或手动查看:ssh $SSH_USER@$HOST \"sudo ss -ltnp 'sport = :$REMOTE_PORT'\",确认是旧的 sshd 会话后 kill 掉它。"Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.return subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.err " 或手动查看:ssh $SSH_USER@$HOST \"sudo ss -ltnp 'sport = :$REMOTE_PORT'\",确认是旧的 sshd 会话后 kill 掉它。"Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# . ./.env && ./deploy/tunnel.sh --keep-awake # 参数写在 .env 里(GLASSCAST_TUNNEL_HOST 等),运行期间阻止 macOS 空闲睡眠Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.if [ -n "$WARM_PID" ] && kill -0 "$WARM_PID" 2>/dev/null; thenFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.单张图下载慢于定时器周期时请求会堆积(research.md 9.3),所以图要小,推荐设置见 .env.example。Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# 用 DoH(https://1.1.1.1/dns-query)查:家里路由器开了「DNS 重定向」时,发往 53 端口的查询(包括 dig @1.1.1.1)Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.chmod 0700 "$LE_DIR"Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.ip=$(curl -fsS -m 4 -H 'accept: application/dns-json' "https://1.1.1.1/dns-query?name=$host&type=A" 2>/dev/null \Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.for bad_url in ("ftp://a.example/x", "file:///etc/passwd", "https:///nohost", "https://user:[email protected]/"):Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.ip=$(curl -fsS -m 4 -H 'accept: application/dns-json' "https://1.1.1.1/dns-query?name=$host&type=A" 2>/dev/null \Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.# auto = 经 DoH(https://1.1.1.1/dns-query)查域名的公网 A 记录;也可以直接写 IP;空串 = 不钉住Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls."https://u:[email protected]", "https://x.example:99999"]Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# ./deploy/tunnel.sh -l 8766 -r 18766 -H server.example.com -u ubuntu -i ~/.ssh/id_ed25519Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.chmod 0600 "$tmp"Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.chmod 0640 "$log_file"Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.for bad_url in ("ftp://a.example/x", "file:///etc/passwd", "https:///nohost", "https://user:[email protected]/"):Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.chmod 0755 "$pkg/server-setup.sh" "$pkg/renew-cert.sh"Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.kill "$WARM_PID" 2>/dev/null || trueFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# 每一项都可以不改文件:用环境变量(例如写进 .env 后 `. ./.env`)或命令行参数覆盖,命令行优先。Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.return subprocess.run(cmd, input=pnm, capture_output=True, check=True, timeout=10).stdoutFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.kill "$SSH_PID" 2>/dev/null || trueFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# 用 DoH(https://1.1.1.1/dns-query)查:家里路由器开了「DNS 重定向」时,发往 53 端口的查询(包括 dig @1.1.1.1)Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.# auto = 经 DoH(https://1.1.1.1/dns-query)查域名的公网 A 记录;也可以直接写 IP;空串 = 不钉住Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.# ./deploy/tunnel.sh -l 8766 -r 18766 -H server.example.com -u ubuntu -i ~/.ssh/id_ed25519Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.proc = subprocess.Popen(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.if [ -n "$SSH_PID" ] && kill -0 "$SSH_PID" 2>/dev/null; thenFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.out = subprocess.run([path, "-version"], capture_output=True, text=True, timeout=5)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.chmod 0700 "$SITE_DIR/log"Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.chmod 700 "$DEST"Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.result = subprocess.run([str(script), "--version"], capture_output=True, text=True, timeout=60, env=child_env())Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.Cost to the agent
Tokens estimated at four characters each. The tool list is re-read by the agent on every turn, so it is the number to compare between servers that do the same job: ranked across the index.
Known vulnerabilities
Vulnerability advisories (OSV) cover npm and PyPI packages; this registry has no advisory database.
What would make this Verified
12 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim edint386: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Access to sensitive file paths≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- Destructive file system command detected≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- Privileged sudo command≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- HTTP URL with a raw public IP address≈ +4 on the totalReplace encoded or assembled strings with plain literals and remove undeclared network calls.
- References a credential file in the home directory≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.