Tiens, d'ailleurs si cela intéresse quelqu'un, voilà le code pourri en perl (désolé, c'est pas mon langage habituel) que j'avais pondu (il y a forcément plus simple, on peut le faire avec gpgme etc...):
#!/usr/bin/perl -w
use Text::ParseWords;
use strict;
my $retour = 1;
#We load into a hash the email address from the correspondance table
my %hash;
open(FILE,"< emailTable.csv") || die "enable to load the correspondance table";
while ()
{
my @record="ewords(';',0,$_);
$hash{$record[0]}=$record[1];
}
my $emailAddress = "";
#We cut to get the e-mail address
my $filename = $ARGV[1];
open(GPG,"gpg --logger-fd 1 --verify $filename |grep Good | cut -d '\<' -f2 | cut -d '\>' -f1 | ") || die "can't fork";
#If the signature is good, we got the address
while ($emailAddress = )
{
chomp($emailAddress);
chomp($hash{$emailAddress});
Le fichier emailTable.csv contenant les correspondances entre adresses email et non d'utilisateur CVS (ou Subversion du coup). Le script prend en paramètre le log signé et le nom de l'utilisateur qui a commité. On vérifie alors la signature et autorise ou non le commit. La faiblesse sous CVS du truc venait donc du fait qu'un pirate ayant le login CVS et l'adresse e-mail n'avait qu'à relire un log existant dans le référentiel et rajouter son texte hors balise GnuPG. Dans ce cas, le texte est vu comme correctement signé. D'ailleurs, si vous passez un texte signé correctement à GnuPG mais avec du texte hors balise, l'ensemble sera considéré comme signé, ce qui me semble être une faille dans la signature.
[^] # Re: Sortie de Subversion 1.0.0
Posté par Blackknight (site web personnel, Mastodon) . En réponse à la dépêche Sortie de Subversion 1.0.0. Évalué à 2.
Le fichier emailTable.csv contenant les correspondances entre adresses email et non d'utilisateur CVS (ou Subversion du coup). Le script prend en paramètre le log signé et le nom de l'utilisateur qui a commité. On vérifie alors la signature et autorise ou non le commit. La faiblesse sous CVS du truc venait donc du fait qu'un pirate ayant le login CVS et l'adresse e-mail n'avait qu'à relire un log existant dans le référentiel et rajouter son texte hors balise GnuPG. Dans ce cas, le texte est vu comme correctement signé. D'ailleurs, si vous passez un texte signé correctement à GnuPG mais avec du texte hors balise, l'ensemble sera considéré comme signé, ce qui me semble être une faille dans la signature.