Dynamic code execution
- Finding
- Dynamic code execution detected.
Security checks across static analysis, malware telemetry, and agentic risk
The listing claims to be an ASR transcription skill, but the supplied files are a TTS and voice-cloning skill that installs persistent local services and changes OpenClaw settings.
Treat this as a TTS/voice-cloning package, not an ASR transcription skill. Do not install it under the xeon_asr listing unless you intentionally want xeontts, are comfortable with external package/model downloads, persistent localhost services, OpenClaw config changes, and local storage of voice samples. Review the install scripts first and test in an isolated environment.
VirusTotal findings are pending for this skill version.
Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.
A user expecting speech-to-text could instead install a voice-generation and voice-cloning service.
The registry-facing description presents an ASR/transcription skill, but the supplied package content describes and implements Xeon TTS voice synthesis and voice cloning.
Name: xeon_asr; Description: Automatically converts received voice messages to text via an external ASR service
Do not install this listing until the publisher aligns the name, slug, description, and package contents or republishes it under the correct TTS identity.
An agent could follow instructions for a different capability than the user intended, causing task routing and installation confusion.
The evaluated skill is presented as xeon_asr, but its instructions tell an agent to install xeontts and to avoid ASR/STT requests.
clawhub install xeontts ... 以下场景禁止走 xeontts:识别语音 / 语音转文字 / STT / ASR
Require the publisher to remove cross-skill install redirection and make the invocation rules match the advertised skill.
Installing the skill depends on external package/model sources that can change over time or be compromised.
The setup script downloads and executes an external installer, installs an unpinned/upgraded PyPI package, and downloads model artifacts without visible revision pinning or checksums.
wget --timeout=120 -q "$conda_url" -O /tmp/miniconda.sh ... bash /tmp/miniconda.sh ... pip install -q --upgrade "$TTS_PIP_SPEC" ... "$hf_cli" download "$repo_id"
Use pinned package versions, model revisions, checksums/signatures, and declare these install requirements in metadata before users run the installer.
The TTS services may keep running after installation and restart automatically unless the user disables the systemd units.
The installer creates persistent user-level services that auto-restart and are enabled immediately.
Restart=always ... systemctl --user enable --now "$TTS_UNIT_NAME" ... systemctl --user enable --now "$NODE_UNIT_NAME"
Install only if persistent background TTS services are desired; provide and document a systemctl-based stop/disable/uninstall path.
Starting this skill could interrupt unrelated Node services or other OpenClaw activity on the same machine.
The start script uses a broad process-kill pattern and restarts the OpenClaw gateway, which is not scoped only to this skill's exact process.
pkill -f "node.*server.js" 2>/dev/null || true ... openclaw gateway restart
Scope process management to this skill's PID file, working directory, or systemd unit, and ask for explicit approval before restarting shared services.
The install may make system-level package changes beyond what a user would expect from the ASR listing.
The setup path can use sudo/root package installation even though the registry requirements declare no required binaries or install spec.
$SUDO apt-get install -y wget curl git lsof net-tools unzip bzip2 ca-certificates ffmpeg
Declare privileged setup requirements clearly and let the user opt in before running OS package-manager commands.
Short voice samples, generated audio paths, and session identifiers may remain on disk during the configured retention period.
The workflow stores uploaded reference audio and session state locally for later voice-cloning steps.
fs.copyFileSync(sourcePath, targetPath); ... session.referenceAudioPath = targetPath; session.referenceDurationSec = durationSec;
Use only with consent for voice cloning, review the references/runtime/output directories, and confirm retention and cleanup behavior.
This is unlikely to affect normal users as shown, but it would be unsafe if untrusted expressions were ever passed to the helper.
The self-check dynamically evaluates JavaScript expressions. The shown calls pass fixed local assertions, but dynamic evaluation is still a fragile pattern.
const fn = new Function("cfg", `return (${process.argv[2]});`);Replace dynamic expression evaluation with explicit JSON property checks.