Sensitive Data Masker

Security checks across malware telemetry and agentic risk

Overview

The skill’s privacy goal is coherent, but the provided hook/wrapper evidence suggests it may fail open and let original sensitive messages continue unmasked.

Review carefully before installing. The concept is reasonable, but the provided artifacts show likely implementation and dependency problems that could let original secrets continue unmasked. Only enable it after verifying the hook actually masks test messages, the Python module imports correctly, cryptography is installed, and the local mapping database/key are protected.

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Risk analysis

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.

#
ASI09: Human-Agent Trust Exploitation
High
What this means

Sensitive text could pass onward unmasked even though the skill is presented as automatically protecting it.

Why it was flagged

stderr is configured as ignored but the code still attaches a stderr listener, which is likely to throw in Node because stderr is null; the catch path explicitly continues with the original message. For a privacy masking hook, this can cause users to trust masking that may not occur.

Skill content
const masker = spawn('python3', [MASKER_SCRIPT, 'mask', content], { stdio: ['pipe', 'pipe', 'ignore'] }); ... masker.stderr.on('data', (data) => { ... }); ... // Error doesn't affect message processing, continue with original message
Recommendation

Fix the hook to capture or omit stderr safely, fail closed for masking errors when privacy is required, and clearly notify the user if masking did not run.

#
ASI04: Agentic Supply Chain Vulnerabilities
Medium
What this means

A user may install the documented dependencies and still have the masker fail, potentially leaving sensitive messages unprotected.

Why it was flagged

The shown script requires the cryptography package and exits if it is absent, but the declared install/dependency artifacts list presidio-analyzer, presidio-anonymizer, and spacy without cryptography. In this skill, a dependency failure can combine with fail-open message handling.

Skill content
from cryptography.fernet import Fernet ... except ImportError: ... print("This skill REQUIRES encryption for security.") ... sys.exit(1)
Recommendation

Declare cryptography in all install metadata and setup instructions, and make startup checks report a clear installation failure instead of allowing silent unmasked operation.

#
ASI04: Agentic Supply Chain Vulnerabilities
Medium
What this means

The automatic hook may not be able to load the masking code, so messages may continue without redaction.

Why it was flagged

The provided manifest lists sensitive-masker.py and sensitive-masker.en.py, not an importable sensitive_masker.py module. This name mismatch is likely to make the wrapper fail before masking.

Skill content
from sensitive_masker import ChannelSensitiveMasker
Recommendation

Rename the Python module or update the import so the wrapper can reliably load the masker before enabling the hook.

#
ASI06: Memory and Context Poisoning
Medium
What this means

Anyone or anything that can read the mapping database and key may be able to recover recently masked secrets.

Why it was flagged

The skill intentionally stores original sensitive values in a local mapping table so masked tokens can be restored later. This is disclosed and purpose-aligned, but it creates a sensitive local store.

Skill content
"Local restoration" - 7-day temporary mapping table ... "Mapping stored (7 days)" ... "Local restoration (for task execution)"
Recommendation

Keep the data directory protected, verify encryption and file permissions, shorten the TTL if possible, and clear mappings when they are no longer needed.

#
ASI05: Unexpected Code Execution
Low
What this means

Every received message may trigger local Python execution, which can affect reliability and resource use.

Why it was flagged

The hook runs a local Python process for each received message. This is expected for this implementation and uses an argument array rather than shell interpolation, but it is still automatic local code execution.

Skill content
const masker = spawn('python3', [MASKER_SCRIPT, 'mask', content], { stdio: ['pipe', 'pipe', 'ignore'] });
Recommendation

Use reviewed local code, add timeouts and size limits, and monitor failures rather than silently continuing.