Authoritative security governance, vulnerability reporting protocols, cryptographic attestation, and continuous audit ledger for
cordanaLLM/nucleus.
cordanaLLM/nucleus actively patches, tests, and backports security advisories for the following release channels:
| Stream Channel | Tracked Upstream Version | Security Maintenance Status | Update Frequency |
|---|---|---|---|
bleeding |
Linux 7.3-rc7 / Mainline |
Active (Day-0 fixes for next-gen silicon) | Weekly / On-demand |
mainstream |
Linux 7.2.11 / Stable |
Active (Full production support) | Weekly point releases |
lts |
Linux 6.18.58 / Longterm |
Active (Enterprise extended security) | Bi-weekly / Immediate on CVE |
realtime |
Linux 7.2.11 / in-tree PREEMPT_RT |
Active (Deterministic low-latency) | With the mainstream stable release |
Older point releases are deprecated as soon as superseded by the next version declared in versions.json.
We treat all security vulnerability disclosures with utmost urgency and confidentiality:
- Private GitHub Security Advisory:
- Navigate to Report a Vulnerability.
- Provide a clear vulnerability description, affected kernel streams, proof-of-concept if available, and any relevant kconfig flags.
- Never File Public Issues: Do not submit vulnerability reports, zero-day disclosures, or exploit PoCs to public GitHub Issues or PRs.
- Initial Acknowledgement: Within 24 hours.
- Triage & Reproduction: Within 72 hours.
- Remediation & Coordinated Disclosure: Private fix developed, tested against QEMU boot test suites, and published with a CVE and GitHub Security Advisory (GHSA).
A published release carries a keyless Cosign signature over its checksum file and an SLSA Build Level 3 build provenance attestation. This section states what that signature covers, how to verify it, what is checked before signing, and what is not provided:
-
Release Checksums and Signatures:
- Every release runs
scripts/publish_release.shin the reusable.github/workflows/release-build.ymlworkflow called by.github/workflows/publish-release.ymlto generateSHA256SUMSover all publishable assets in the release directory. - The reusable workflow attests SLSA Build Level 3 build provenance (
actions/attest-build-provenance) in the build job, saving the attestation askernel-<stream>.provenance.sigstore.json. - The workflow signs
SHA256SUMSusing keyless Cosign (cosign sign-blob) and publishes the signature asSHA256SUMS.bundle. - The signed
SHA256SUMSfile covers the Debian packages (*.deb), the extracted kernel image (vmlinuz-<kernelrelease>), the resolved kernel configuration (kernel-<stream>-x86_64.config), and the Syft SBOM files (kernel-<stream>.cdx.jsonandkernel-<stream>.spdx.json). - The signature does not cover
kernel-<stream>.manifest.jsonorkernel-<stream>.provenance.sigstore.json, which the workflow writes afterSHA256SUMSis signed. The manifest is unsigned; a consumer checks the digests it carries against the signedSHA256SUMS. .github/workflows/supply-chain.ymlbuilds and signs nothing. After every successfulpublish-releaserun, and on dispatch for a kernel release tag, it downloads the release and runsscripts/verify-release.shover it, the checks of the next section (tests/test_supply_chain_workflow.py). It does not run on the release event: the release workflow creates the release withGITHUB_TOKEN, and GitHub starts no workflow on an event that token raised.- Unified Kernel Images (
.efi) are not signed yet.sbsignSecure Boot signing is not wired intoscripts/package-uki.sh, and no release workflow publishes a UKI, so the release Cosign signature overSHA256SUMScovers no UKI. Both are planned.
- Every release runs
-
Verifying a Release:
-
Download the release assets into one directory, verify the Cosign signature over
SHA256SUMSagainst the identity of the release workflow at that tag, then check the files against it:cosign verify-blob \ --bundle SHA256SUMS.bundle \ --certificate-identity "https://github.com/cordanaLLM/nucleus/.github/workflows/release-build.yml@refs/tags/<release-tag>" \ --certificate-oidc-issuer "https://token.actions.githubusercontent.com" \ SHA256SUMS sha256sum -c SHA256SUMS
-
Releases following the SLSA Build Level 3 transition are built and signed inside
.github/workflows/release-build.yml, so the expected certificate identity ishttps://github.com/cordanaLLM/nucleus/.github/workflows/release-build.yml@refs/tags/<release-tag>. -
The 20 legacy tags listed in
release-signers.jsonwere built directly by.github/workflows/publish-release.yml, so their expected certificate identity ishttps://github.com/cordanaLLM/nucleus/.github/workflows/publish-release.yml@refs/tags/<release-tag>. -
The script
scripts/release_signer_identity.py --repo cordanaLLM/nucleus --tag <release-tag>evaluatesrelease-signers.jsonand prints the exact identity for any given tag. -
cosign verify-blobrefuses aSHA256SUMSwith one changed byte and a certificate from any other workflow. -
Verify SLSA Build Level 3 provenance for published release assets using GitHub CLI:
gh attestation verify <file> -R cordanaLLM/nucleus
-
scripts/verify-release.sh <asset-dir> <release-tag> cordanaLLM/nucleusruns both commands, and also refuses an asset thatSHA256SUMSdoes not list and a manifest whose tag, signer identity orSHA256SUMSdigest is not the verified one. It needscosign,sha256sumandjq. -
cordanaLLM/imagoconsumeskernel-<stream>.manifest.json(imago.nucleus.kernel-artifact.v1) and verifiesSHA256SUMS.bundle, theSHA256SUMSdigest, and every artifact digest before an image build uses a kernel.
-
-
Checks Before Signing:
- Upstream Source Verification (
scripts/fetch-kernel-source.sh): Verifies kernel tarball checksums and OpenPGP signatures against keys inkeys/, or verifies git tags and commit hashes usinggit verify-tag. - Fixed Build Environment (
scripts/build_kernel.sh): SetsSOURCE_DATE_EPOCHandKBUILD_BUILD_TIMESTAMPfrom the release commit timestamp of the kernelMakefile, setsKBUILD_BUILD_USER=nucleusandKBUILD_BUILD_HOST=forge, and setsLC_ALL=CandTZ=UTC. - Artifact Gate (
scripts/check_kernel_artifacts.py): Opens every package withdpkg-deband refuses an empty or unexpected file, a wrong package name, version or Debian architecture, a missing image, headers orlinux-libc-devpackage, avmlinuzor configuration that differs from the one inside the image package, and avmlinuzwhose bzImage setup header does not name the stream's kernel release. - Boot Smoke Test (
scripts/boot_smoke.py): Boots the kernel of every x86_64, arm64 and riscv64 leg with a static-init initramfs under QEMU (TCG) and requires theLinux version <kernelrelease>banner and the init's line before anything is checksummed; the same console judged with a release the leg did not build must be refused.
- Upstream Source Verification (
-
Software Bill of Materials (SBOM):
- Every release generates CycloneDX (
kernel-<stream>.cdx.json) and SPDX (kernel-<stream>.spdx.json) files via Syft (syft dir:output/). - The SBOM inventories the files in the release
output/directory. It does not index compiled source objects, firmware blobs, or C header source trees.
- Every release generates CycloneDX (
-
Not Provided Today:
- No GPG-Signed APT Archive: Debian packages are published as GitHub Release assets; no APT repository or signed
InReleasemetadata is maintained. - Releases Not Rebuildable Byte for Byte: Two builds of one tag differ by their module signing key. The build signs nothing;
scripts/sign_kernel_modules.pysigns every module after packaging with a key that--module-keysupplies or that is generated for that build and deleted after it (ADR-0016). No stable release key exists, so released packages carry a per-build key. TheReproducible Build (mainstream / x86_64)job in.github/workflows/build-matrix.ymlbuilds twice with one key and fails unless the outputs are byte-identical, but a release's key is deleted after the build, so a released package cannot be rebuilt to its published digest. - No UKI Signing: Unified Kernel Images (
.efi) are not signed with Secure Boot keys, and no release workflow publishes UKI binaries. - x86_64 Releases Only: arm64 and riscv64 kernels are compiled and pass the artifact gate in
.github/workflows/build-matrix.yml, and booted under QEMU, but not released;imago.nucleus.kernel-artifact.v1has no architecture field.
- No GPG-Signed APT Archive: Debian packages are published as GitHub Release assets; no APT repository or signed
The repository runs the following security checks. Semgrep and Trivy run on every push to main and on a weekly schedule, and on a pull request when it changes code, build configuration, tests or workflows (.github/workflows/security-scans.yml):
- Zero-Leak Invariant Test (
tests/test_security_privacy.py): Asserts zero private RFC 1918 addresses (10.x,192.168.x,172.16-31.x) and zero workstation paths (/home/...) exist in any file git tracks (git ls-files). A tracked file it cannot read fails the test instead of being skipped, and planted cases in a throwaway repository prove that each pattern is reported. - Semgrep SAST: Scans shell scripts, Python tests, and GitHub Actions workflows for dangerous shell constructs, credential leaks, and injection vulnerabilities.
- Trivy Scanner: Scans the repository filesystem for known high- and critical-severity CVEs.
- OpenSSF Scorecard: Audits repository posture on a weekly schedule and on push to
mainfor read-only workflow permissions, branch protection, and pinned GitHub Actions commit hashes.