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.
$ 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.
D'autres versions fonctionnent souvent, mais ne sont pas présentées comme vérifiées.
Déroulement d'une exécution
Déclarer la cible
Vous nommez une instance et son produit, et confirmez votre autorisation.
Collecte bornée
Seuls les chemins autorisés sont interrogés, en GET. Les modes hors ligne lisent un fichier et n'envoient rien.
Évaluation déterministe
Chaque contrôle rend PASS, FAIL, WARN, NOT_APPLICABLE ou UNKNOWN. Une preuve absente n'est jamais un PASS.
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.
$ 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.
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
$ 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
$ 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.
Questions réellement posées
Gitea et Forgejo sont-ils supportés également ?
Faut-il un accès réseau ?
Faut-il un jeton d'administration ?
Cela modifie-t-il mon instance ?
Et si un contrôle n'est pas évaluable ?
Une version hors liste est-elle non supportée ?
J'utilise déjà ForgeGuard. Qu'est-ce qui casse ?
Quelle licence ?
Contact
Pour l'outil, une intégration ou une revue de durcissement délimitée. Choisissez le sujet.