Bug 946204 (CVE-2015-7236) - VUL-0: CVE-2015-7236: rpcbind: aborts on remote scan
Summary: VUL-0: CVE-2015-7236: rpcbind: aborts on remote scan
Status: RESOLVED FIXED
Alias: CVE-2015-7236
Product: SUSE Security Incidents
Classification: Novell Products
Component: Incidents (show other bugs)
Version: unspecified
Hardware: Other Other
: P3 - Medium : Major
Target Milestone: ---
Assignee: Olaf Kirch
QA Contact: Security Team bot
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-09-17 12:22 UTC by Marcus Meissner
Modified: 2016-04-27 19:21 UTC (History)
12 users (show)

See Also:
Found By: ---
Services Priority:
Business Priority:
Blocker: ---
Marketing QA Status: ---
IT Deployment: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Marcus Meissner 2015-09-17 12:22:03 UTC
http://www.spinics.net/lists/linux-nfs/msg53045.html

We have seen occasional reports of a commercial security scanner 
triggering crashes in rpcbind, but these were fairly elusive.

Now we finally got a usable core file showing that rpcbind crashed in 
svc_dodestroy when trying to free a corrupted xprt->xp_netid pointer. 
Closer inspection suggested that the pointer variable actually 
contained a sockaddr_in.

Here's how I think the memory corruption happens:

 - A PMAP_CALLIT call comes in on IPv4 UDP

 - rpcbind duplicates the caller's address to a netbuf and stores
	it in FINFO[0].caller_addr. caller_addr->buf now points to a
    memory region A with a size of 16 bytes

 - rpcbind forwards the call to the local service, receives a reply

 - when processing the reply, it does this in xprt_set_caller:
     xprt->xp_rtaddr = *FINFO[0].caller_addr
   where xprt is the UDP transport on which it received the
   PMAP_CALLIT request.

   It sends out the reply, and then frees the netbuf caller_addr and
   caller_addr.buf.
   However, it does not clear xp_rtaddr, so xp_rtaddr.buf now refers
   to memory region A, which is free.

 - When the next call comes in on the UDP/IPv4 socket, svc_dg_recv
   will be called, which will set xp_rtaddr to the client's address.
   It will reuse the buffer inside xp_rtaddr, ie it will write a
   sockaddr_in to region A.

So, this explains how memory gets corrupted. Here's why that 
eventually lead to a crash in svc_dodestroy.

Some time down the road, an incoming TCP connection is accepted,
allocating a fresh SVCXPRT. The memory region A is inside the
new SVCXPRT

 - While processing the TCP call, another UDP call comes in, again
   overwriting region A with the client's address

 - TCP client closes connection. In svc_destroy, we now trip over
   the garbage left in region A

The fix seems to be to make xprt_set_caller copy the caller's address 
to xprt->xp_rtaddr using __rpc_set_netbuf rather than just overwrite 
the netbuf.

Signed-off-by: Olaf Kirch <okir@xxxxxxx>
Comment 1 Swamp Workflow Management 2015-09-17 22:00:15 UTC
bugbot adjusting priority
Comment 4 Swamp Workflow Management 2015-10-09 09:10:24 UTC
SUSE-SU-2015:1705-1: An update that solves one vulnerability and has one errata is now available.

Category: security (moderate)
Bug References: 940191,946204
CVE References: CVE-2015-7236
Sources used:
SUSE Linux Enterprise Server 12 (src):    rpcbind-0.2.1_rc4-13.3.1
Comment 5 Swamp Workflow Management 2015-10-09 09:11:13 UTC
SUSE-SU-2015:1706-1: An update that solves one vulnerability and has one errata is now available.

Category: security (moderate)
Bug References: 940191,946204
CVE References: CVE-2015-7236
Sources used:
SUSE Linux Enterprise Server for VMWare 11-SP3 (src):    rpcbind-0.1.6+git20080930-6.24.1
SUSE Linux Enterprise Server 11-SP4 (src):    rpcbind-0.1.6+git20080930-6.24.1
SUSE Linux Enterprise Server 11-SP3 (src):    rpcbind-0.1.6+git20080930-6.24.1
SUSE Linux Enterprise Desktop 11-SP4 (src):    rpcbind-0.1.6+git20080930-6.24.1
SUSE Linux Enterprise Desktop 11-SP3 (src):    rpcbind-0.1.6+git20080930-6.24.1
SUSE Linux Enterprise Debuginfo 11-SP4 (src):    rpcbind-0.1.6+git20080930-6.24.1
SUSE Linux Enterprise Debuginfo 11-SP3 (src):    rpcbind-0.1.6+git20080930-6.24.1
Comment 6 Swamp Workflow Management 2015-10-09 10:10:09 UTC
SUSE-SU-2015:1705-2: An update that solves one vulnerability and has one errata is now available.

Category: security (moderate)
Bug References: 940191,946204
CVE References: CVE-2015-7236
Sources used:
SUSE Linux Enterprise Desktop 12 (src):    rpcbind-0.2.1_rc4-13.3.1
Comment 7 Swamp Workflow Management 2015-10-09 10:10:42 UTC
SUSE-SU-2015:1706-2: An update that solves one vulnerability and has one errata is now available.

Category: security (moderate)
Bug References: 940191,946204
CVE References: CVE-2015-7236
Sources used:
SUSE Linux Enterprise Server for VMWare 11-SP3 (src):    rpcbind-0.1.6+git20080930-6.24.1
SUSE Linux Enterprise Server 11-SP4 (src):    rpcbind-0.1.6+git20080930-6.24.1
Comment 8 Marcus Meissner 2015-12-07 11:45:54 UTC
rekleased