Fix out-of-bound memory read in `tor_tls_cert_matches_key()` for NSS.
commitb46984e97ec4064ac8178ea9b3bf6985a4f2f632
authorAlexander Færøy <ahf@torproject.org>
Tue, 31 Mar 2020 02:33:54 +0000 (31 02:33 +0000)
committerNick Mathewson <nickm@torproject.org>
Mon, 6 Jul 2020 20:19:16 +0000 (6 16:19 -0400)
tree3da4540f64d22f07bbc350832b54531618e3b3a8
parent33e1c2e6fd614f8cb42a6d5758d411d3f8d5411c
Fix out-of-bound memory read in `tor_tls_cert_matches_key()` for NSS.

This patch fixes an out-of-bound memory read in
`tor_tls_cert_matches_key()` when Tor is compiled to use Mozilla's NSS
instead of OpenSSL.

The NSS library stores some length fields in bits instead of bytes, but
the comparison function found in `SECITEM_ItemsAreEqual()` needs the
length to be encoded in bytes. This means that for a 140-byte,
DER-encoded, SubjectPublicKeyInfo struct (with a 1024-bit RSA public key
in it), we would ask `SECITEM_ItemsAreEqual()` to compare the first 1120
bytes instead of 140 (140bytes * 8bits = 1120bits).

This patch fixes the issue by converting from bits to bytes before
calling `SECITEM_ItemsAreEqual()` and convert the `len`-fields back to
bits before we leave the function.

This patch is part of the fix for TROVE-2020-001.

See: https://bugs.torproject.org/33119
changes/bug33119 [new file with mode: 0644]
src/lib/tls/tortls_nss.c