libceph: add authorizer challenge
authorIlya Dryomov <idryomov@gmail.com>
Fri, 27 Jul 2018 17:18:34 +0000 (19:18 +0200)
committerIlya Dryomov <idryomov@gmail.com>
Thu, 2 Aug 2018 19:33:24 +0000 (21:33 +0200)
commit6daca13d2e72bedaaacfc08f873114c9307d5aea
tree97278ec273414431dd2fab13ccbc3a5d98140cec
parent149cac4a50b0b4081b38b2f38de6ef71c27eaa85
libceph: add authorizer challenge

When a client authenticates with a service, an authorizer is sent with
a nonce to the service (ceph_x_authorize_[ab]) and the service responds
with a mutation of that nonce (ceph_x_authorize_reply).  This lets the
client verify the service is who it says it is but it doesn't protect
against a replay: someone can trivially capture the exchange and reuse
the same authorizer to authenticate themselves.

Allow the service to reject an initial authorizer with a random
challenge (ceph_x_authorize_challenge).  The client then has to respond
with an updated authorizer proving they are able to decrypt the
service's challenge and that the new authorizer was produced for this
specific connection instance.

The accepting side requires this challenge and response unconditionally
if the client side advertises they have CEPHX_V2 feature bit.

This addresses CVE-2018-1128.

Link: http://tracker.ceph.com/issues/24836
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Reviewed-by: Sage Weil <sage@redhat.com>
fs/ceph/mds_client.c
include/linux/ceph/auth.h
include/linux/ceph/messenger.h
include/linux/ceph/msgr.h
net/ceph/auth.c
net/ceph/auth_x.c
net/ceph/auth_x_protocol.h
net/ceph/messenger.c
net/ceph/osd_client.c