Back to skill

Security audit

Update Plus

Security checks for vulnerabilities and agentic risk

Overview

This skill is a real backup/update tool, but it can automatically change OpenClaw and installed skills, install scheduled updates, overwrite restores, and has unsafe shell handling that deserves review before use.

Review this before installing. Use it only for OpenClaw environments where you are comfortable with broad backup, restore, and update authority. Avoid cron auto-updates unless you trust every configured package and skill repository, keep remote storage and notifications disabled unless needed, encrypt backups before cloud sync, and do not run restore or update --force without a separate backup you can verify.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • System PersistenceInstalls backdoors, hooks, services, or scheduled tasks that survive the run
  • 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
bin/lib/backup.sh:49
Finding

Configuration-Based Command Injection in Backup Exclusion Handling

Content
View full analysis

Vulnerability Details

File Location: bin/lib/backup.sh, lines 49-63
Vulnerability Type: Shell command injection through eval
Risk Level: High

Vulnerable Code

bash
# Build rsync exclude arguments
local rsync_args="-a"
while IFS= read -r exclude; do
  if [[ -n "$exclude" ]]; then
    rsync_args+=" --exclude=$exclude"
  fi
done <<< "$dir_excludes"

# Default excludes if none specified
if [[ -z "$dir_excludes" ]]; then
  rsync_args+=" --exclude=.venv --exclude=node_modules --exclude=*.pyc --exclude=__pycache__"
fi

