keep on walking towards rc3
[gnupg.git] / doc / embedded-sig-verification-bug.txt
1            GnuPG does not detect injection of unsigned data
2            ================================================
3                  (released 2006-03-09, CVE-2006-0049)
4
5
6 Summary
7 =======
8
9 In the aftermath of the false positive signature verfication bug
10 (announced 2006-02-15) more thorough testing of the fix has been done
11 and another vulnerability has been detected.
12
13 This new problem affects the use of *gpg* for verification of
14 signatures which are _not_ detached signatures.  The problem also
15 affects verification of signatures embedded in encrypted messages;
16 i.e. standard use of gpg for mails.
17
18 To solve this problem, an update of the current stable version has
19 been released (see below).
20
21 Please do not respond to this message.  The mailing list gnupg-devel
22 is the best place to discuss this problem (please subscribe first so
23 you don't need moderator approval [1]).
24
25
26 Impact:
27 =======
28
29 Signature verification of non-detached signatures may give a positive
30 result but when extracting the signed data, this data may be prepended
31 or appended with extra data not covered by the signature.  Thus it is
32 possible for an attacker to take any signed message and inject extra
33 arbitrary data.
34
35 Detached signatures (a separate signature file) are not affected.
36
37 All versions of gnupg prior to 1.4.2.2 are affected.
38
39 Scripts and applications using gpg to verify the integrity of data are
40 affected. This includes applications using the GPGME library[2].
41
42 The GnuPG version 1.9.x is not affected unless the currently
43 deprecated gpg part has been enabled.
44
45
46 Solution:
47 =========
48
49 Update GnuPG as soon as possible to version 1.4.2.2.  There are no
50 fixes for older versions available.
51
52 If you can't get an update from your vendor, please follow the
53 instructions found at http://www.gnupg.org/download/ or read on:
54
55 GnuPG 1.4.2.2 may be downloaded from one of the GnuPG mirror sites or
56 direct from ftp://ftp.gnupg.org/gcrypt/ .  The list of mirrors can be
57 found at http://www.gnupg.org/mirrors.html .  Note, that GnuPG is not
58 available at ftp.gnu.org.
59
60 On the mirrors you should find the following files in the *gnupg*
61 directory:
62
63   gnupg-1.4.2.2.tar.bz2 (2.8M)
64   gnupg-1.4.2.2.tar.bz2.sig
65
66       GnuPG source compressed using BZIP2 and OpenPGP signature.
67
68   gnupg-1.4.2.2.tar.gz (4.0M)
69   gnupg-1.4.2.2.tar.gz.sig
70
71       GnuPG source compressed using GZIP and OpenPGP signature.
72
73   gnupg-1.4.2.1-1.4.2.2.diff.bz2 (101k)
74
75       A patch file to upgrade a 1.4.2.1 GnuPG source. 
76
77 Select one of them. To shorten the download time, you probably want to
78 get the BZIP2 compressed file.  Please try another mirror if
79 exceptional your mirror is not yet up to date.
80
81 In the *binary* directory, you should find these files:
82
83   gnupg-w32cli-1.4.2.2.exe (1.4M)
84   gnupg-w32cli-1.4.2.2.exe.sig
85
86       GnuPG compiled for Microsoft Windows and OpenPGP signature.
87       Note that this is a command line version and now comes with a
88       graphical installer tool.  The source files are the same as
89       given above.  Note, that a new version of the Gpg4Win
90       package[3], including a fixed version of GnuPG has also been
91       released today.
92
93
94 In order to check that the version of GnuPG which you are going to
95 install is an original and unmodified one, you can do it in one of
96 the following ways:
97
98  * If you already have a trusted version of GnuPG installed, you can
99    simply check the supplied signature.  Due to the fact that detached
100    signatures are used, the problem described here does not affect
101    this verification.  For example to check the signature of the file
102    gnupg-1.4.2.2.tar.bz2 you would use this command:
103
104      gpg --verify gnupg-1.4.2.2.tar.bz2.sig
105
106    This checks whether the signature file matches the source file.
107    You should see a message indicating that the signature is good and
108    made by that signing key.  Make sure that you have the right key,
109    either by checking the fingerprint of that key with other sources
110    or by checking that the key has been signed by a trustworthy other
111    key.  Note, that you can retrieve the signing key using "finger wk
112    'at' g10code.com" or "finger dd9jn 'at' gnu.org" or using the
113    keyservers.  From time to time I prolong the expiration date; thus
114    you might need a fresh copy of that key.
115
116    Never use a GnuPG version you just downloaded to check the
117    integrity of the source - use an existing GnuPG installation!
118    Watch out for a "Good signature" messages.
119
120  * If you are not able to use an old version of GnuPG, you have to
121    verify the SHA-1 checksum.  Assuming you downloaded the file
122    gnupg-1.4.2.1.tar.bz2, you would run the sha1sum command like this:
123
124      sha1sum gnupg-1.4.2.2.tar.bz2
125
126    and check that the output matches the first line from the
127    following list:
128
129 f5559ddb004e0638f6bd9efe2bac00134c5065ba  gnupg-1.4.2.2.tar.bz2
130 959540c1c6158e09d668ceee055bf366dc26d0bd  gnupg-1.4.2.2.tar.gz
131 880b3e937f232b1ca366bda37c4a959aacbd84f3  gnupg-1.4.2.1-1.4.2.2.diff.bz2
132 95dd7fd4c49423b86704acfc396ce5a53c8b19e7  gnupg-w32cli-1.4.2.2.exe
133
134
135
136 Background:
137 ===========
138
139 OpenPGP messages are made up of packets.  The signed data is a packet,
140 the actual signature is a packet and there are several control packets
141 as well.  For example:
142
143    O + D + S 
144
145 This describes a standard signed message made made up of a control
146 packet (O for one-pass signature packet), the actual signed data (D)
147 and the actual signature packet (S).  gpg checks that the signature S
148 is valid over the data D.  This is actually easy if not OpenPGP and
149 GnuPG would have a long tradition of changing the fromats.  PGP 2
150 versions used a different way of composing these packets:
151
152    S + D
153
154 and early versions of gpg, released before RFC2440, even created
155
156    D + S
157
158 i.e. without the one-pass packet.  Still this would all be easy to
159 process properly but in an ill-advised attempt to make things easier,
160 gpg allowed the processing of multiple signatures per file, like
161
162    O1 + D1 + S1 + O2 + D2 + S2
163
164 where two standard signatures are concatenated.  Now when combining
165 this with the other variants of signatures, things get really messy
166 and it is not always possible to assocciate the signature (S) with the
167 signed data (D).  gpg checked that this all works but unfortunately
168 these checks are not sufficient enough.  The attack is to change a
169 standard message to inject faked data (F).  A simple case is this:
170
171    F + O + D + S 
172
173 gpg now happily skips F for verification and does a proper signature
174 verification of D and if this succeeds, prints a positive result.
175 However when asked to output the actual signed data it will output the
176 concatenation of F + D and thus create the impression that both are
177 covered by the signature.  Depending on how gpg is invoked (in a
178 pipeline or using --output) it may even output just F and not at all
179 D.  There are several variants of the attack in where to put the faked
180 data.
181
182 The only correct solution to this problem is to get rid of the feature
183 to check concatenated signatures - this allows for strict checking of
184 valid packet composition.  This is what has been done in 1.4.2.2 and
185 in the forthcoming 1.4.3rc2.  These versions accept signatures only if
186 they are composed of
187
188   O + D + S
189   S + D
190   
191 Cleartext signatures are of course also supported, they are similiar
192 to the O+D+S case.
193
194 The actual checking for valid signature packet composition is done at
195 g10/mainproc.c, at the top of check_sig_and_print().
196
197
198 Thanks
199 ======
200
201 Tavis Ormandy again poked on gpg and found this vulnerability. 
202
203 The new version has been released yesterday and should by now be
204 available on all mirrors.
205
206
207
208
209 [1] http://lists.gnupg.org/mailman/listinfo/gnupg-devel
210 [2] http://www.gnupg.org/related_software/gpgme
211 [3] http://www.gpg4win.org