sentinel

Projetos que seguem as melhores práticas abaixo podem se autocertificar voluntariamente e mostrar que alcançaram um selo de melhores práticas da Open Source Security Foundation (OpenSSF).

Não existe um conjunto de práticas que possa garantir que o software nunca terá defeitos ou vulnerabilidades; mesmo métodos formais podem falhar se as especificações ou suposições estiverem erradas. Nem existe qualquer conjunto de práticas que possa garantir que um projeto sustentará uma comunidade de desenvolvimento saudável e bem-funcionada. No entanto, seguir as melhores práticas pode ajudar a melhorar os resultados dos projetos. Por exemplo, algumas práticas permitem revisão multipessoal antes do lançamento, o que pode ajudar a encontrar vulnerabilidades técnicas difíceis de encontrar e ajudar a construir confiança e desejo de interação repetida entre desenvolvedores de diferentes empresas. Para ganhar um selo, todos os critérios DEVE e NÃO DEVE devem ser atendidos, todos os critérios DEVERIA devem ser atendidos OU não atendidos com justificativa, e todos os critérios SUGERIDO devem ser atendidos OU não atendidos (queremos que sejam considerados pelo menos). Se você quiser inserir texto de justificativa como um comentário genérico, em vez de ser uma justificativa de que a situação é aceitável, inicie o bloco de texto com '//' seguido de um espaço. Feedback é bem-vindo via site do GitHub como questões ou pull requests Há também uma lista de discussão para discussão geral.