# Copy to temp dir
eval rsync $rsync_args "$dir_path/" "$tmp_backup_dir/$dir_label/" 2>/dev/null || {

Technical Analysis

Values from backup_paths[].exclude in ~/.openclaw/update-plus.json are concatenated into a shell command string. The resulting string is passed to eval, which causes the shell to parse configuration content as executable syntax.

An exclusion value containing command substitution, shell separators, redirections, or other metacharacters can therefore execute arbitrary commands. Quoting the source and destination arguments in the original statement does not prevent exploitation because eval reparses the complete expanded command.

Attack Path

  1. An attacker gains the ability to create or modify the OpenClaw configuration file.
  2. The attacker inserts a malicious value into backup_paths[].exclude, such as a value containing command substitution or a shell separator followed by a command.
  3. The user or installed cron job invokes an operation that creates a backup.
  4. create_backup reads the malicious exclusion value and appends it to rsync_args.
  5. The eval statement reparses the value as shell syntax.
  6. The attacker's command executes with the privileges and environment of the account running Update Plus.

Impact Assessment

Successful exploitation provides arbitrary command execution as the current use ...[truncated 277 chars]

Remediation
View remediation

Remediation Suggestions

Remove eval entirely and construct the command with a Bash array:

bash
local rsync_args=(-a)

while IFS= read -r exclude; do
  if [[ -n "$exclude" ]]; then
    rsync_args+=(--exclude="$exclude")
  fi
done <<< "$dir_excludes"

if [[ -z "$dir_excludes" ]]; then
  rsync_args+=(
    --exclude=".venv"
    --exclude="node_modules"
    --exclude="*.pyc"
    --exclude="__pycache__"
  )
fi

rsync "${rsync_args[@]}" \
  "$dir_path/" \
  "$tmp_backup_dir/$dir_label/" 2>/dev/null

In addition:

  • Validate that backup_paths is an array of objects with string paths, labels, and exclusion entries.
  • Reject labels containing path separators or traversal sequences.
  • Restrict configuration-file permissions to the owning user, preferably mode 0600.
  • Fail closed when configuration types are invalid instead of continuing with partially parsed values.

T06 · System Persistence

Warning
Location
bin/lib/cron.sh:7
Finding

Crontab Injection Through an Unvalidated Schedule Argument

Content
View full analysis

Vulnerability Details

File Location: bin/lib/cron.sh, lines 7-24 and 41-47
Vulnerability Type: Scheduled-task injection and persistent command execution
Risk Level: Medium

Vulnerable Code

bash
install_cron() {
  local cron_schedule="${1:-0 2 * * *}"  # Default: 2 AM daily
  local script_path="${SCRIPT_DIR}/update-plus"
  local log_path="${BACKUP_DIR}/cron-update.log"
  local cron_comment="# Update Plus - OpenClaw Auto-update"

  # Build PATH for cron environment (cron has minimal PATH by default)
  local cron_path="/usr/local/bin:/usr/bin:/bin"
  [[ -d "/opt/homebrew/bin" ]] && cron_path="/opt/homebrew/bin:${cron_path}"
  [[ -d "${HOME}/.openclaw/bin" ]] && cron_path="${HOME}/.openclaw/bin:${cron_path}"
  [[ -d "${HOME}/bin" ]] && cron_path="${HOME}/bin:${cron_path}"
  [[ -d "${HOME}/Library/pnpm" ]] && cron_path="${HOME}/Library/pnpm:${cron_path}"
  [[ -d "${HOME}/.npm-global/bin" ]] && cron_path="${HOME}/.npm-global/bin:${cron_path}"
  [[ -d "${HOME}/.yarn/bin" ]] && cron_path="${HOME}/.yarn/bin:${cron_path}"
  [[ -d "${HOME}/.bun/bin" ]] && cron_path="${HOME}/.bun/bin:${cron_path}"

  local cron_cmd="${cron_schedule} PATH=${cron_path} ${script_path} update >> ${log_path} 2>&1"
bash
# Append to crontab
{
  crontab -l 2>/dev/null || true
  echo ""
  echo "$cron_comment"
  echo "$cron_cmd"
} | crontab -

Technical Analysis

cron_schedule is accepted from the first command argument and inserted verbatim into the text passed to crontab -. No check rejects newline characters or verifies that the input represents exactly one valid five-field cron schedule.

A schedule containing a newline can terminate the intended entry and append additional attacker-controlled entries. Those entries survive the current process and execute repeatedly as the current user.

The intended automatic-upda ...[truncated 1191 chars]

Remediation
View remediation

Remediation Suggestions

  • Reject carriage returns, newline characters, NUL bytes, and other control characters in the schedule.
  • Require exactly five schedule fields.
  • Validate every field against a strict cron-field grammar or use a trusted cron-expression parser.
  • Canonicalize script_path and log_path.
  • Generate a fixed wrapper script with restrictive permissions and schedule only that wrapper.
  • Check the result of crontab - and report installation failure rather than always logging success.
  • Use a uniquely delimited managed block so uninstalling the job removes only entries owned by this utility.
  • Display the exact validated entry and require confirmation before installation when used interactively.

T09 · Insecure Skill Coding Practices

Warning
Location
bin/lib/restore.sh:7
Finding

Unsafe Backup Selection and Archive Extraction Before Destructive Restore

Content
View full analysis

Vulnerability Details

File Location: bin/lib/restore.sh, lines 7-47 and 197-205
Vulnerability Type: Path traversal, unsafe archive extraction, and destructive restore
Risk Level: Medium

Vulnerable Code

bash
restore_backup() {
  local backup_id="$1"
  local restore_label="${2:-}"
  local force_restore="${3:-}"

  # Handle --force as second argument
  if [[ "$restore_label" == "--force" ]]; then
    force_restore="--force"
    restore_label=""
  fi

  if [[ -z "$backup_id" ]]; then
    log_error "Please specify a backup ID"
    list_backups
    return 1
  fi

  local backup_path="${BACKUP_DIR}/${backup_id}"
  local tmp_extract_dir=$(mktemp -d)
  local decrypted_path=""
  local should_cleanup_decrypted=false

  if [[ ! -f "$backup_path" ]]; then
    log_error "Backup not found: $backup_path"
    list_backups
    return 1
  fi

  # Decrypt if needed
  if [[ "${backup_path##*.}" == "gpg" ]]; then
    if ! decrypt_backup "$backup_path" decrypted_path; then
      rm -rf "$tmp_extract_dir"
      return 1
    fi
    backup_path="$decrypted_path"
    should_cleanup_decrypted=true
  fi

  # Extract to temp directory
  log_info "Extracting backup..."
  if ! tar -xzf "$backup_path" -C "$tmp_extract_dir" 2>/dev/null; then
bash
log_info "Restoring $label → $target"

# Ensure target parent exists
mkdir -p "$(dirname "$target")"

# Restore with rsync
if rsync -a --delete "$tmp_dir/$label/" "$target/" 2>/dev/null; then

Technical Analysis

backup_id is concatenated directly with BACKUP_DIR. Values containing ../ can therefore select archives outside the configured backup directory, provided the resulting path refers to an existing file.

The selected archive is extracted without first validating its entry names. There are no explicit checks for absolute paths, .. traversal components, unsafe symbolic or hard links, or specia ...[truncated 1655 chars]

Remediation
View remediation

Remediation Suggestions

  • Require backup_id to be a plain filename:
    bash
    [[ "$backup_id" == "$(basename -- "$backup_id")" ]] || return 1
    
  • Permit only the expected backup naming convention and extensions.
  • Canonicalize both BACKUP_DIR and the selected archive path, then verify that the archive remains inside BACKUP_DIR.
  • List archive entries before extraction and reject:
    • absolute paths;
    • .. path components;
    • unexpected top-level labels;
    • unsafe symbolic or hard-link targets;
    • device nodes, FIFOs, and other special files.
  • Extract with restrictive options supported by the target tar implementation and do not preserve archive ownership.
  • Validate every restore destination against an explicit allowlist and reject root, home-directory, or empty destinations.
  • Make destructive deletion a separate explicit option instead of enabling rsync --delete for every restore.
  • Require confirmation specifically for deletion and show a dry-run file list before applying changes.
  • Disable --force in unattended contexts unless the archive has passed integrity and authenticity verification.

T03 · Remote Payload Retrieval and Execution

Warning
Location
bin/lib/update.sh:172
Finding

Execution of Mutable and Unverified Upstream Updates

Content
View full analysis

Vulnerability Details

File Location: bin/lib/update.sh, lines 172-204 and 286-321
Vulnerability Type: Unpinned package and Git supply-chain updates
Risk Level: Medium

Vulnerable Code

bash
# Detect package manager
local pkg_manager=$(detect_package_manager)
log_info "Package manager: $pkg_manager"

# Run appropriate update command
local update_success=false
case "$pkg_manager" in
  pnpm)
    log_info "Running: pnpm add -g openclaw@latest"
    if pnpm add -g openclaw@latest 2>&1; then
      update_success=true
    fi
    ;;
  npm)
    log_info "Running: npm install -g openclaw@latest"
    if npm install -g openclaw@latest 2>&1; then
      update_success=true
    fi
    ;;
  yarn)
    log_info "Running: yarn global add openclaw@latest"
    if yarn global add openclaw@latest 2>&1; then
      update_success=true
    fi
    ;;
  bun)
    log_info "Running: bun add -g openclaw@latest"
    if bun add -g openclaw@latest 2>&1; then
      update_success=true
    fi
    ;;
  *)
    log_warning "Unknown package manager, trying openclaw update..."
    if openclaw update 2>&1; then
      update_success=true
    fi
    ;;
