Skip to content

Security: infoconex/copy-github-repo

SECURITY.md

Security Policy

Supported versions

The project has not published its first stable release. Security fixes currently apply to the latest commit on the default branch until v0.1.0 is published.

After the first stable release, security fixes target the latest supported stable module version under docs/user/support-policy.md. Before 1.0.0, older stable versions are not promised parallel security-fix branches unless an exceptional backport or extended-support decision is announced explicitly.

Reporting a vulnerability

Do not open a public issue for a suspected vulnerability. Use GitHub's private vulnerability reporting feature for this repository when available, or contact the repository owner privately.

Private vulnerability reporting was verified enabled for this repository on 2026-08-16.

Include the affected version or commit, reproduction steps, potential impact, and any suggested mitigation. Do not include live credentials or private repository content.

For the reviewer-facing threat model, credential/data flow, control/evidence matrix, dependency trust inventory, and residual-risk status, see docs/security/security-architecture.md.

For supported module/platform/prerequisite versions, compatibility expectations, deprecation, and end-of-support rules, see docs/user/support-policy.md.

For the live GitHub repository security posture, required baseline, verified settings, and settings that still require owner-side verification, see docs/security/repository-security-baseline.md.

For the stable-release SBOM, dependency classification, provenance/SBOM attestation contract, retrieval, verification, and evidence limitations, see docs/security/release-sbom.md.

Runtime security boundaries

The utility uses existing GitHub CLI authentication. It does not collect, display, copy, or persist token values. GitHub secrets, webhook secrets, private deploy-key material, and GitHub App credentials are outside the migration contract.

Version 1 supports GitHub.com only. Public commands reject unsupported hosts before prerequisites, discovery, planning, verification, or mutation. HTTPS Git operations use GitHub CLI credentials through command-scoped Git configuration; interactive Git credential prompting is disabled.

The tool does not automatically delete repositories or overwrite an existing destination. Same-name replacement first preserves the source under an archive name and validates immutable GitHub repository identity plus mode-specific Git content evidence before the original name is reused. Replacement content copy is blocked unless the replacement repository has a distinct immutable identity.

Repository security posture

Repository-level GitHub security settings are treated as live platform controls, not inferred defaults. The repository security baseline records which settings were verified directly and which require owner-side verification because the connected GitHub integration cannot read or administer them.

As of 2026-08-16, private vulnerability reporting is verified enabled and the repository-owned CodeQL workflow has completed successfully for GitHub Actions workflow analysis. The repository rulesets API returned no rulesets, so the required main branch ruleset is not yet satisfied and must be addressed before the repository is represented as fully hardened for release.

Release and installer trust boundaries

Stable release publication is tag-only. The exact tagged commit must pass the reusable Windows, Ubuntu, and macOS quality gate before the release job can run. The normal workflow treats stable release assets as immutable and refuses to replace or clobber an existing stable release.

The release ZIP is published with a SHA-256 checksum and an SPDX 2.3 JSON SBOM. The release workflow generates both build-provenance and SBOM attestations for the exact versioned ZIP before GitHub release publication. The SBOM is generated from the completed ZIP, records the exact release commit, and deliberately keeps development/CI dependencies out of the shipped runtime dependency graph.

install-release.ps1 verifies the selected ZIP against the release checksum before extraction and before invoking the packaged installer. Without -Version it resolves the latest stable release; with -Version X.Y.Z it targets exactly vX.Y.Z.

The convenience one-line stable install command fetches install-release.ps1 from mutable main, so the bootstrap itself is part of the trust boundary. The separate install-prerelease.ps1 bootstrap is also fetched from mutable main; it resolves main to a commit SHA before downloading and installing that exact unreleased source archive. Prerelease source installation has no published release checksum and is intended for development and release-candidate testing.

For a higher-assurance stable path, use the pinned release procedure in docs/security/installation-security.md, which downloads a specific release artifact and checksum without executing mutable branch content.

A matching checksum proves that the artifact matches the compared hash. GitHub artifact attestations provide additional repository/workflow provenance evidence, but neither the checksum, SBOM, nor attestation is represented as independent publisher code signing. Independent signing/authenticity remains tracked by #80.

There aren't any published security advisories