COPS Exploit Validation Workbench
This experimental package provides offline preflight only for versioned vulnerability reproduction in a disposable laboratory. It verifies the SHA-256 of local advisory and case files, requires exact affected and fixed version membership, three separate case declarations, a common objective, and declared lab control references. It never loads or executes those files as code, downloads sources, contacts a target, or grants execution authority.
The file gate currently requires a POSIX host with O_NOFOLLOW, O_DIRECTORY, and O_NONBLOCK support; other hosts receive a refusal.
Usage
Use the playbook for the input contract and the verification guide for the synthetic exercise. From the repository root, python3 -m cops demo exploit-validation-workbench runs the inert fixture; python3 -m cops check exploit-validation-workbench runs its package gate. For a private plan, run PYTHONPATH=plugins/vulnerability-management/exploit-validation-workbench python3 -m reproduction.cli --input /private/path/plan.json --output /private/path/new-report.json. The private output path is required and the file must not exist beforehand; the CLI does not print a successful report to stdout.
Data flow and contract
The operator provides a plan and local files; the preflight reads their bytes, checks exact metadata and hashes, and writes a private report. Nothing in this flow executes the case artifacts or verifies that an external lab exists.
| Artifact | Purpose | Producer | Consumer | Validation |
|---|---|---|---|---|
cops.exploit-reproduction-plan/v1 JSON | Declares the reference, versions, disposable lab controls, and three cases | Operator | Offline preflight | Exact schema, required controls, version membership, no command fields |
| Advisory and case files | Locally pinned input bytes | Operator acquisition process | Offline preflight | Regular local files, no symlinked artifact components, parent traversal, or control-character paths; SHA-256 matches plan |
cops.exploit-reproduction-preflight/v1 JSON | Records metadata outcome and next required independent action | Offline preflight | Operator and later lab workflow | Private new file; always execution_authorized: false |
Threat boundary: the JSON is untrusted and its URLs, receipts, and lab controls are operator claims. A matching local digest proves only byte identity with the claim, not the publisher, affected version, safe isolation, or permission. The report therefore always returns execution_authorized: false. The COPS laboratory harness must independently verify those controls and collect positive, negative, remediated, and cleanup observations before any operational claim. Keep real inputs and reports in private storage; the CLI output file is created mode 0600 on POSIX and never overwritten.