esac
bash
update_single_skill() {
  local skill_dir="$1"
  local source_label="$2"
  local skill_name=$(basename "$skill_dir")

  cd "$skill_dir" || return 1

  # Check if excluded
  if is_excluded "$skill_name"; then
    log_info "Skipping excluded skill: $skill_name"
    return 0
  fi

  # Check for local changes
  if [[ -n "$(git status --porcelain 2>/dev/null)" ]]; then
    log_warning "$skill_name has local changes, skipping"
    return 0
  fi

  if [[ "$DRY_RUN" == true ]]; then
    # Check if updates available
    git fetch --quiet 2>/dev/null
    local behind=$(git rev-list --count HEAD..@{u} 2>/dev/null || echo "0")
    if [[ "$behind" -gt 0 ]]; the
...[truncated 2669 chars]
Remediation
View remediation

Remediation Suggestions

  • Resolve available updates first, then require an explicit approved version instead of installing latest.
  • Verify package integrity, registry provenance, and publisher identity.
  • Disable package lifecycle scripts where feasible, or install into a staging environment before activation.
  • Maintain an allowlist of approved package versions and Git commits.
  • Record and verify each Skill's expected remote URL.
  • Prefer signed tags or signed commits and reject unverifiable updates.
  • Fetch updates without merging, display the exact source, commit, and diff, and require approval before checkout.
  • Detect and block unexpected remote changes, branch changes, force-pushed history, and downgrade attempts.
  • Apply updates transactionally and retain a verified rollback revision.
  • Do not run automatic remote updates from cron unless updates are authenticated and constrained by policy.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Rogue AgentSelf-Modification, Session Persistence
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
Findings (31)

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 48)May include surrounding context.

