Is bharathjanumpally/claw-permission-firewall safe?

https://github.com/openclaw/skills/tree/main/skills/bharathjanumpally/claw-permission-firewall

87
SAFE

The claw-permission-firewall skill contains clean TypeScript implementing a legitimate action-evaluation pipeline, with no prompt injection in SKILL.md and confirmed canary file integrity throughout installation. The primary concern is a .clawhub/lock.json file committed into the skill package that declares 'academic-research-hub' as a hidden companion dependency — if the Claw package manager processes lock files from installed skills, this represents an undisclosed supply chain dependency on an unreviewed skill. A secondary metadata provenance discrepancy (_meta.json referencing a different GitHub organization than the install source) prevents full commit verification.

Category Scores

Prompt Injection 92/100 · 30%
Data Exfiltration 78/100 · 25%
Code Execution 85/100 · 20%
Clone Behavior 90/100 · 10%
Canary Integrity 100/100 · 10%
Behavioral Reasoning 75/100 · 5%

Findings (8)

HIGH Hidden .clawhub/lock.json declares undeclared companion skill dependency -22

The skill repository contains a .clawhub/lock.json file at its root that declares 'academic-research-hub' version 0.1.0 as a pre-installed dependency (installedAt: 1770957475341). This file is not referenced by package.json and represents an out-of-band dependency declaration specific to the Claw package manager. If the Claw PM honors lock files from installed skills, this would silently install 'academic-research-hub' alongside this firewall skill without any user-visible indication. This pattern — bundling a hidden companion skill inside a security tool — is a classic supply chain staging technique.

MEDIUM Committed lock file may auto-install unreviewed academic-research-hub skill -15

The .clawhub/lock.json file is checked into the skill repository rather than being a local developer artifact. Its presence in the distributed package means every installation of claw-permission-firewall carries this dependency declaration. Whether or not the Claw PM currently processes lock files from sub-skills, the file's presence is an unambiguous attempt to declare a runtime dependency on a second, separately-maintained skill whose security posture has not been evaluated in this audit.

MEDIUM Repository provenance mismatch: _meta.json commit points to different GitHub org -10

The _meta.json file declares the canonical commit URL as 'https://github.com/clawdbot/skills/commit/f2156b72bfdd52bdf5189d6832a80191ab1b833d' but the skill was fetched from 'https://github.com/openclaw/skills'. This discrepancy means the stated commit cannot be used to verify the installed content and indicates the skill was either copied between organizations without metadata updates, or the metadata was deliberately set to reference an unverifiable provenance.

LOW Permissive policy mode substantially weakens all firewall protections -8

The bundled policy.yaml defines a 'permissive' mode with requireConfirmationAboveRisk: 0.75. Any action with a computed risk score below 0.75 — including connections to non-allowlisted domains (risk += 0.4), file writes outside the allow glob (risk += 0.35+0.15), and HTTP DELETE methods (risk += 0.35) — receives automatic ALLOW in permissive mode. An agent or skill that constructs the input object and specifies context.mode='permissive' can bypass the majority of protections this firewall claims to offer.

LOW New localhost TCP listener appeared in post-install connection diff -10

The connection diff shows 127.0.0.1:18790 and [::1]:18790 listening by process 'openclaw-gatewa' (PID 1083) appeared in the post-install snapshot but not the pre-install snapshot. PID 1083 is a low process number suggesting it was started early in the boot sequence as Oathe infrastructure, not by the skill. However, the listener's presence only in the post-install state cannot be fully explained from audit evidence alone.

LOW Security firewall skill has no self-integrity check on policy file -15

The policy.yaml file is loaded with fs.readFileSync and parsed with js-yaml without any checksum, signature, or tamper-detection. An attacker who can write to the skill directory (e.g., through a directory traversal in another skill) could replace policy.yaml with a permissive variant that allows all actions, silently disabling the firewall while appearing to be active.

INFO Canary files accessed read-only by Oathe audit system at expected checkpoints 0

Auditd PATH records show canary files (.env, .ssh/id_rsa, .aws/credentials, .npmrc, .docker/config.json, .gcloud credentials) accessed at timestamps 1771906995 (pre-install baseline), 1771907004 (mid-session), and 1771907012 (post-install integrity check). All accesses are read-only (no WRITE/CREATE audit events), all six files accessed within a single millisecond at 1771907012 confirming batch Oathe verification, and the canary integrity report confirms no modifications.

INFO TypeScript source is structurally sound with appropriate separation of concerns 0

All seven source files (index.ts, evaluate.ts, policy.ts, normalize.ts, redact.ts, match.ts, risk.ts, audit.ts) implement a coherent, readable firewall pipeline. No obfuscated code, no dynamic require/import of external URLs, no eval() calls, no base64-encoded payloads, and no use of child_process or network APIs.