Package: gnupg
Version: 1.4.2-2
Severity: important
Tags: security

On Wed, Feb 15, 2006 at 08:49:25AM +0100, Werner Koch wrote:
>            False positive signature verification in GnuPG
>            ==============================================
> 
> Summary
> =======
> 
> The Gentoo project identified a security related bug in GnuPG.  When
> using any current version of GnuPG for unattended signature
> verification (e.g. by scripts and mail programs), false positive
> signature verification of detached signatures may occur.
> 
> This problem affects the tool *gpgv*, as well as using "gpg --verify"
> to imitate gpgv, if only the exit code of the process is used to
> decide whether a detached signature is valid.  This is a plausible
> mode of operation for gpgv.
> 
> If, as suggested, the --status-fd generated output is used to decide
> whether a signature is valid, no problem exists.  In particular
> applications making use of the GPGME library[2] are not affected.
> 
> To solve this problem an update of the current stable version has been
> released (see below).
> 
> Please do not send private mail in response to this message.  The
> mailing list gnupg-devel is the best place to discuss this problem
> (please subscribe first so you don't need moderator approval [1]).
> 
> 
> Impact:
> =======
> 
> Signature verification of detached signatures does not work, thus
> modified versions of signature protected files may not be detected.
> 
> All versions of gnupg prior to 1.4.2.1 are affected if they are used
> in certain unattended operation modes.
> 
> There is no problem using GnuPG in an interactive way because GnuPG
> won't print any signature status at all; i.e. no "Good signature".
> 
> Scripts and applications using gpg or gpgv with the --status-fd option
> and properly parsing this output are not affected.
> 
> Applications using the GPGME library[2] are not affected.
> 
> The GnuPG versions 1.9 are not affected unless the currently
> deprecated gpg part has been enabled.
> 
> 
> Solution:
> =========
> 
> Update GnuPG as soon as possible to version 1.4.2.1.  There are no
> fixes for older versions available, although the fix described below
> may be adjusted for them.
> 
> To update please follow the instructions found at
> http://www.gnupg.org/download/ or read on:
> 
> GnuPG 1.4.2.1 may be downloaded from one of the GnuPG mirror sites or
> direct from ftp://ftp.gnupg.org/gcrypt/ .  The list of mirrors can be
> found at http://www.gnupg.org/mirrors.html .  Note, that GnuPG is not
> available at ftp.gnu.org.
> 
> On the mirrors you should find the following files in the *gnupg*
> directory:
> 
>   gnupg-1.4.2.1.tar.bz2 (2.8M)
>   gnupg-1.4.2.1.tar.bz2.sig
> 
>       GnuPG source compressed using BZIP2 and OpenPGP signature.
> 
>   gnupg-1.4.2.1.tar.gz (4.0M)
>   gnupg-1.4.2.1.tar.gz.sig
> 
>       GnuPG source compressed using GZIP and OpenPGP signature.
> 
>   gnupg-1.4.2-1.4.2.1.diff.bz2 (39k)
> 
>       A patch file to upgrade a 1.4.2 GnuPG source. 
> 
> Select one of them. To shorten the download time, you probably want to
> get the BZIP2 compressed file.  Please try another mirror if
> exceptional your mirror is not yet up to date.
> 
> In the *binary* directory, you should find these files:
> 
>   gnupg-w32cli-1.4.2.1.exe (1.4M)
>   gnupg-w32cli-1.4.2.1.exe.sig
> 
>       GnuPG compiled for Microsoft Windows and OpenPGP signature.
>       Note that this is a command line version and now comes with a
>       graphical installer tool.  The source files are the same as
>       given above.  Note, that a new version of the Gpg4Win
>       package[3], including an updated version of GnuPG, will be
>       available later today.
> 
> 
> In order to check that the version of GnuPG which you are going to
> install is an original and unmodified one, you can do it in one of
> the following ways:
> 
>  * If you already have a trusted version of GnuPG installed, you
>    can simply check the supplied signature.  For example to check the
>    signature of the file gnupg-1.4.2.1.tar.bz2 you would use this command:
> 
>      gpg --verify gnupg-1.4.2.1.tar.bz2.sig
> 
>    This checks whether the signature file matches the source file.
>    You should see a message indicating that the signature is good and
>    made by that signing key.  Make sure that you have the right key,
>    either by checking the fingerprint of that key with other sources
>    or by checking that the key has been signed by a trustworthy other
>    key.  Note, that you can retrieve the signing key using "finger wk
>    'at' g10code.com" or "finger dd9jn 'at' gnu.org" or using the
>    keyservers.  From time to time I prolong the expiration date; thus
>    you might need a fresh copy of that key.
> 
>    Never use a GnuPG version you just downloaded to check the
>    integrity of the source - use an existing GnuPG installation!
>    Watch out for a "Good signature" messages.
> 
>  * If you are not able to use an old version of GnuPG, you have to
>    verify the SHA-1 checksum.  Assuming you downloaded the file
>    gnupg-1.4.2.1.tar.bz2, you would run the sha1sum command like this:
> 
>      sha1sum gnupg-1.4.2.1.tar.bz2
> 
>    and check that the output matches the first line from the
>    following list:
> 
> 1c0306ade25154743d6f6f9ac05bee74c55c6eda  gnupg-1.4.2.1.tar.bz2
> cefc74560f21bde74eed298d86460612cd7e12ee  gnupg-1.4.2.1.tar.gz
> 98d597b1a9871b4aadc820d8641b36ce09125612  gnupg-1.4.2-1.4.2.1.diff.bz2
> a4db35a72d72df8e76751adc6f013b4c96112fd4  gnupg-w32cli-1.4.2.1.exe
> 
> 
> Background:
> ===========
> 
> If a file with arbitrary data, for example 64 times the character
> 0xCA, is used as the detached signature, any data file will lead to
> gpg exiting with 0 (success).  There won't be any messages indicating
> that the signature is valid or false:
> 
>   $ fortune >x.txt
>   $ perl -e 'print "\xca"x"64"' >x.txt.sig
>   $ gpgv x.txt.sig x.txt
>   $ echo $?
>   0
> 
> Cleary this should not return success.
> 
> The same problem appears when using "gpg --verify" in place of gpgv.
> However in this case any application should to do further checks to
> make sure that the key verifying the signature is actually the desired
> one, thus using "gpg --verify" without processing the --status-fd
> generated output is in general the wrong approach.
> 
> The fixed version makes sure that gpgv and "gpg --verify" won't return
> success if no signature has been seen.  A minimal but sufficient fix
> against 1.4.2 and possible older versions is:
> 
> ====8<============
> --- g10/mainproc.c    (revision 4001)
> +++ g10/mainproc.c    (working copy)
> @@ -77,6 +77,7 @@
>          int op;
>          int stop_now;
>      } pipemode;
> +    int any_sig_seen;  /* Set to true if a signature packet has been seen. */
>  };
>  
>  
> @@ -217,6 +218,7 @@
>  {
>      KBNODE node;
>  
> +    c->any_sig_seen = 1;
>      if( pkt->pkttype == PKT_SIGNATURE && !c->list ) {
>       /* This is the first signature for the following datafile.
>        * GPG does not write such packets; instead it always uses
> @@ -1137,6 +1139,18 @@
>      c->signed_data = signedfiles;
>      c->sigfilename = sigfilename;
>      rc = do_proc_packets( c, a );
> + 
> +    /* If we have not encountered any signature we print an error
> +       messages, send a NODATA status back and return an error code.
> +       Using log_error is required because verify_files does not check
> +       error codes for each file but we want to terminate the process
> +       with an error. */ 
> +    if (!rc && !c->any_sig_seen)
> +      {
> +      write_status_text (STATUS_NODATA, "4");
> +        log_error (_("no signature found\n"));
> +        rc = -1;
> +      }
>      m_free( c );
>      return rc;
>  }
> ====>8============
> 
> Note that the released version also includes a test case for this bug
> and prints an additional diagnostic.  With the patch above the output
> using the same test data as above should be:
> 
>   $ gpgv x.txt.sig x.txt
>   gpgv: no signature found
>   gpgv: verify signatures failed: eof
>   $ echo $?
>   2
> 
> 
> 
> Thanks
> ======
> 
> taviso from the Gentoo project found this vulnerability and informed
> me on Monday evening.  Unfortunately I had already switched off my
> monitor at that time.  The update has been released yesterday evening
> (CET).
> 
> 
> 
> Salam-Shalom,
> 
>    Werner
> 
> 
> 
> [1] http://lists.gnupg.org/mailman/listinfo/gnupg-devel
> [2] http://www.gnupg.org/related_software/gpgme
> [3] http://www.gpg4win.org
> 
> -- 
> Werner Koch                                      <[EMAIL PROTECTED]>
> The GnuPG Experts                                http://g10code.com
> Free Software Foundation Europe                  http://fsfeurope.org
> Join the Fellowship and protect your Freedom!    http://www.fsfe.org



> _______________________________________________
> Gnupg-announce mailing list
> [EMAIL PROTECTED]
> http://lists.gnupg.org/mailman/listinfo/gnupg-announce



-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to