/claim #14
Summary
- Adds a self-contained
artifact-malware-quarantine-guard/ slice for Scientific/Engineering Data & Code Hosting issue #14.
- Evaluates hosted uploads before preview, reproduce-run, API access, or export using synthetic scan evidence, checksums, top-level artifact batch shape, artifact manifest shape, archive shape, archive entry/link traversal, macro/model/notebook risk, normalized malware verdicts, scan freshness, and sanitized reviewer metadata.
- Emits deterministic JSON, Markdown, SVG, and MP4 reviewer artifacts with SHA-256 audit digests.
Scope
This focuses specifically on malware, archive-bomb, malformed top-level artifact batches, malformed artifact manifests, malformed archive entry manifests, archive entry/link traversal, archive link-target traversal, missing or blank archive link-target evidence, macro-enabled spreadsheet, unsafe model deserialization, embedded notebook script, denylisted checksum, stale-scan gates, quarantine path redaction, and metadata keyword redaction before hosted artifacts are released.
It is distinct from the existing FAIR manifest/access, artifact package integrity, preview cache, raw/notebook preview, retention/tombstone, model-card lineage, license compatibility, sensitive-redaction, schema-evolution, data-dictionary, persistent-ID, SBOM, upload checkpoint, replica consistency, and column-sensitivity slices.
Hardening Updates
fa82895: refreshed committed reviewer artifacts after redaction hardening so risky-packet.json and summary.svg now show the sanitized archive-entry message and digest b07e1bcffbe6... instead of stale pre-redaction evidence.
d8f24e1: artifact metadata keywords are sanitized before DataCite/schema output, preventing private or unsafe metadata labels from being emitted in release evidence.
646c981: quarantine path evidence is redacted before reviewer packets expose archive traversal paths.
9fea4c2: malformed top-level artifact batches such as assessArtifactBatch(null) now quarantine as MALFORMED_ARTIFACT_BATCH with blocked preview/reproduce/API/export lanes instead of crashing at batch.artifacts before reviewer packet generation.
- Added and regenerated deterministic JSON/Markdown/SVG evidence so reviewers can inspect malformed-batch quarantine, traversal, stale-scan, manifest, metadata, and redaction paths.
- ZIP Slip-style archive path traversal quarantine covers parent-directory, absolute, drive-rooted, UNC, and null-byte archive entries.
- Future-dated scan timestamps are treated as stale scan evidence requiring rescan before release.
- Malware scan verdicts are normalized before release decisions, so variants such as
MALICIOUS are quarantined.
- Archive symlink/hardlink target paths are scanned for traversal, so a safe-looking entry name cannot point outside the artifact workspace.
- Archive link entries that omit target evidence are quarantined instead of being released as clean.
- Archive link entries with blank or whitespace-only target evidence are treated as missing target evidence and quarantined.
- Malformed archive entry manifests are quarantined with
ARCHIVE_ENTRY_MANIFEST_MALFORMED instead of crashing before a reviewer packet can be produced.
- Malformed top-level artifact manifests now quarantine with
MALFORMED_ARTIFACT_MANIFEST before release lanes are opened, and malformed artifact rows emit MALFORMED_ARTIFACT_ENTRY without suppressing valid sibling metadata evidence.
Validation
- Latest report-refresh gate verified the current head after
fa82895.
cd artifact-malware-quarantine-guard && npm test passed: 15 tests.
cd artifact-malware-quarantine-guard && npm run check passed JS syntax checks and Python compile check.
cd artifact-malware-quarantine-guard && npm run demo regenerated 7 JSON packets plus Markdown/SVG artifacts; risky-packet.json now carries the redacted archive traversal message and digest b07e1bcffbe6.
cd artifact-malware-quarantine-guard && npm run demo:video regenerated reports/demo.mp4.
- Parsed all 7 generated JSON packet files successfully.
ffprobe confirmed reports/demo.mp4 is H.264, 1280x720, 7.5s, 24fps, 106,051 bytes.
git diff --check and git diff --cached --check passed; Git only reported Windows line-ending normalization warnings before staging.
- Focused restricted-string scan found no payout, credential, token, bank, or service-role strings in the staged patch.
- Staged allowlist check confirmed only
artifact-malware-quarantine-guard/ paths were committed.
Demo Artifacts
artifact-malware-quarantine-guard/reports/blank-link-target-packet.json
artifact-malware-quarantine-guard/reports/malformed-archive-entries-packet.json
artifact-malware-quarantine-guard/reports/malformed-artifact-manifest-packet.json
artifact-malware-quarantine-guard/reports/malformed-batch-packet.json
artifact-malware-quarantine-guard/reports/clean-packet.json
artifact-malware-quarantine-guard/reports/quarantine-report.md
artifact-malware-quarantine-guard/reports/risky-packet.json
artifact-malware-quarantine-guard/reports/stale-scan-packet.json
artifact-malware-quarantine-guard/reports/summary.svg
artifact-malware-quarantine-guard/reports/demo.mp4
Safety
Synthetic data only. No credentials, private research files, network calls, live malware scanner calls, storage mutations, payment processor calls, or private dashboard data are included.
AI-assisted with OpenAI Codex; I reviewed and locally verified the diff before submitting.