Observatório de segurança de versões · v0.7.2

Saiba o que a postura de segurança da sua instância Git realmente diz.

O VersionSec revisa uma instância Gitea ou Forgejo que você possui ou está expressamente autorizado a avaliar. Ele apenas lê; nunca altera nada. A revisão de configuração e a do runner rodam totalmente offline, sem nenhuma requisição de rede.

  • somente leitura
  • um alvo autorizado
  • determinístico
  • Gitea e Forgejo
  • MD / JSON / SARIF

Apache-2.0 - sem conta, sem painel hospedado, sem telemetria.

versionsecread-only
$ versionsec scan \
  --url https://git.example.com \
  --authorized --product gitea \
  --format md,json,sarif

FG-VER          PASS   1.27.3 confirmed
FG-CVE-27771    PASS   fixed in this version
FG-ANON         WARN   anonymous API reachable
FG-REG          PASS   OCI root requires auth
FG-SIGNIN       WARN   repo browser is public

# 22 stable IDs · md + json + sarif written
versão atual
v0.7.2
verificações
22 IDs estáveis
testes
433 aprovados
proveniência
atestação assinada
licença
Apache-2.0

Perguntas de postura normalmente respondidas de memória

A maioria das instâncias auto-hospedadas é configurada uma vez e depois considerada segura indefinidamente. O VersionSec transforma quatro perguntas recorrentes em evidências que você pode guardar, comparar e entregar a um auditor.

A versão em execução está realmente afetada?

A postura de versão é avaliada contra avisos nomeados; uma versão desconhecida é relatada como desconhecida, nunca silenciosamente como aprovada.

O que um visitante anônimo alcança?

Um conjunto limitado de caminhos permitidos é consultado apenas com GET, e o status exatamente observado é o que é relatado.

A configuração corresponde ao que acreditamos?

Um snapshot de configuração anonimizado é revisado totalmente offline, sem tocar na instância.

O que um job de CI pode fazer com o host?

Modo privilegiado, socket do Docker, montagens do host, modo de rede e tempo de vida das credenciais são avaliados a partir de um snapshot declarado.

Quatro modos de revisão, um relatório determinístico

Cada modo produz a mesma estrutura de relatório, mantendo os resultados comparáveis ao longo do tempo.

Avaliação ao vivo

Um alvo por execução, apenas requisições GET contra uma lista fechada de caminhos. Sem escrita, sem mudança de estado, sem descoberta de outros hosts.

  • FG-VER
  • FG-ANON
  • FG-HTTP
  • FG-REG
  • FG-SIGNIN

Postura de versão frente a avisos

Avisos nomeados avaliados contra a versão confirmada pelo operador: afetada, corrigida ou desconhecida, dito explicitamente.

  • FG-CVE-27771
  • FG-CVE-78433
  • FG-FJ-TEMPLATE-20260910

Revisão de configuração offline

Revisa um snapshot anonimizado fornecido por você. Zero requisições de rede, também adequada onde um scan ao vivo não é permitido.

  • FG-CONFIG-REGISTRATION
  • FG-CONFIG-SIGNIN
  • FG-CONFIG-PRIVACY
  • FG-CONFIG-MFA

Revisão offline do runner do Actions

Revisa um snapshot de runner declarado contra um schema fechado. A severidade decorre da confiança declarada, não apenas da versão.

  • FG-RUNNER-PRIVILEGED
  • FG-RUNNER-DOCKER
  • FG-RUNNER-VOLUMES
  • FG-RUNNER-NETWORK

Versões qualificadas, não suporte irrestrito

Gitea e Forgejo têm provedores separados, com verificações próprias. Estas são exatamente as versões testadas - não uma promessa para todas as versões das duas linhas.

Provider
Versões de servidor qualificadas
Versões de runner qualificadas
Gitea
1.26.41.27.3
3.4.2gitea-runner
Forgejo
15.0.816.0.4
13.0.013.1.0forgejo-runner

Outras versões costumam funcionar, mas não são apresentadas como verificadas.

Como uma execução acontece

1

Declarar o alvo

Você indica uma instância e seu produto, e confirma que está autorizado a avaliá-la.

2

Coleta limitada

Apenas caminhos permitidos são consultados, com GET. Os modos offline leem um arquivo e não enviam nada.

3

Avaliação determinística

Cada verificação retorna PASS, FAIL, WARN, NOT_APPLICABLE ou UNKNOWN. Falta de evidência nunca é PASS.

4

Relatório e exportação

