]> Cypherpunks repositories - gostls13.git/commit
[release-branch.go1.10-security] crypto/x509: limit number of signature checks for...
authorFilippo Valsorda <filippo@golang.org>
Wed, 5 Dec 2018 03:23:22 +0000 (22:23 -0500)
committerFilippo Valsorda <valsorda@google.com>
Fri, 7 Dec 2018 00:38:02 +0000 (00:38 +0000)
commit0a4a37f1f0a36e55d8ae5c34210a79499f9f2a9d
treef94faf3ddfbb38c797ecfaf9835b07a82fdabd12
parent1ae739797ec72acbd6d90b94a2366a31566205c2
[release-branch.go1.10-security] crypto/x509: limit number of signature checks for each verification

That number grows quadratically with the number of intermediate
certificates in certain pathological cases (for example if they all have
the same Subject) leading to a CPU DoS. Set a fixed budget that should
fit all real world chains, given we only look at intermediates provided
by the peer.

The algorithm can be improved, but that's left for follow-up CLs:

    * the cache logic should be reviewed for correctness, as it seems to
      override the entire chain with the cached one
    * the equality check should compare Subject and public key, not the
      whole certificate
    * certificates with the right SKID but the wrong Subject should not
      be considered, and in particular should not take priority over
      certificates with the right Subject

Change-Id: Ib257c12cd5563df7723f9c81231d82b882854213
Reviewed-on: https://team-review.git.corp.google.com/c/370475
Reviewed-by: Andrew Bonventre <andybons@google.com>
(cherry picked from commit 09d57361bc99cbbfb9755ee30ddcb42ff5a9d7d6)
Reviewed-on: https://team-review.git.corp.google.com/c/372923
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
src/crypto/x509/cert_pool.go
src/crypto/x509/verify.go
src/crypto/x509/verify_test.go