Back to skill

Security audit

GitHub Memory Sync

Security checks for vulnerabilities and agentic risk

Overview

The skill matches its stated GitHub backup purpose, but it has unsafe defaults and under-scoped behavior that can upload or restore highly sensitive OpenClaw workspace data without enough user control.

Review this skill carefully before installing. Use only a dedicated private GitHub repository and a fine-grained, short-lived token limited to that repository. Do not enable the cron job until the destination is explicit and verified. Avoid full sync unless you have inspected every file that will be uploaded, especially skills, agents, BOOTSTRAP.md, TOOLS.md, USER.md, and memory files. Treat restore as high risk because it can overwrite active agent instructions and skills from remote content.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
Findings (4)

T09 · Insecure Skill Coding Practices

Error
Location
cron-backup.sh:8
Finding

Unattended workspace export can default to an author-associated repository

Content
View full analysis

Vulnerability Details

File Location: cron-backup.sh:8-12, 35-43; CRON.md:101-106
Vulnerability Type: Unsafe hardcoded remote destination combined with scheduled persistence
Risk Level: Critical

Vulnerable Code

cron-backup.sh:8-12:

bash
WORKSPACE_DIR="${WORKSPACE_DIR:-/root/.openclaw/workspace}"
GITHUB_REPO="${GITHUB_REPO:-davinwang/openclaw-memory}"
GITHUB_BRANCH="${GITHUB_BRANCH:-main}"
GITHUB_TOKEN="${GITHUBTOKEN}"
SYNC_SCRIPT="/root/.openclaw/workspace/skills/github-memory-sync/sync.sh"

cron-backup.sh:35-43:

bash
export GITHUBTOKEN="$GITHUB_TOKEN"
export GITHUB_REPO="$GITHUB_REPO"
export GITHUB_BRANCH="$GITHUB_BRANCH"
export WORKSPACE_DIR="$WORKSPACE_DIR"
export SYNC_MODE="full"

cd "$(dirname "$SYNC_SCRIPT")"
bash "$SYNC_SCRIPT" push 2>&1 | tee -a "$LOG_FILE"

CRON.md:101-106:

bash
echo 'export GITHUBTOKEN="github_pat_xxx"' >> ~/.bashrc
echo 'export GITHUB_REPO="davinwang/openclaw-memory"' >> ~/.bashrc
source ~/.bashrc

(crontab -l 2>/dev/null; echo "30 2 * * * /root/.openclaw/workspace/skills/github-memory-sync/cron-backup.sh") | crontab -

Technical Analysis

The cron wrapper substitutes davinwang/openclaw-memory, an author-associated repository, whenever GITHUB_REPO is absent. It then forces SYNC_MODE=full and invokes the upload operation. The documentation reinforces this unsafe destination by presenting it in the complete configuration example.

This behavior contradicts clawhub.yaml, which declares GITHUB_REPO as required, and sync.sh, which otherwise refuses to run without an explicitly configured repository. A security-sensitive destination must fail closed rather than silently falling back to a third-party-associated repository.

The cron mechanism is related to the declared automatic-backup feature, but its use here materially increases the risk: once installed, the operation survives the current session and ...[truncated 1527 chars]

Remediation
View remediation

Remediation Suggestions

  1. Remove the default repository entirely:
    bash
    GITHUB_REPO="${GITHUB_REPO:-}"
    if [ -z "$GITHUB_REPO" ]; then
        echo "GITHUB_REPO must explicitly identify a user-controlled repository" >&2
        exit 1
    fi
    
  2. Remove all examples that use an author-owned or shared repository.
  3. Before the first upload, query GitHub using the authenticated identity and verify that the repository is controlled by the expected user or organization.
  4. Display the authenticated account, repository owner, visibility, branch, and file manifest, then require explicit confirmation.
  5. Refuse automatic backup until the destination has been explicitly approved and recorded.
  6. Make cron installation optional and user-scoped. Do not assume root paths or root privileges.
  7. Default scheduled backups to a minimal allowlist rather than SYNC_MODE=full.
  8. Provide documented removal instructions for the cron entry and associated credentials.