Markdown para pessoas, JSON para pipelines, SARIF 2.1.0 para análise de código. IDs estáveis.

Evidências e proveniência

Os artefatos publicados são os que a CI construiu. A proveniência se verifica com um único comando, e uma cópia adulterada é recusada.

Verificar o download
$ gh attestation verify \
  versionsec-0.7.2-py3-none-any.whl \
  --repo gexiro-global/versionsec

# wheel  sha256
ea7d40357d808ed490113a62b6dae7fe
4af7e655b61c687c77689b4041828f5d
# sdist  sha256
fcbacb335a17d43436c819507fdb968a
12ff0754644ea6ee7e0e73fc5221b79d

Proveniência de build assinada

Ambos os artefatos carregam uma atestação Sigstore gerada pela CI do projeto.

Hashes publicados

Os SHA-256 do wheel e do sdist acompanham a release e coincidem com os objetos atestados.

Testes do contrato de release

Cada comando documentado é executado como um subprocesso real.

Identificadores estáveis

IDs de achados e de schema não mudam entre releases por motivo de marca.

Formatos de saída

Markdown

Relatório legível com a tabela completa de achados, para pessoas e para tickets.

JSON

Documento estável legível por máquina, com identificador de schema versionado.

SARIF 2.1.0

Formato padrão de troca de análise estática, para painéis e CI.

VersionSec antes se chamava ForgeGuard

As releases até a 0.6.0 inclusive foram publicadas como ForgeGuard e continuam disponíveis e inalteradas. A partir da 0.7.0 o nome canônico é VersionSec.

Quem já usava não perde nada: o comando forgeguard e import forgeguard continuam funcionando por uma camada de compatibilidade que aponta para a mesma implementação, e FORGEGUARD_TOKEN continua sendo lido.

Guia de migração

Por que os identificadores FG-* permanecem

IDs de achados como FG-VER e de schema como forgeguard.assessment.v1 são identidade de contrato, não marca. Renomeá-los quebraria pipelines de relatórios, listas de exceções e baselines SARIF existentes.

Errata da 0.7.0

Na 0.7.0 faltava a opção de versão: versionsec --version terminava com erro de opção desconhecida. O scan e as revisões não eram afetados. A 0.7.1 corrige isso e substitui a 0.7.0.

Instalação

PyPI: Publicado no PyPI e instalável diretamente. A ponte de compatibilidade <code>forgeguard==0.7.2</code> instala a mesma implementação para quem já usava.
instalar do pypi v0.7.2
$ python -m pip install versionsec==0.7.2

$ versionsec --version
VersionSec 0.7.2

# existing ForgeGuard users
$ python -m pip install forgeguard==0.7.2
primeira execução
$ versionsec providers
$ versionsec checks
$ versionsec config review --snapshot snap.json
$ versionsec runner review --snapshot runner.json

O que o VersionSec não faz

O uso é limitado a uma instância que você possui ou está expressamente autorizado a avaliar. A base legal continua sendo responsabilidade do operador.

Sem exploração de vulnerabilidades, sem payloads, sem requisições que alterem estado.
Sem descoberta de alvos nem varredura em massa - um alvo declarado por execução.
Sem afirmar que uma instância não foi comprometida, nem determinar comprometimento.
Sem qualquer certificação de segurança ou conformidade.

Perguntas que realmente aparecem

Gitea e Forgejo têm o mesmo suporte?
São provedores separados, com verificações e versões qualificadas próprias.
Precisa de acesso à rede?
Para a avaliação ao vivo sim, ao único alvo declarado. As revisões offline não enviam nada.
Precisa de token de administrador?
Não. A avaliação ao vivo é anônima por design; o token é opcional.
Ele altera algo na minha instância?
Não. Apenas requisições GET contra uma lista fechada de caminhos.
E se uma verificação não puder ser avaliada?
É relatada como UNKNOWN ou NOT_APPLICABLE. Falta de evidência nunca é aprovação.
Uma versão fora da lista não é suportada?
Costuma funcionar, mas apenas as versões listadas são testadas.
Já uso ForgeGuard. O que quebra?
Nada. Comando, import, variável de ambiente e todos os IDs FG-* continuam funcionando.
Qual é a licença?
Apache-2.0. Código, artefatos e suíte de testes são públicos.

Contato

Sobre a ferramenta, integração ou uma revisão de hardening delimitada. Escolha o assunto.

Reportando uma vulnerabilidade no próprio VersionSec? Use a política de segurança do repositório. Política de segurança.