Optional GPG encryption | | Cloud Sync | Upload backups to Google Drive, S3, Dropbox via rclone | | Notifications | Get notified via WhatsApp, Telegram, or Discord | | Connection Retry | Auto-retry on network failure (configurable) |

Installation

bash
git clone https://github.com/hopyky/update-plus.git ~/.openclaw/skills/update-plus

Add to PATH

bash
mkdir -p ~/bin
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.zshrc  # or ~/.bashrc
source ~/.zshrc
ln -sf ~/.openclaw/skills/update-plus/bin/update-plus ~/bin/update-plus

Dependencies

DependencyRequiredPurpose
gitYesUpdate skills from repositories
jqYesParse JSON configuration
rsyncYesEfficient file copying
rcloneNoCloud storage sync
gpgNoBackup encryption

Configuration

Create ~/.openclaw/update-plus.json:

json
{
  "backup_dir": "~/.openclaw/backups",
  "backup_before_update": true,
  "

Self-Modification

High
Category
Rogue Agent
Confidence
85% confidence
Finding

This skill is explicitly designed to update skills from repositories, which is a self-modification capability affecting the agent's own execution environment. Even if intended for maintenance, self-updating code can introduce unreviewed changes, supply-chain compromise, or persistence of malicious modifications if repository contents are tampered with.

Content

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

md
| Dependency | Required | Purpose |
|------------|----------|---------|
| `git` | Yes | Update skills from repositories |
| `jq` | Yes | Parse JSON configuration |
| `rsync` | Yes | Efficient file copying |
| `rclone` | No | Cloud storage sync |

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

Outbound notifications to WhatsApp, Telegram, or Discord represent external data egress and contact with third-party services outside the expected backup and restore boundary. If not clearly declared, users may expose status details, host metadata, or operational information without informed consent.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

Outbound notifications to WhatsApp, Telegram, or Discord represent external data egress and contact with third-party services outside the expected backup and restore boundary. If not clearly declared, users may expose status details, host metadata, or operational information without informed consent.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

Outbound notifications to WhatsApp, Telegram, or Discord represent external data egress and contact with third-party services outside the expected backup and restore boundary. If not clearly declared, users may expose status details, host metadata, or operational information without informed consent.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

Outbound notifications to WhatsApp, Telegram, or Discord represent external data egress and contact with third-party services outside the expected backup and restore boundary. If not clearly declared, users may expose status details, host metadata, or operational information without informed consent.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
90% confidence
Finding

Outbound notifications to WhatsApp, Telegram, or Discord represent external data egress and contact with third-party services outside the expected backup and restore boundary. If not clearly declared, users may expose status details, host metadata, or operational information without informed consent.

Content

No source excerpt is available for this finding.

Self-Modification

High
Category
Rogue Agent
Confidence
95% confidence
Finding

This function updates all Git-based skills by pulling and applying remote changes into local skill directories. In the context of an agent skill framework, that is effectively self-modification of executable behavior from external repositories, which creates a supply-chain risk if a tracked repo or upstream account is compromised. The danger is amplified because updates are applied automatically across all configured skill directories without any signature verification, pinning, or approval gate.

Content

Scanner excerpt · bin/lib/update.sh (reported line 239)May include surrounding context.

sh
# Update all skills
update_skills() {
  if [[ "$DRY_RUN" == true ]]; then
    log_dry_run "Would update skills"
    log_info "Checking for skill updates..."
    update_git_skills
    return 0

Self-Modification

High
Category
Rogue Agent
Confidence
97% confidence
Finding

The Git-based update routine enumerates skill directories and invokes update logic for each repository, enabling bulk replacement of local skill code from remote origins. Because skills can alter agent behavior, this is a true self-modification pathway and a practical remote code/supply-chain risk rather than a mere maintenance feature. The context makes it more dangerous because the tool is specifically designed to manage and restore skills, so updated content is likely to be trusted and executed later by the agent ecosystem.

Content

Scanner excerpt · bin/lib/update.sh (reported line 252)May include surrounding context.

sh
update_git_skills
}

# Update skills via git pull
update_git_skills() {
  local skills_dirs_json=$(get_skills_dirs)

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 · bin/lib/update.sh (reported line 317)May include surrounding context.

sh
if ! git pull --quiet 2>/dev/null; then
    log_error "$skill_name update failed, rolling back..."
    git reset --hard --quiet "$current_commit"
    return 1
  fi

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The README promotes cloud sync and third-party notifications for backups and status events without clearly warning that backup archives and metadata may be transmitted to external services. Because backups can contain sensitive configuration, workspace contents, and skills, users may unknowingly expose secrets or private data to providers such as Google Drive, S3, Dropbox, WhatsApp, Telegram, or Discord.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% 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 47)May include surrounding context.

Add to PATH

bash
mkdir -p ~/bin
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.zshrc  # or ~/.bashrc
source ~/.zshrc
ln -sf ~/.openclaw/skills/update-plus/bin/update-plus ~/bin/update-plus

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% 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 65)May include surrounding context.

