Skip to content

CRA security package: per-release SBOMs, 10.512-aligned threat model, disclosure policy - #17

Merged
w1ne merged 11 commits into
developfrom
feat/cra-security-package
Jul 2, 2026
Merged

CRA security package: per-release SBOMs, 10.512-aligned threat model, disclosure policy#17
w1ne merged 11 commits into
developfrom
feat/cra-security-package

Conversation

@w1ne

@w1ne w1ne commented Jul 2, 2026

Copy link
Copy Markdown
Owner

What

The stack-supplier CRA conformance package, public half (design spec + plan committed in-repo under docs/superpowers/):

  • SBOM per releasetools/generate_sbom.py (stdlib-only, 9 unit tests, ruff-clean) emits CycloneDX 1.6 + SPDX 2.3; release.yml attaches iolinki-<version>.cdx.json/.spdx.json to every tagged release (reproducible via SOURCE_DATE_EPOCH pinned to the release commit). New lightweight sbom-tools CI job runs the tests.
  • Threat modeldocs/security/THREAT_MODEL.md, STRIDE analysis aligned to IO-Link Security Design and Development Guideline 10.512 (D1.0.0-01) + Secure Deployment 10.502. Every stack claim carries a verified code/test anchor; protocol gaps (no crypto, no BLOB FW-update profile, physical protection at SL-C 1) are stated as integrator duties, not glossed.
  • SECURITY.md — coordinated disclosure (ack ≤72h, triage ≤14d), supported-versions tied to the commercial stance, CRA-readiness statement (ENISA 24h/72h process).
  • CRA overviewdocs/security/CRA.md: manufacturer-stays-responsible framing, free vs commercial deliverables table. README gains a Security section.

The commercial half (compliance-statement + security-update-terms templates, both DRAFT — pending legal review) landed in the new private repo w1ne/iolinki-private.

Decisions taken as defaults (flag if you disagree)

  1. Scope pass 1 = device stack only; master stack + udslib reuse the template.
  2. Threat model is public (credibility play); compliance statement + update terms are commercial.
  3. Support period default 5 years (CRA "at least five years").
  4. Both SBOM formats shipped.
  5. 10.512 is a draft under review until 2026-02-03 — mapping cites D1.0.0-01 and needs a re-check at final release.

Verification

  • python3 tools/test_generate_sbom.py → 9/9 OK; ruff check clean on new files.
  • Both SBOM formats dry-run + json.tool validated.
  • Workflow YAML parse-checked; note pre-existing ruff F541 in tools/virtual_master/nucleo_master.py (untouched, not from this PR).
  • All threat-model anchors re-verified against source at writing time.

Follow-ups

  • Tag a release to exercise the SBOM release path end-to-end.
  • Enable GitHub private vulnerability reporting in repo settings (Security tab) — SECURITY.md names it as the primary channel.
  • Legal review of the two private-repo templates before first customer delivery.
  • Same package for iolinki-master (once it has releases) and udslib.

🤖 Generated with Claude Code

w1ne and others added 9 commits July 2, 2026 20:41
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Stdlib-only generator; explicit zero-runtime-dependency claim with
build/test tooling listed at non-runtime scope so it is auditable.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Every stack claim carries a code/test anchor; protocol-level gaps and
integrator duties stated explicitly per the guideline's SL-C 1 stance.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
7db98d5 deleted src/iolink_core.c (replaced by the context-based API in
src/device.c) but only updated the root CMakeLists; the Zephyr module
still referenced the deleted file, breaking zephyr-validation on develop
since 2026-07-01. Pre-existing, surfaced by this PR's checks.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@w1ne

w1ne commented Jul 2, 2026

Copy link
Copy Markdown
Owner Author

Note: zephyr-validation was already red on develop (ddcca4d) — 7db98d5 removed src/iolink_core.c without updating zephyr/CMakeLists.txt, and the job isn't branch-protection-required so the run still showed green. Fixed here (one line, ../src/iolink_core.c../src/device.c). Consider making zephyr-validation a required check so this class can't slip through again.

w1ne and others added 2 commits July 2, 2026 22:22
Branch protection on develop now requires docker-validation,
zephyr-validation, and sbom-tools directly (was: no required checks at
all — the echo jobs guarded nothing). Fixes pre-existing F541 in
nucleo_master.py and the spec's stale MIT license reference.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@w1ne
w1ne merged commit 0295318 into develop Jul 2, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant