Back to Claude Scientific Skills

Security Validation Record

skills/clinical-decision-support/references/security_validation.md

2.55.03.0 KB
Original Source

Security Validation Record

Validation date: 2026-07-23 (local project date).

Baseline

The repository SECURITY.md section recorded 11 findings:

  • 3 CRITICAL findings for cross-file environment-variable/network exfiltration behavior;
  • 1 HIGH finding for transmitting a credential to an external service;
  • 5 MEDIUM findings for command chaining, credential flow, undeclared network use, and environment harvesting;
  • 2 LOW findings for mandatory cross-skill invocation and dependency concerns.

The affected external schematic wrappers were the now-deleted files generate_schematic.py and generate_schematic_ai.py.

Remediation

  • Deleted both schematic-generation scripts.
  • Removed all external service, LLM, image, credential, and environment-variable behavior.
  • Removed mandatory figures and cross-skill calls.
  • Replaced unsafe person-level classification and care-pathway helpers with aggregate or planning-only tools.
  • Added bounded local JSON handling, person-level-key rejection, output limits, and deterministic schemas.
  • Added static AST tests that reject network libraries, dynamic code execution, credential access, and executable serialization.

Post-Refresh Results

  • Direct behavioral scan: SAFE, 0 findings.
  • Pull-request gate with --fail-on HIGH: passed with 0 CRITICAL and 0 HIGH. Repeated LLM-assisted runs returned 2–3 LOW findings because the analyzer is nondeterministic.

Accepted LOW Findings

Across repeated runs, the nondeterministic analyzer reported different subsets of these LOW observations:

  1. Optional allowed-tools field absent — accepted as informational. The Agent Skills specification does not require it; compatibility and runtime instructions explicitly prohibit network and credential access.
  2. Broad description — accepted. The scope intentionally covers the related research-evaluation artifacts requested for this safety refresh, while the frontmatter and first body section explicitly exclude care and live operation.
  3. Person-level key filtering uses a denylist — accepted as a documented limitation, not a privacy guarantee. Input is contractually restricted to synthetic or aggregate schemas, common person-level fields are rejected as defense in depth, and the documentation repeatedly requires qualified privacy review. The filter cannot detect every identifier name or sensitive value and is never presented as de-identification.
  4. Occasional missing-file report — accepted as an analyzer false positive. Some runs invented a templates/ directory and nonexistent assets/*.md references. The deterministic test_documented_local_paths_exist check resolves every documented local path and passes.

None of the accepted findings permits network access, sensitive-data handling, or clinical action.

Reproduction

bash
uv run skill-scanner scan skills/clinical-decision-support --use-behavioral

uv run python scan_pr_skills.py \
  --fail-on HIGH \
  --output /tmp/clinical-decision-support-pr-scan.md \
  skills/clinical-decision-support