x/crypto/openpgp: Limit packet recursion depth.

A carefully crafted packet can cause the packet reader to push an
infinite number of recursive packet readers. This change limits
the number of recursive parsing levels within the packet reader.

More details at:
http://mumble.net/~campbell/misc/pgp-quine
https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2013-4402

Fixes #10751

Change-Id: Ib4e102d85f6496e2c7feb5b9d7e5db45db6032df
Reviewed-on: https://go-review.googlesource.com/9843
Reviewed-by: Adam Langley <agl@golang.org>
This commit is contained in:
KB Sriram
2015-05-08 01:16:24 +00:00
committed by Adam Langley
parent 59435533c8
commit 24ffb5feb3
3 changed files with 43 additions and 4 deletions
+6 -2
View File
@@ -211,7 +211,9 @@ FindKey:
}
md.decrypted = decrypted
packets.Push(decrypted)
if err := packets.Push(decrypted); err != nil {
return nil, err
}
return readSignedMessage(packets, md, keyring)
}
@@ -235,7 +237,9 @@ FindLiteralData:
}
switch p := p.(type) {
case *packet.Compressed:
packets.Push(p.Body)
if err := packets.Push(p.Body); err != nil {
return nil, err
}
case *packet.OnePassSignature:
if !p.IsLast {
return nil, errors.UnsupportedError("nested signatures")