diff options
Diffstat (limited to 'doc/detached-sig-verification-bug.txt')
| -rw-r--r-- | doc/detached-sig-verification-bug.txt | 231 |
1 files changed, 0 insertions, 231 deletions
diff --git a/doc/detached-sig-verification-bug.txt b/doc/detached-sig-verification-bug.txt deleted file mode 100644 index a938cd7ee..000000000 --- a/doc/detached-sig-verification-bug.txt +++ /dev/null @@ -1,231 +0,0 @@ - False positive signature verification in GnuPG - ============================================== - (released 2006-02-15) - - -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[4], including an updated version of GnuPG will be - available later the day. - - -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). - - - - -[1] http://lists.gnupg.org/mailman/listinfo/gnupg-devel -[2] http://www.gnupg.org/related_software/gpgme -[3] http://www.gpg4win.org |
