Observatoire de sécurité des versions · v0.7.2

Sachez ce que dit vraiment la posture de sécurité de votre forge.

VersionSec examine une instance Gitea ou Forgejo qui vous appartient ou que vous êtes expressément autorisé à évaluer. Il lit et ne modifie jamais rien. La revue de configuration et celle du runner fonctionnent entièrement hors ligne, sans aucune requête réseau.

  • lecture seule
  • une cible autorisée
  • déterministe
  • Gitea et Forgejo
  • MD / JSON / SARIF

Apache-2.0 - pas de compte, pas de plan de contrôle hébergé, pas de télémétrie.

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
version actuelle
v0.7.2
contrôles
22 ID stables
tests
433 réussis
provenance
attestation signée
licence
Apache-2.0

Des questions de posture auxquelles on répond souvent de mémoire

La plupart des forges auto-hébergées sont configurées une fois puis considérées sûres indéfiniment. VersionSec transforme quatre questions récurrentes en preuves que vous pouvez conserver, comparer et remettre à un auditeur.

La version en cours est-elle réellement concernée ?

La posture de version est évaluée face à des avis nommés ; une version inconnue est signalée comme inconnue, jamais silencieusement comme conforme.

Que peut atteindre un visiteur anonyme ?

Un ensemble borné de chemins autorisés est interrogé en GET uniquement, et c'est le statut exact observé qui est rapporté.

La configuration correspond-elle à nos hypothèses ?

Un instantané de configuration anonymisé est examiné entièrement hors ligne : l'instance elle-même n'est jamais touchée.

Que peut faire un job CI à l'hôte ?

Mode privilégié, exposition du socket Docker, montages hôte, mode réseau et durée de vie des identifiants sont évalués à partir d'un instantané déclaré.

Quatre modes de revue, un rapport déterministe

Chaque mode produit la même structure de rapport, pour rester comparable dans le temps.

Évaluation en direct

Une cible par exécution, requêtes GET uniquement, sur une liste fermée de chemins. Aucune écriture, aucun changement d'état, aucune découverte d'autres hôtes.

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

Posture de version face aux avis

Avis nommés évalués face à la version confirmée par l'opérateur : concernée, corrigée ou inconnue, dit explicitement.

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

Revue de configuration hors ligne

Examine un instantané anonymisé que vous fournissez. Zéro requête réseau, donc sûr même là où un scan en direct n'est pas permis.

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

Revue de runner Actions hors ligne

Examine un instantané de runner déclaré face à un schéma fermé. La sévérité découle du niveau de confiance déclaré, pas de la version seule.

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

Versions qualifiées, pas un support général

Gitea et Forgejo ont des fournisseurs distincts avec leurs propres contrôles. Voici exactement les versions testées - pas une promesse pour toutes les versions des deux branches.

Provider
Versions serveur qualifiées
Versions runner qualifiées
Gitea
1.26.41.27.3
3.4.2gitea-runner
Forgejo
15.0.816.0.4
13.0.013.1.0forgejo-runner

D'autres versions fonctionnent souvent, mais ne sont pas présentées comme vérifiées.

Déroulement d'une exécution

1

Déclarer la cible

Vous nommez une instance et son produit, et confirmez votre autorisation.

2

Collecte bornée

Seuls les chemins autorisés sont interrogés, en GET. Les modes hors ligne lisent un fichier et n'envoient rien.

3

Évaluation déterministe

Chaque contrôle rend PASS, FAIL, WARN, NOT_APPLICABLE ou UNKNOWN. Une preuve absente n'est jamais un PASS.

4

Rapport et export

Markdown pour les humains, JSON pour les chaînes, SARIF 2.1.0 pour l'analyse de code. ID stables partout.

Preuves et provenance

Les artefacts publiés sont ceux que la CI a construits. Leur provenance se vérifie en une commande, et une copie altérée est refusée.

Vérifier le téléchargement
$ gh attestation verify \
  versionsec-0.7.2-py3-none-any.whl \
  --repo gexiro-global/versionsec

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