T05 · Unauthorized Access and Privilege Escalation

Error
Location
sync.sh:55
Finding

Default full synchronization recursively exports secret-bearing and executable directories

Content
View full analysis

Vulnerability Details

File Location: sync.sh:55-60, 76-79
Vulnerability Type: Excessive data collection and insufficient secret exclusion
Risk Level: High

Vulnerable Code

sync.sh:55-60:

bash
if [ "$SYNC_MODE" = "full" ] && [ -d "$src/skills" ] && [ "$(ls -A "$src/skills" 2>/dev/null)" ]; then
    mkdir -p "$dst/skills"
    rsync -a --exclude 'node_modules' "$src/skills/" "$dst/skills/" 2>/dev/null || cp -r "$src/skills"/* "$dst/skills/"
    echo "  📁 skills/ 目录"
    count=$((count + 1))
fi

sync.sh:76-79:

bash
if [ "$SYNC_MODE" = "full" ] && [ -d "$src/projects/agents" ] && [ "$(ls -A "$src/projects/agents" 2>/dev/null)" ]; then
    mkdir -p "$dst/projects/agents"
    cp -r "$src/projects/agents"/* "$dst/projects/agents/"
    echo "  📁 projects/agents/ 目录 ($(ls "$src/projects/agents" | wc -l) 个 Agent)"

Technical Analysis

Full mode is the default and recursively copies skills/ and projects/agents/. The only exclusion in the preferred rsync path is node_modules. There are no exclusions for .env files, private keys, API tokens, credential stores, local configuration, backups, or other secret-bearing files.

If rsync is unavailable or fails, the fallback uses unrestricted recursive cp, eliminating even the node_modules exclusion. The copied content is subsequently staged by git add ., committed, and pushed.

This scope exceeds the minimum privileges and data access needed for a memory synchronization function. It also conflicts with the documentation's claim that sensitive credentials should not be synchronized.

Attack Path

  1. A custom Skill or Agent project contains an API key, .env file, private configuration, or other sensitive material.
  2. The user runs sync.sh push without selecting a narrower mode, or the cron wrapper forces SYNC_MODE=full.
  3. The recursive copy includes the sensitive file. 4 ...[truncated 750 chars]
Remediation
View remediation

Remediation Suggestions

  1. Default to an explicit allowlist of documented memory files:
    • MEMORY.md
    • Approved files under memory/
    • Other individually selected Markdown files
  2. Make skills/, projects/agents/, and BOOTSTRAP.md separate opt-in categories.
  3. Apply identical exclusion rules regardless of whether rsync is available.
  4. Exclude common secret-bearing paths and patterns, including:
    • .env, .env.*
    • *.pem, *.key, id_rsa, id_ed25519
    • credential and token files
    • local configuration and backup files
    • nested .git directories
  5. Run a secret scanner against staged content before committing.
  6. Print a complete upload manifest and require approval before the first upload or whenever the scope changes.
  7. Abort rather than falling back to a broader copy mechanism.
  8. Document that deleting an exposed secret from a later commit does not remove it from Git history; exposed credentials must be revoked and rotated.

T09 · Insecure Skill Coding Practices

Error
Location
sync.sh:21
Finding

GitHub personal access token is embedded in Git remote URLs

Content
View full analysis

Vulnerability Details

File Location: sync.sh:21, 131, 177, 200, 263, 306
Vulnerability Type: Plaintext credential exposure through command arguments and Git configuration
Risk Level: High

Vulnerable Code

sync.sh:21:

bash
REPO_URL="https://${GITHUB_TOKEN}@github.com/${GITHUB_REPO}.git"

Representative uses at sync.sh:131 and sync.sh:200:

bash
git remote add origin "$REPO_URL"
bash
git clone -b "$GITHUB_BRANCH" "$REPO_URL" . 2>/dev/null && cloned=true || {
    echo "ℹ️ 克隆失败,尝试初始化新仓库..."
    git init -q
    git remote add origin "$REPO_URL"

Technical Analysis

The personal access token is interpolated directly into an HTTPS repository URL. When used by git clone or git remote add, the credential can appear in process arguments and is persisted in the temporary repository's .git/config.

The temporary directory is created using ordinary mkdir -p without setting a restrictive umask or verifying private permissions. Although an exit trap removes the directory, the credential remains exposed for the duration of the operation and may survive abnormal termination that bypasses normal cleanup.

Local users, diagnostic tooling, process monitors, crash collectors, or backup tools may capture the URL. Git failures may also expose credential-bearing URLs through diagnostics unless all relevant output is reliably redacted.

Attack Path

  1. A synchronization command starts with GITHUBTOKEN configured.
  2. The script constructs a URL containing the plaintext token.
  3. Git receives that URL as a command-line argument or writes it as the origin URL.
  4. A local observer reads process metadata or the temporary .git/config.
  5. The observer extracts the token.
  6. The observer uses the token against GitHub within its granted scope until it expires or is revoked.

Impact Assessment

A captured token can grant read or write access to priva ...[truncated 271 chars]

Remediation
View remediation

Remediation Suggestions

  1. Do not place tokens in repository URLs.
  2. Use a secure Git credential helper or a temporary GIT_ASKPASS implementation.
  3. Create temporary credential files with mode 0600 and set umask 077 before creating the synchronization directory.
  4. Configure the remote using a credential-free URL:
    bash
    git remote add origin "https://github.com/${GITHUB_REPO}.git"
    
  5. Remove transient credentials immediately after authentication and before other Git operations.
  6. Ensure error messages and logs redact credentials.
  7. Prefer fine-grained GitHub tokens restricted to the single backup repository and only the permissions required to read and write repository contents.
  8. Set short token expiration periods and rotate any token suspected of appearing in process listings, logs, or Git configuration.

T03 · Remote Payload Retrieval and Execution

Error
Location
sync.sh:263
Finding

Restore operation imports remotely mutable Agent instructions and executable Skill content without verification

Content
View full analysis

Vulnerability Details

File Location: sync.sh:263-304
Vulnerability Type: Unverified remote content restoration into an active Agent workspace
Risk Level: High

Vulnerable Code

sync.sh:263-304:

bash
git clone -b "$GITHUB_BRANCH" "$REPO_URL" .

local core_files=("MEMORY.md" "SOUL.md" "IDENTITY.md" "USER.md" "TOOLS.md" "HEARTBEAT.md" "AGENTS.md")
for file in "${core_files[@]}"; do
    if [ -f "$file" ]; then
        cp "$file" "$WORKSPACE_DIR/$file"
        count=$((count + 1))
    fi
done

if [ -d "memory" ] && [ "$(ls -A memory 2>/dev/null)" ]; then
    mkdir -p "$WORKSPACE_DIR/memory"
    cp -r memory/* "$WORKSPACE_DIR/memory/"
    count=$((count + 1))
fi

if [ -d "skills" ] && [ "$(ls -A skills 2>/dev/null)" ]; then
    mkdir -p "$WORKSPACE_DIR/skills"
    cp -r skills/* "$WORKSPACE_DIR/skills/"
    count=$((count + 1))
fi

if [ -f "BOOTSTRAP.md" ]; then
    cp "BOOTSTRAP.md" "$WORKSPACE_DIR/BOOTSTRAP.md"
    count=$((count + 1))
fi

if [ -d "projects/agents" ] && [ "$(ls -A projects/agents 2>/dev/null)" ]; then
    mkdir -p "$WORKSPACE_DIR/projects/agents"
    cp -r projects/agents/* "$WORKSPACE_DIR/projects/agents/"
    count=$((count + 1))
fi

Technical Analysis

The restore command clones the current state of a mutable remote branch and directly copies its contents into the active OpenClaw workspace. There is no commit pinning, signature verification, integrity manifest, trusted-hash comparison, quarantine directory, content review, or user confirmation.

The restored data includes persistent memory and Agent-control documents such as SOUL.md, AGENTS.md, and HEARTBEAT.md. It also includes executable or operational content under skills/, projects/agents/, and BOOTSTRAP.md.

Git retrieval alone does not execute the downloaded files during this script. Nevertheless, placing remote Skill code and bootstrap content i ...[truncated 1436 chars]

Remediation
View remediation

Remediation Suggestions

  1. Restore into a newly created quarantine directory rather than directly into the active workspace.
  2. Display the repository owner, exact commit hash, commit signer, and full file diff before installation.
  3. Require signed commits or verify a cryptographically signed manifest against a separately established trust key.
  4. Pin restoration to a user-approved immutable commit rather than the current head of a mutable branch.
  5. Separate ordinary data restoration from instruction and executable restoration.
  6. Require explicit confirmation for:
    • SOUL.md, AGENTS.md, and HEARTBEAT.md
    • BOOTSTRAP.md
    • skills/
    • projects/agents/
  7. Never automatically activate restored Skills or bootstrap content.
  8. Validate paths and reject symlinks, special files, nested repositories, and files outside a strict allowlist.
  9. Preserve local backups and provide a transactional rollback mechanism before replacing active Agent state.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (29)

YARA rule 'backdoor_persistence': Backdoor persistence with malicious payloads (shell commands, SSH key injection, hidden root users) [malware]

High
Category
YARA Match
Confidence
75% confidence
Finding

The YARA hit appears to be triggered by a combination of persistence-related shell commands and appending secrets to ~/.bashrc, not by an obvious backdoor payload. Although this is likely not malware, the example still encourages persistent modification of user environment files and scheduled execution, which increases the blast radius of misconfiguration and may expose credentials over time.

Content

Scanner excerpt · CRON.md (reported line 101)May include surrounding context.

h

查看日志

tail /var/log/openclaw-memory-sync.log

text

## ⚠️ 注意事项

1. **Token 安全** - 确保 cron 环境变量中的 Token 安全
2. **日志轮转** - 定期清理日志文件,避免占用过多空间
3. **网络检查** - 确保服务器能访问 GitHub
4. **失败重试** - 可配置失败后自动重试机制

## 🎯 完整配置示例

```bash
# 1. 设置环境变量
echo 'export GITHUBTOKEN="github_pat_xxx"' >> ~/.bashrc
echo 'export GITHUB_REPO="davinwang/openclaw-memory"' >> ~/.bashrc
source ~/.bashrc

# 2. 添加定时任务
(crontab -l 2>/dev/null; echo "30 2 * * * /root/.openclaw/workspace/skills/github-memory-sync/cron-backup.sh") | crontab -

# 3. 验证
crontab -l

# 4. 手动测试
bash /root/.openclaw/workspace/skills/github-memory-sync/cron-backup.sh

版本: 1.1.0
作者: OpenClaw Workspace
许可: MIT

YARA rule 'backdoor_persistence': Backdoor persistence with malicious payloads (shell commands, SSH key injection, hidden root users) [malware]

High
Category
YARA Match
Confidence
75% confidence
Finding

YARA rule matched a known malware signature (reverse shell, backdoor, ransomware, C2 framework, or info stealer).

Content

Scanner excerpt · README.md (reported line 61)May include surrounding context.

USER.md - 用户信息

  • ✅ MEMORY.md - 长期记忆
  • ✅ TOOLS.md - 工具配置
  • ✅ HEARTBEAT.md - 心跳任务
  • ✅ AGENTS.md - 工作指南
  • ✅ memory/*.md - 日常记忆文件

可选文件

  • ✅ skills/ - 自定义技能
  • ✅ avatars/ - 头像图片
  • ✅ BOOTSTRAP.md - 初始化脚本

⏰ 定时备份

添加自动备份任务

bash
# 每天凌晨 2:30 自动备份
(crontab -l 2>/dev/null; echo "30 2 * * * /root/.openclaw/workspace/skills/github-memory-sync/cron-backup.sh") | crontab -

查看备份日志

bash
tail -f /var/log/openclaw-memory-sync.log

📖 完整文档

🔒 安全提醒

  • ⚠️ 使用 Private 仓库
  • ⚠️ 保护 GitHub Token
  • ⚠️ 定期轮换 Token
  • ⚠️ 不要同步敏感凭证

版本: 1.1.0
作者: OpenClaw Workspace
许可: MIT
GitHub: https://github.com/davinwang/openclaw-memo

Credential Access

High
Category
Privilege Escalation
Confidence
96% confidence
Finding

The skill explicitly instructs collection and storage of a GitHub Personal Access Token with repository write access, and the documented workflows involve backing up highly sensitive workspace content to GitHub. Even though the text includes some safety advice, the skill materially facilitates credential handling and remote exfiltration of sensitive data; compromise, mishandling, or overbroad token use could expose both the repository and the user's private memory/configuration.

Content

Scanner excerpt · SKILL.md (reported line 56)May include surrounding context.

md
### 必需配置

**GitHub Token:**
- 需要一个 Personal Access Token
- 权限要求:`repo`(仓库读写权限)
- 生成地址:https://github.com/settings/tokens/new

Credential Access

High
Category
Privilege Escalation
Confidence
85% confidence
Finding

The skill explicitly requires a GitHub Personal Access Token to operate, which introduces a real credential-handling risk. In the context of a backup skill that syncs the entire OpenClaw workspace, compromise, overbroad scope, or accidental exposure of this token could enable unauthorized repository access and potentially expose sensitive workspace contents uploaded to GitHub.

Content

Scanner excerpt · clawhub.yaml (reported line 24)May include surrounding context.

yaml
env:
  - name: GITHUBTOKEN
    description: GitHub Personal Access Token
    required: true
  - name: GITHUB_REPO
    description: GitHub 仓库 (格式:username/repo)

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · sync.sh (reported line 108)May include surrounding context.

sh
echo "  --full         - 同步完整工作空间(包括 skills/, avatars/ 等)"
    echo ""
    echo "环境变量:"
    echo "  GITHUBTOKEN    - GitHub Personal Access Token"
    echo "  GITHUB_REPO    - GitHub 仓库 (格式:username/repo)"
    echo "  GITHUB_BRANCH  - 分支名称 (默认:main)"
    echo "  WORKSPACE_DIR  - Workspace 目录路径 (默认:/root/.openclaw/workspace)"

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
75% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · sync.sh (reported line 155)May include surrounding context.

sh
git branch -M "$GITHUB_BRANCH"
        git push -u origin "$GITHUB_BRANCH" 2>/dev/null || {
            echo "ℹ️ 远程仓库已有内容,正在合并..."
            git pull origin "$GITHUB_BRANCH" --no-rebase --allow-unrelated-histories
            git push -u origin "$GITHUB_BRANCH"
        }

Missing User Warnings

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The push flow uploads large portions of the workspace, including memory, identity, skills, avatars, and agent configuration, to a remote GitHub repository without an explicit risk warning or confirmation. In this skill's context, those files may contain secrets, prompts, personal data, system instructions, or proprietary agent logic, so silent bulk exfiltration to a third-party service is highly risky.

Content

No source excerpt is available for this finding.

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
75% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · sync.sh (reported line 193)May include surrounding context.

sh
cloned=false
        if [ -d ".git" ]; then
            git fetch origin "$GITHUB_BRANCH" 2>/dev/null && {
                git reset --hard "origin/$GITHUB_BRANCH" 2>/dev/null
                cloned=true
            }
        fi

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
75% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · sync.sh (reported line 204)May include surrounding context.

sh
cloned=false
        if [ -d ".git" ]; then
            git fetch origin "$GITHUB_BRANCH" 2>/dev/null && {
                git reset --hard "origin/$GITHUB_BRANCH" 2>/dev/null
                cloned=true
            }
        fi

Missing User Warnings

High
Category
Not specified by scanner
Confidence
94% confidence
Finding

The pull flow copies remote files directly over local workspace content without prompting, versioned backup, or conflict handling. If the remote repository is stale, compromised, or simply different, local agent state and configuration can be silently overwritten, causing data loss or introduction of attacker-controlled instructions and skills.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
85% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · CRON.md (reported line 9)May include surrounding context.

bash
# 1. 编辑 crontab
crontab -e

# 2. 添加以下行(每天凌晨 2:30 自动备份)
30 2 * * * /root/.openclaw/workspace/skills/github-memory-sync/cron-backup.sh

Session Persistence

Medium
Category
Rogue Agent
Confidence
85% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · CRON.md (reported line 21)May include surrounding context.

bash
# 1. 编辑 crontab
crontab -e

# 2. 添加以下行(每天凌晨 2:30 自动备份)
30 2 * * * /root/.openclaw/workspace/skills/github-memory-sync/cron-backup.sh

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The documentation instructs users to store a GitHub personal access token in shell startup files such as ~/.bashrc or /etc/environment. Those locations are commonly readable by local users, inherited by child processes, and may be unintentionally exposed through backups, debugging, shell history, or environment dumps, making credential compromise more likely.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill documentation is written entirely in Chinese, including setup steps, operational instructions, and safety warnings. This imposes a specific language on users without any visible opt-in, alternative language option, or explanation that the skill is intended only for a Chinese-speaking context.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
85% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · CRON.md (reported line 106)May include surrounding context.

bash
# 每天凌晨 2:30 自动备份
(crontab -l 2>/dev/null; echo "30 2 * * * /root/.openclaw/workspace/skills/github-memory-sync/cron-backup.sh") | crontab -

查看备份日志

Session Persistence

Medium
Category
Rogue Agent
Confidence
85% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · CRON.md (reported line 109)May include surrounding context.

bash
# 每天凌晨 2:30 自动备份
(crontab -l 2>/dev/null; echo "30 2 * * * /root/.openclaw/workspace/skills/github-memory-sync/cron-backup.sh") | crontab -

查看备份日志

Session Persistence

Medium
Category
Rogue Agent
Confidence
85% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · README.md (reported line 61)May include surrounding context.

bash
# 每天凌晨 2:30 自动备份
(crontab -l 2>/dev/null; echo "30 2 * * * /root/.openclaw/workspace/skills/github-memory-sync/cron-backup.sh") | crontab -

查看备份日志

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill description advertises generic backup/sync wording alongside the specific GitHub-memory behavior, which can cause the skill to activate for ordinary backup requests outside its intended scope. In this skill, unintended activation is more dangerous because the documented behavior includes handling highly sensitive workspace files such as SOUL.md, USER.md, MEMORY.md, TOOLS.md, and GitHub credentials, creating a risk of accidental data exfiltration to a remote repository.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The activation keyword list contains ambiguous phrases like '同步 memory' and '备份 memory' without clearly binding them to this product, repository target, or sensitive-file scope. Because this skill performs backup and restore of sensitive configuration and memory material, ambiguous triggers raise the chance of unintended activation and accidental syncing of confidential data.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The conversation trigger list includes generic phrases such as '同步配置' and '恢复备份', which can overlap with many benign support tasks unrelated to this skill. In this context, accidental activation can lead the agent toward repository operations involving sensitive workspace data, increasing the likelihood of unauthorized disclosure or destructive restore actions.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
81% confidence
Finding

This manifest describes the skill's purpose in broad terms but does not define any explicit invocation triggers, scope boundaries, or exclusion conditions. For manifest files, missing specificity about when the skill should activate can cause unintended invocation in contexts involving generic backup or sync requests.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The manifest uses Chinese-language description, tags, examples, and environment variable descriptions without indicating that the skill is locale-specific or offering a language choice. This can constitute a language/locale policy violation because the skill appears to impose a specific language presentation by default.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

Most user-facing help text, status output, and error messages are presented only in Chinese, while the script name and environment variables are English. This imposes a specific language on users without offering a choice or documenting a locale-specific constraint, which is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The script advertises a "memory-only" mode, but copy_workspace_files always includes core workspace files such as SOUL.md, IDENTITY.md, USER.md, TOOLS.md, HEARTBEAT.md, and AGENTS.md. This can cause users to unintentionally upload identity, configuration, and potentially sensitive operational context to GitHub when they expected a narrower backup scope.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
99% confidence
Finding

The help text states that --memory-only excludes files like SOUL.md and IDENTITY.md, but the implementation still copies them. This documentation/behavior mismatch is dangerous because it can mislead users into disclosing more data than intended based on false assurances from the tool itself.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.