SECURITY.md
Rama main · réplica de lectura del repositorio original.
# Security Policy
## Reporting a Vulnerability
If you discover a security vulnerability in Moltis, please report it responsibly.
### Preferred Methods
1. **GitHub Security Advisories** (recommended): Use [GitHub's private vulnerability reporting](https://github.com/moltis-org/moltis/security/advisories/new) to report issues confidentially.
2. **Email**: Send details to [moltis AT pen DOT so](mailto:moltis AT pen DOT so)
### What to Include
- Description of the vulnerability
- Steps to reproduce
- Potential impact
- Any suggested fixes (optional)
### Scope
This policy applies to the Moltis codebase. Third-party dependencies should be reported to their respective maintainers.
## Supported Versions
Security updates are provided for the latest release only.
## Verifying Release Signatures
All release artifacts are protected with multiple verification layers:
- **[GitHub artifact attestations](https://github.com/moltis-org/moltis/attestations)** — SLSA v1.0 Build Level 2 provenance
- **[Sigstore](https://sigstore.dev) keyless signing** — OIDC-bound CI signatures recorded in the Rekor transparency log
- **GPG signing** — maintainer authorization via YubiKey-resident key
### Quick verification (recommended)
```bash
# Verify any release artifact with the GitHub CLI
gh attestation verify <artifact> -R moltis-org/moltis
# Verify a Docker image
gh attestation verify oci://ghcr.io/moltis-org/moltis:VERSION -R moltis-org/moltis
```
Browse all attestations at <https://github.com/moltis-org/moltis/attestations>.
### Install cosign
```bash
# macOS
brew install cosign
# Linux (or download from https://github.com/sigstore/cosign/releases)
go install github.com/sigstore/cosign/v2/cmd/cosign@latest
```
### Verify a binary/package
Each release artifact has three companion files:
- `.sha256` / `.sha512` — checksums
- `.sig` — Sigstore signature
- `.crt` — Signing certificate
```bash
# Download the artifact and its signature files
curl -LO https://github.com/moltis-org/moltis/releases/download/v0.1.0/moltis-0.1.0-x86_64-unknown-linux-gnu.tar.gz
curl -LO https://github.com/moltis-org/moltis/releases/download/v0.1.0/moltis-0.1.0-x86_64-unknown-linux-gnu.tar.gz.sig
curl -LO https://github.com/moltis-org/moltis/releases/download/v0.1.0/moltis-0.1.0-x86_64-unknown-linux-gnu.tar.gz.crt
# Verify the signature
cosign verify-blob \
--signature moltis-0.1.0-x86_64-unknown-linux-gnu.tar.gz.sig \
--certificate moltis-0.1.0-x86_64-unknown-linux-gnu.tar.gz.crt \
--certificate-identity-regexp="https://github.com/moltis-org/moltis/*" \
--certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
moltis-0.1.0-x86_64-unknown-linux-gnu.tar.gz
# Expected output: Verified OK
```
### Verify a Docker image
```bash
# Verify the image signature
cosign verify \
--certificate-identity-regexp="https://github.com/moltis-org/moltis/*" \
--certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
ghcr.io/moltis-org/moltis:latest
# View the SBOM attached to the image
cosign download sbom ghcr.io/moltis-org/moltis:latest
# View provenance attestation
cosign verify-attestation \
--type slsaprovenance \
--certificate-identity-regexp="https://github.com/moltis-org/moltis/*" \
--certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
ghcr.io/moltis-org/moltis:latest
```
### What the signature proves
- The artifact was built by GitHub Actions in the `moltis-org/moltis` repository
- The build was triggered by a specific commit (visible in the certificate)
- The artifact has not been modified since signing
- No private keys are involved — signatures use GitHub's OIDC identity
### Transparency log
All signatures are recorded in Sigstore's public transparency log (Rekor).
You can search for moltis signatures at: https://search.sigstore.dev
## Signed Commits
All commits to this repository must be cryptographically signed. This ensures
that commits actually come from the claimed author and haven't been tampered
with.
### Setting up commit signing
**Option 1: SSH signing (recommended)**
If you already have an SSH key, this is the easiest option:
```bash
# Use your existing SSH key for signing
git config --global gpg.format ssh
git config --global user.signingkey ~/.ssh/id_ed25519.pub
git config --global commit.gpgsign true
# Add your SSH signing key to GitHub:
# Settings → SSH and GPG keys → New SSH key → Key type: Signing Key
```
**Option 2: GPG signing**
```bash
# Generate a GPG key if you don't have one
gpg --full-generate-key
# Get your key ID
gpg --list-secret-keys --keyid-format=long
# Look for: sec rsa4096/XXXXXXXXXXXXXXXX
# Configure git
git config --global user.signingkey XXXXXXXXXXXXXXXX
git config --global commit.gpgsign true
# Add your GPG key to GitHub:
# gpg --armor --export XXXXXXXXXXXXXXXX
# Settings → SSH and GPG keys → New GPG key
```
**Option 3: GPG with YubiKey**
If you have a YubiKey with GPG keys:
```bash
# Your key is already on the YubiKey, just configure git
git config --global user.signingkey XXXXXXXXXXXXXXXX
git config --global commit.gpgsign true
```
### Verifying your setup
```bash
# Make a test commit
echo "test" >> test.txt && git add test.txt && git commit -m "test signed commit"
# Verify it's signed
git log --show-signature -1
# Clean up
git reset --hard HEAD~1
```
### Troubleshooting
If commits show as "Unverified" on GitHub:
1. Ensure your signing key is added to your GitHub account
2. Your commit email must match a verified email on your GitHub account
3. For GPG: the key's email must match your commit email