Home GnuPG
Diffusion GnuPG da0164efc7f3

gpg: Fix a verification DoS due to a malicious subkey in the keyring.

Description

gpg: Fix a verification DoS due to a malicious subkey in the keyring.

* g10/getkey.c (get_pubkey): Factor code out to ...
(get_pubkey_bykid): new.  Add feature to return the keyblock.
(get_pubkey_for_sig): Add arg r_keyblock to return the used keyblock.
Request a signing usage.
(get_pubkeyblock_for_sig): Remove.
(finish_lookup): Improve debug output.
* g10/sig-check.c (check_signature): Add arg r_keyblock and pass it
down.
* g10/mainproc.c (do_check_sig): Ditto.
(check_sig_and_print): Use the keyblock returned by do_check_sig to
show further information instead of looking it up again with
get_pubkeyblock_for_sig.  Also re-check the signature after the import
of an included keyblock.

The problem here is that it is possible to import a key from someone
who added a signature subkey from another public key and thus inhibits
that a good signature good be verified.

Such a malicious key signature subkey must have been created w/o the
mandatory backsig which bind a signature subkey to its primary key.
For encryption subkeys this is not an issue because the existence of a
decryption private key is all you need to decrypt something and then
it does not matter if the public subkey or its binding signature has
been put below another primary key; in fact we do the latter for
ADSKs.

Backported-from-master: 48978ccb4e20866472ef18436a32744350a65158

Details

Provenance
wernerAuthored on Fri, Feb 21, 12:16 PM
Parents
rG9cd371b12d80: gpg: Remove a signature check function wrapper.
Branches
Unknown
Tags
Unknown
References
STABLE-BRANCH-2-4
Tasks
T7527: Keyring/keybox denial of service