T07 · Tool Hijacking and Spoofing
- Location
scripts/security_audit.sh:13- Finding
Hard-Coded External Audit Runner Enables Tool Hijacking
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This security-audit skill is mostly purpose-aligned, but one wrapper can run an unreviewed hard-coded external audit script and the advertised fail-closed behavior is not reliably enforced.
Review before installing. Prefer invoking artifact/scripts/run_audit_json.sh directly from the skill directory, not scripts/security_audit.sh, until the wrapper is fixed to call the packaged runner. Run it in a read-only, network-denied sandbox against an explicit target path, and do not rely only on shell exit status from the wrapper; parse the JSON .ok field and scanner error state.
scripts/security_audit.sh:13Hard-Coded External Audit Runner Enables Tool Hijacking
scripts/run_audit_json.sh:44Scanner Errors Are Silently Converted into Zero Findings
scripts/run_audit_json.sh:48Semgrep Auto Configuration Conflicts with the No-Network Permission Declaration
SKILL.md:4Unpinned pip and pipx Installation Executes Mutable Third-Party Dependencies
The declared behavior and the described audit guarantees do not fully match the actual enforced behavior, including hard-fail manifest requirements and fingerprinting that are not clearly disclosed. In a security tool, this mismatch is dangerous because operators may rely on advertised scans and decision criteria that are absent, incomplete, or materially different, leading to false assurance or unintended denial of use in zero-trust workflows.
Referenced artifact was not completely inspected
bash scripts/run_audit_json.sh <path>
Referenced artifact was not completely inspected
bash scripts/run_audit_json.sh <path>
Referenced artifact was not completely inspected
bash scripts/run_audit_json.sh <path>
Referenced artifact was not completely inspected
bash scripts/run_audit_json.sh <path>
Referenced artifact was not completely inspected
bash scripts/run_audit_json.sh <path>
Referenced artifact was not completely inspected
bash scripts/run_audit_json.sh <path>
This wrapper advertises fail-closed security auditing but unconditionally exits 0, even when the underlying audit script reports findings or operational failure. In automation, CI, or agent execution flows that rely on process exit status to block unsafe installs or enablement, this converts a security gate into a best-effort report and can allow vulnerable or malicious skills to pass unchecked.
Without declared permissions the skill's intent is opaque and cannot be validated.
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.
PERSISTENCE_GLOBS = [
"**/*.service",
"**/*.timer",
"**/*.plist",
"**/crontab",
"**/cron.*",
"**/systemd/**",
The comments claim the script preserves signal via exit code, but the implementation always exits 0, which is misleading and dangerous for maintainers and integrators. This discrepancy increases the chance that downstream code assumes the shell status is meaningful and silently ignores audit findings or execution errors.
This code performs full-file SHA-256 hashing across the audited repository, which is a substantive read/analysis operation over user data. While the module docstring says it outputs JSON and includes a fingerprint section, there is no explicit runtime disclosure, prompt, or comment near the behavior warning users that complete file contents will be processed for hashing.
The script accesses OPENCLAW_AUDIT_LEVEL from the environment, which falls under sensitive environment access checks for this audit rubric. Although this particular variable is not a credential, the code does not provide any nearby disclosure or comment at the access site explaining that environment configuration will influence behavior.
No suspicious patterns detected.