Configuration

Create ~/.openclaw/update-plus.json:

json
{

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% 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 110)May include surrounding context.

Commands

backup — Create Full Backup

bash
update-plus backup

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The restore and forced update commands are documented as routine operations but can overwrite local files, revert state, or continue after backup failure, creating a real risk of destructive changes and unrecoverable data loss. Without an explicit warning, users may invoke these commands without understanding that they can damage the local environment or eliminate rollback safety.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding

The skill advertises shell-based operational capabilities but does not declare any explicit tool scope such as permissions or allowed-tools. That creates an authorization ambiguity where a user or platform may not clearly understand that the skill can invoke shell actions affecting files, repositories, cron, and backups.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill describes backup, restore, cloud sync, and automatic updates without an explicit warning that it can overwrite local state, alter configuration, or transmit backup contents to third-party services. For a tool handling potentially sensitive workspace and config data, omission of these warnings undermines informed consent and increases the chance of unintended destructive or privacy-impacting actions.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
87% confidence
Finding

The installation instructions append to ~/.zshrc and create a persistent PATH modification plus a symlink in ~/bin. This establishes session persistence and changes future shell behavior, which can be abused or cause lasting side effects if done without clear disclosure and user intent.

Content

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

Add to PATH

bash
mkdir -p ~/bin
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
ln -sf ~/.openclaw/skills/update-plus/bin/update-plus ~/bin/update-plus

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The function automatically uploads backup archives to remote storage when a flag is enabled, which expands the skill from local backup/restore into network data exfiltration behavior not clearly conveyed by the description. Even if intended as a convenience feature, sending potentially sensitive configuration and workspace data off-host materially changes the trust and risk model.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The code proceeds to upload a backup immediately after creation without a clear user-facing warning at the point of transmission. Since backups may include secrets and personal or operational data, silent or weakly disclosed transmission can lead to unexpected exposure to third-party storage.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The script automatically removes older local backups based on retention count without an explicit warning or confirmation at deletion time. While retention cleanup is common, backups are safety-critical artifacts, so undisclosed automatic deletion can reduce recoverability and cause accidental loss of restore points.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

This file contains built-in network transfer capability via rclone, enabling backup archives to be copied to a remote destination. Because backups can contain highly sensitive configs, credentials, and user data, any network-capable path increases confidentiality risk unless it is clearly justified, disclosed, and tightly controlled.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The cleanup routine deletes remote backups automatically once retention is exceeded, but this destructive remote behavior is not reflected in the stated skill purpose. Undisclosed remote deletion can cause unintended data loss and surprises users who may assume the skill only manages local backup artifacts.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The code deletes remote backup files automatically during retention cleanup without explicit user disclosure or confirmation. Because remote backups may be the last recoverable copies after a local failure, silent deletion can create unexpected irreversible data loss.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
80% 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 · bin/lib/cron.sh (reported line 6)May include surrounding context.

sh
# Version: 4.0.3
# For OpenClaw

# Install cron job for automatic updates
install_cron() {
  local cron_schedule="${1:-0 2 * * *}"  # Default: 2 AM daily
  local script_path="${SCRIPT_DIR}/update-plus"

Static analysis

No suspicious patterns detected.