Provenance de build signée

Les deux artefacts portent une attestation Sigstore produite par la CI du projet.

Empreintes publiées

Les SHA-256 du wheel et du sdist accompagnent la version et correspondent aux objets attestés.

Tests du contrat de version

Chaque commande documentée est exécutée comme un vrai sous-processus.

Identifiants stables

Les ID de constats et de schéma ne changent pas d'une version à l'autre pour des raisons de marque.

Formats de sortie

Markdown

Rapport lisible avec le tableau complet des constats, pour les humains et les tickets.

JSON

Document stable lisible par machine, avec identifiant de schéma versionné.

SARIF 2.1.0

Format standard d'échange d'analyse statique, pour les tableaux de bord et la CI.

VersionSec s'appelait ForgeGuard

Les versions jusqu'à 0.6.0 incluse ont été publiées sous le nom ForgeGuard et restent disponibles et inchangées. À partir de 0.7.0, le nom canonique est VersionSec.

Les utilisateurs existants ne perdent rien : la commande forgeguard et import forgeguard continuent de fonctionner via une couche de compatibilité qui pointe vers la même implémentation, et FORGEGUARD_TOKEN est toujours lu.

Guide de migration

Pourquoi les identifiants FG-* restent

Les ID de constats comme FG-VER et de schéma comme forgeguard.assessment.v1 sont l'identité du contrat, pas la marque. Les renommer casserait les chaînes de rapports, les listes d'exceptions et les bases SARIF existantes : ils restent donc volontairement inchangés.

Erratum 0.7.0

En 0.7.0 l'option de version manquait : versionsec --version se terminait par une erreur d'option inconnue. Le scan et les revues n'étaient pas affectés. 0.7.1 corrige cela et remplace 0.7.0.

Installation

PyPI: Publié sur PyPI et installable directement. La passerelle de compatibilité <code>forgeguard==0.7.2</code> installe la même implémentation pour les utilisateurs existants.
installer depuis 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
première exécution
$ versionsec providers
$ versionsec checks
$ versionsec config review --snapshot snap.json
$ versionsec runner review --snapshot runner.json

Ce que VersionSec ne fait pas

L'usage est limité à une instance qui vous appartient ou que vous êtes expressément autorisé à évaluer. La base légale reste la responsabilité de l'opérateur.

Aucune exploitation de faille, aucun payload, aucune requête modifiant l'état.
Aucune découverte de cibles ni scan de masse - une cible déclarée par exécution.
Aucune affirmation qu'une instance n'est pas compromise, ni détermination de compromission.
Aucune certification de sécurité ou de conformité.

Questions réellement posées

Gitea et Forgejo sont-ils supportés également ?
Ce sont des fournisseurs distincts, avec leurs propres contrôles et versions qualifiées.
Faut-il un accès réseau ?
Pour l'évaluation en direct oui, vers la seule cible déclarée. Les revues hors ligne n'envoient rien.
Faut-il un jeton d'administration ?
Non. L'évaluation en direct est anonyme par conception ; un jeton est optionnel.
Cela modifie-t-il mon instance ?
Non. Uniquement des requêtes GET sur une liste fermée de chemins.
Et si un contrôle n'est pas évaluable ?
Il est rapporté UNKNOWN ou NOT_APPLICABLE. Une preuve absente n'est jamais une réussite.
Une version hors liste est-elle non supportée ?
Elle fonctionne généralement, mais seules les versions listées sont testées.
J'utilise déjà ForgeGuard. Qu'est-ce qui casse ?
Rien. Commande, import, variable d'environnement et tous les ID FG-* continuent de fonctionner.
Quelle licence ?
Apache-2.0. Sources, artefacts et suite de tests sont publics.

Contact

Pour l'outil, une intégration ou une revue de durcissement délimitée. Choisissez le sujet.

Vous signalez une faille dans VersionSec ? Utilisez la politique de sécurité du dépôt. Politique de sécurité.