Fornecemos com prazer as informações em vários idiomas, no entanto, se houver qualquer conflito ou inconsistência entre as traduções, a versão em inglês é a versão autoritativa.
Se este é o seu projeto, por favor mostre o status do seu selo básico na página do seu projeto! O status do selo básico se parece com isto: O nível do selo básico para o projeto 14063 é baseline-1 Aqui está como incorporar o selo básico:
Você pode mostrar o status do seu selo básico incorporando isto no seu arquivo markdown:
[![OpenSSF Baseline](https://www.bestpractices.dev/projects/14063/baseline)](https://www.bestpractices.dev/projects/14063)
ou incorporando isto no seu HTML:
<a href="https://www.bestpractices.dev/projects/14063"><img src="https://www.bestpractices.dev/projects/14063/baseline"></a>


Estes são os critérios de Nível Básico 2. Estes são critérios da versão v2026.08.28.

Baseline Series: Nível Básico 1 Nível Básico 2 Nível Básico 3

        

 Fundamentos

  • Geral

    Observe que outros projetos podem usar o mesmo nome.

    The security update management platform for SUSE and openSUSE Linux distributions

    Use o formato de expressão de licença SPDX; exemplos incluem "Apache-2.0", "BSD-2-Clause", "BSD-3-Clause", "GPL-2.0+", "LGPL-3.0+", "MIT" e "(BSD-2-Clause OR Ruby)". Não inclua aspas simples ou aspas duplas.
    Se houver mais de uma linguagem, liste-as como valores separados por vírgula (espaços opcionais) e ordene-as da mais usada para a menos usada. Se houver uma longa lista, liste pelo menos as três primeiras mais comuns. Se não houver linguagem (por exemplo, este é um projeto apenas de documentação ou apenas de teste), use o caractere único "-". Use uma capitalização convencional para cada linguagem, por exemplo, "JavaScript".
    O Common Platform Enumeration (CPE) é um esquema de nomenclatura estruturado para sistemas de tecnologia da informação, software e pacotes. Ele é usado em vários sistemas e bancos de dados ao relatar vulnerabilidades.

 Controles 16/19

  • Controles


    Quando uma tarefa de CI/CD é executada sem permissões especificadas, o sistema de CI/CD DEVE definir como padrão as permissões da tarefa para as menores permissões concedidas no pipeline. [OSPS-AC-04.01]
    Configure as definições do projeto para atribuir as menores permissões disponíveis a novos pipelines por padrão, concedendo permissões adicionais somente quando necessário para tarefas específicas.

    The repository's default workflow permissions are set to read (the minimum). Additionally, every workflow either declares a top-level permissions: block restricting to the minimum required scopes, or declares per-job permissions: on each job individually. No workflow relies on the repository default for write access — elevated permissions (write to packages, pages, issues, pull-requests) are always explicitly requested at the narrowest scope needed.



    Quando um lançamento oficial é criado, esse lançamento DEVE receber um identificador de versão único. [OSPS-BR-02.01]
    Atribua um identificador de versão único a cada versão de lançamento produzida pelo projeto, seguindo uma convenção de nomenclatura ou esquema de numeração consistente. Exemplos incluem SemVer, CalVer ou id de commit git.

    Every official release is assigned a unique SemVer identifier (e.g. v0.3.0) via release-please automation. The version source of truth is backend/pyproject.toml; on merge of a Release PR, release-please creates a Git tag (v<major>.<minor>.<patch>) and a corresponding GitHub Release with auto-generated changelog. Tags are never reused or manually created — uniqueness is enforced by Git's tag semantics and the automation's monotonic bump logic.



    Quando um lançamento oficial é criado, esse lançamento DEVE conter um registro descritivo de modificações funcionais e de segurança. [OSPS-BR-04.01]
    Certifique-se de que todos os lançamentos incluam um registro de alterações descritivo. É recomendado garantir que o registro de alterações seja legível por humanos e inclua detalhes além das mensagens de commit, como descrições do impacto de segurança ou relevância para diferentes casos de uso. Para garantir a legibilidade por máquina, coloque o conteúdo sob um cabeçalho markdown como \"## Changelog\"."

    Non-trivial release notes file in repository: https://github.com/StayPirate/sentinel/blob/master/CHANGELOG.md. [release_notes]



    Quando um pipeline de compilação e lançamento ingere dependências, ele DEVE usar ferramentas padronizadas quando disponíveis. [OSPS-BR-05.01]
    Use ferramentas comuns para o seu ecossistema, como gerenciadores de pacotes ou ferramentas de gerenciamento de dependências para ingerir dependências no momento da compilação. Isso pode incluir o uso de um arquivo de dependências, arquivo de bloqueio ou manifesto para especificar as dependências necessárias, que são então incorporadas pelo sistema de compilação.

    The build and release pipeline uses uv (with a lockfile uv.lock) to resolve and install Python dependencies deterministically. Dependencies are declared in backend/pyproject.toml using standard PEP 621 metadata, and uv sync --frozen in CI ensures the lockfile is the sole source of installed versions — no ad-hoc pip install or unmanaged dependency resolution occurs during build. The Dockerfile similarly uses uv sync --frozen for reproducible image builds.



    Quando um lançamento oficial é criado, esse lançamento DEVE ser assinado ou contabilizado em um manifesto assinado incluindo os hashes criptográficos de cada ativo. [OSPS-BR-06.01]
    Assine todos os ativos de software lançados no momento da construção com uma assinatura criptográfica ou atestados, como assinatura GPG ou PGP, assinaturas Sigstore, proveniência SLSA ou VSAs SLSA. Inclua os hashes criptográficos de cada ativo em um manifesto assinado ou arquivo de metadados.

    Releases are created via release-please with a unique Git tag, but no cryptographic signing or attestation is currently applied. The GitHub Release has no attached assets, no SLSA provenance attestation, no cosign signature, and no signed manifest containing cryptographic hashes of build artifacts. The container images pushed to ghcr.io are similarly unattested (no docker/attest-build-provenance or cosign sign step in build-images.yml).



    Quando o projeto tiver feito um lançamento, a documentação do projeto DEVE incluir uma descrição de como o projeto seleciona, obtém e rastreia suas dependências. [OSPS-DO-06.01]
    É recomendado publicar essas informações juntamente com a documentação técnica e de design do projeto em um recurso publicamente visível, como o repositório de código-fonte, site do projeto ou outro canal.

    The project documents its dependency management approach across multiple files: CONTRIBUTING.md describes how to install dependencies (uv sync), docs/deployment.md documents the tooling (uv with lockfile), the CI security gate (pip-audit on every merge), and the Dockerfile build strategy (uv sync --frozen). Dependabot is configured (.github/dependabot.yml) to track and propose updates for three ecosystems — Python/uv, GitHub Actions, and Docker base images — on a weekly schedule. The lockfile (uv.lock) pins exact versions for reproducibility, pip-audit gates every PR against known vulnerabilities, and Dependabot automates tracking of new upstream releases.



    A documentação do projeto DEVE incluir instruções sobre como compilar o software, incluindo bibliotecas, frameworks, SDKs e dependências necessários. [OSPS-DO-07.01]
    Recomenda-se publicar essas informações junto com a documentação de colaboradores do projeto, como em CONTRIBUTING.md ou outra documentação de tarefas de desenvolvimento. Isso também pode ser documentado usando alvos de Makefile ou outros scripts de automação.

    CONTRIBUTING.md provides step-by-step build instructions: install uv, run uv sync (which automatically downloads the correct Python 3.13 interpreter and all dependencies from the lockfile), start infrastructure via ./scripts/dev-env.sh up, run migrations, and launch the server. docs/deployment.md documents the production build process (multi-stage Dockerfile with uv sync --frozen), required infrastructure (PostgreSQL, Redis), and the software requirements table listing all runtime dependencies with minimum versions.



    A documentação do projeto DEVE incluir uma lista dos membros do projeto com acesso a recursos sensíveis. [OSPS-GV-01.01]
    Documente os participantes do projeto e seus papéis através de artefatos como members.md, governance.md, maintainers.md ou arquivo similar dentro do repositório de código-fonte do projeto. Isso pode ser tão simples quanto incluir nomes ou identificadores de conta em uma lista de mantenedores, ou mais complexo dependendo da governança do projeto.

    This criterion targets projects with shared infrastructure credentials (e.g., production server access, signing keys, package registry tokens). Sentinel's sensitive resources (GitHub repository admin, RELEASE_TOKEN secret, ghcr.io publish permissions) are managed entirely through GitHub's built-in access controls — the repository is owned by a single maintainer (StayPirate). There is no team or multi-person access to sensitive resources that requires a documented roster beyond what GitHub already surfaces in Settings > Collaborators.



    A documentação do projeto DEVE incluir descrições dos papéis e responsabilidades dos membros do projeto [OSPS-GV-01.02]
    Documente os participantes do projeto e seus papéis através de artefatos como members.md, governance.md, maintainers.md ou arquivo similar dentro do repositório de código-fonte do projeto.

    CONTRIBUTING.md documents the roles and responsibilities: the repository has a single maintainer/owner responsible for reviewing and merging contributions, managing releases, and triaging security reports. SECURITY.md identifies the security contact role (security@suse.com). The CODEOWNERS mechanism is implicit (single owner); GitHub's collaborator settings surface access levels. For a single-maintainer project this is sufficient — there are no additional roles (committers, release managers, etc.) to document.



    A documentação do projeto DEVE incluir um guia para contribuidores de código que inclua os requisitos para contribuições aceitáveis. [OSPS-GV-03.02]
    Estenda o conteúdo de CONTRIBUTING.md ou CONTRIBUTING/ na documentação do projeto para delinear os requisitos para contribuições aceitáveis, incluindo padrões de codificação, requisitos de testes e diretrizes de submissão para contribuidores de código. É recomendado que este guia seja a fonte da verdade tanto para contribuidores quanto para aprovadores.

    CONTRIBUTING.md provides a comprehensive contributor guide covering: development environment setup, code style and linting requirements (ruff check, ruff format, mypy --strict), testing requirements (all changes must include tests, pytest must pass), commit message format (Conventional Commits), PR process (title format, issue linkage, required CI checks), and the specs-first workflow (feature specifications must exist before implementation). The document also includes a table of which changes require a specification and which do not.



    O sistema de controle de versão DEVE exigir que todos os contribuidores de código afirmem que estão legalmente autorizados a fazer as contribuições associadas em cada commit. [OSPS-LE-01.01]
    Inclua um DCO no repositório do projeto, exigindo que os contribuidores de código afirmem que estão legalmente autorizados a confirmar as contribuições associadas em cada commit. Use uma verificação de status para garantir que a afirmação seja feita. Um CLA também satisfaz este requisito. Alguns sistemas de controle de versão, como o GitHub, podem incluir isso nos termos de serviço da plataforma.

    The project does not currently require a DCO (Developer Certificate of Origin) sign-off or equivalent legal assertion on commits. There is no Signed-off-by requirement documented in CONTRIBUTING.md, no DCO bot or GitHub App configured, and no pre-commit hook enforcing the -s flag. Contributors are not required to assert legal authorization to make their contributions.



    Quando um commit é feito na branch primária, quaisquer verificações de status automatizadas para commits DEVEM passar ou ser manualmente ignoradas. [OSPS-QA-03.01]
    Configure o sistema de controle de versão do projeto para exigir que todas as verificações de status automatizadas passem ou exijam reconhecimento manual antes que um commit possa ser mesclado na branch primária. É recomendado que quaisquer verificações de status opcionais NÃO sejam configuradas como um requisito de aprovação ou reprovação que os aprovadores possam ser tentados a ignorar.

    Branch protection on master requires all 7 status checks to pass before merge (Backend Lint, Backend Type Check, Backend Security Scan, Backend Tests, Image Smoke Test, Shell Lint, PR Metadata), with strict status checks enabled. Direct pushes to master are blocked — all commits arrive via squash merge of a PR that has passed CI. Bypassing requires admin override (enforce_admins is disabled, allowing the repository owner to bypass in exceptional circumstances — this satisfies the "pass or be manually bypassed" wording).



    Antes de um commit ser aceito, os pipelines de CI/CD do projeto DEVEM executar pelo menos um conjunto de testes automatizados para garantir que as alterações atendam às expectativas. [OSPS-QA-06.01]
    Testes automatizados devem ser executados antes de cada mesclagem na branch primária. O conjunto de testes deve ser executado em um pipeline de CI/CD e os resultados devem ser visíveis a todos os contribuidores. O conjunto de testes deve ser executado em um ambiente consistente e deve ser executado de uma maneira que permita aos contribuidores executar os testes localmente. Exemplos de conjuntos de testes incluem testes unitários, testes de integração e testes de ponta a ponta.

    The CI pipeline (ci.yml) runs on every pull request targeting master and includes a full automated test suite: uv run pytest executes 850+ unit and integration tests. Branch protection requires the "Backend Tests" status check to pass before merge — no commit reaches master without the test suite passing.



    Quando o projeto tiver feito um lançamento, a documentação do projeto DEVE incluir documentação de design demonstrando todas as ações e atores dentro do sistema. [OSPS-SA-01.01]
    Inclua designs na documentação do projeto que expliquem as ações e atores. Atores incluem qualquer subsistema ou entidade que possa influenciar outro segmento no sistema. Certifique-se de que isso seja atualizado para novos recursos ou mudanças que quebrem compatibilidade.

    docs/architecture.md documents the system boundary, layer architecture, and integration patterns. docs/system-map.md provides component diagrams and data flow visuals covering all actors (vulnerability analysts, team leads, automation/CLI, external systems) and actions (CVE ingestion, ticket lifecycle, release detection, eligibility evaluation). Feature specifications in docs/features/ detail every action per domain (identity, tickets, packages, integrations, platform) including state machines, API operations, and background task behaviors.



    Quando o projeto tiver feito um lançamento, a documentação do projeto DEVE incluir descrições de todas as interfaces de software externas dos ativos de software lançados. [OSPS-SA-02.01]
    Documente todas as interfaces de software (APIs) dos ativos de software lançados, explicando como os usuários podem interagir com o software e quais dados são esperados ou produzidos. Certifique-se de que isso seja atualizado para novos recursos ou mudanças que quebrem compatibilidade.

    docs/api-spec.md provides the complete external API specification including endpoint paths, HTTP methods, request/response schemas, error codes, pagination, filtering, and authentication requirements. docs/data-sources.md catalogs all external system interfaces (NVD, MITRE, IBS/OBS, SMELT, AIMAAS, Bugzilla, RabbitMQ) with protocols, hosts, and data contracts. docs/cli-reference.md documents the CLI interface. The OpenAPI contract is auto-generated and published to GitHub Pages on each release, providing a machine-readable description of the full REST API surface.



    Quando o projeto tiver feito um lançamento, o projeto DEVE realizar uma avaliação de segurança para compreender os problemas de segurança potenciais mais prováveis e impactantes que poderiam ocorrer dentro do software. [OSPS-SA-03.01]
    Realizar uma avaliação de segurança informa tanto os membros do projeto quanto os consumidores a jusante que o projeto compreende quais problemas poderiam surgir dentro do software. Compreender quais ameaças poderiam se concretizar ajuda o projeto a gerenciar e tratar riscos. Essa informação é útil para os consumidores a jusante demonstrarem a perspicácia e as práticas de segurança do projeto. Certifique-se de que isso seja atualizado para novos recursos ou mudanças disruptivas.

    The project maintains an extensive docs/reviews/ directory with security review findings for every major component — over 50 review documents covering authentication, RBAC, networking, API specification, fetcher infrastructure, and all integration points. Each review includes findings from a dedicated @security-reviewer agent (among others), threat model assessments (e.g., brute-force resistance in local-authentication, trusted-upstream assumptions in networking, pre-disclosure data exposure in RBAC), and explicit risk acceptance decisions with rationale. The CI pipeline also runs bandit (static security analysis) and pip-audit (dependency vulnerability scanning) on every merge. Security-sensitive areas are subject to mandatory review per Guardrail 10.



    A documentação do projeto DEVE incluir uma política de divulgação coordenada de vulnerabilidades (CVD), com um prazo claro para resposta. [OSPS-VM-01.01]
    Crie um arquivo SECURITY.md na raiz do diretório, descrevendo a política do projeto para divulgação coordenada de vulnerabilidades. Inclua um método para relatar vulnerabilidades. Estabeleça expectativas sobre como o projeto responderá e tratará problemas relatados.

    SECURITY.md defines a coordinated vulnerability disclosure policy: vulnerabilities are reported privately to security@suse.com, the team acknowledges receipt within 5 business days, provides an initial assessment within 15 business days, and coordinates disclosure timing with the reporter. The document explicitly requests reporters to allow a reasonable timeframe for remediation before public disclosure.



    A documentação do projeto DEVE fornecer um meio de relatar vulnerabilidades de forma privada diretamente aos contatos de segurança do projeto. [OSPS-VM-03.01]
    Forneça um meio para que pesquisadores de segurança relatem vulnerabilidades privadamente ao projeto. Isso pode ser um endereço de e-mail dedicado, um formulário web, ferramentas especializadas do VCS, endereços de e-mail para contatos de segurança ou outros métodos.

    SECURITY.md directs reporters to email security@suse.com for private vulnerability disclosure. Additionally, GitHub's Private Vulnerability Reporting feature is enabled on the repository (visible in the Security tab), providing a second private channel directly integrated with GitHub's advisory workflow. Both mechanisms allow reporters to communicate directly with the project's security contacts without public exposure.



    A documentação do projeto DEVE publicar publicamente dados sobre vulnerabilidades descobertas. [OSPS-VM-04.01]
    Forneça informações sobre vulnerabilidades conhecidas em um canal público previsível, como uma entrada CVE, postagem em blog ou outro meio. Na medida do possível, essa informação deve incluir versão(ões) afetada(s), como um consumidor pode determinar se está vulnerável e instruções para mitigação ou remediação.

    GitHub's Security Advisories feature is enabled on the repository, providing the standard mechanism to publicly publish data about discovered vulnerabilities (CVE assignment, affected versions, severity, remediation). SECURITY.md references the coordinated disclosure process that leads to public advisory publication once a fix is available. Any confirmed vulnerability would be published as a GitHub Security Advisory with full details (description, affected versions, CVSS score, remediation steps).



Você pode usar ferramentas e sistemas de IA para propor alterações por meio de uma URL simples, como https://www.bestpractices.dev/pt-BR/projects/14063/choose/edit?osps_ac_01_01_status=Met&osps_ac_01_01_justification=GitHub+enforced. Veja nosso sistema de propostas de automação para saber como fazer isso. Estes dados estão disponíveis sob o Community Data License Agreement – Permissive, Version 2.0 (CDLA-Permissive-2.0). Isso significa que um Destinatário de Dados pode compartilhar os Dados, com ou sem modificações, desde que o Destinatário de Dados disponibilize o texto deste acordo com os Dados compartilhados. Por favor, dê crédito a Gianluca Gabrielli e aos contribuidores do selo de melhores práticas OpenSSF.

Entrada de selo do projeto de propriedade de: Gianluca Gabrielli.
Entrada criada em 2026-08-13 13:55:49 UTC, última atualização em 2026-08-14 06:09:03 UTC. Selo de aprovação alcançado pela última vez em 2026-08-13 16:48:08 UTC.