Bug 288201 (CVE-2007-4570) - CVE-2007-4570 mctransd DoS
Summary: CVE-2007-4570 mctransd DoS
Keywords:
Status: CLOSED ERRATA
Alias: CVE-2007-4570
Product: Security Response
Classification: Other
Component: vulnerability
Version: unspecified
Hardware: All
OS: Linux
low
low
Target Milestone: ---
Assignee: Red Hat Product Security
QA Contact:
URL:
Whiteboard:
Depends On: 288941
Blocks:
TreeView+ depends on / blocked
 
Reported: 2007-09-12 18:47 UTC by Mark J. Cox
Modified: 2019-09-29 12:21 UTC (History)
4 users (show)

Fixed In Version:
Clone Of:
Environment:
Last Closed: 2011-09-28 22:35:18 UTC
Embargoed:


Attachments (Terms of Use)
patch attempting to fix problem (756 bytes, patch)
2007-09-12 20:13 UTC, Steve Grubb
no flags Details | Diff


Links
System ID Private Priority Status Summary Last Updated
Red Hat Product Errata RHSA-2007:0542 0 normal SHIPPED_LIVE Low: mcstrans security and bug fix update 2007-11-07 16:39:58 UTC

Description Mark J. Cox 2007-09-12 18:47:19 UTC
Reported via secalert:

        There is an algorithmic complexity weakness in the way the MCS
translation daemon handles ranges of compartments in sensitivity labels.
When translating a security context that includes a range of categories
separated by a period, e.g. "c0.c10", the daemon calls the
substitute_range() function to replace the range with an explicit
declaration of each category, e.g. "c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,10".
The vulnerable logic in this function is shown below (with some lines
wrapped for readability):

        while (tok) {
                if ((r=strchr(tok, '.')) !=0) {
                        int begin=atoi(&tok[1]);
                        ++r;
                        int end=atoi(&r[1]);
                        for (;begin<end+1;begin++) {
                                tmp=sub;
                                if (asprintf(&sub, "%sc%d,", sub, begin) 
                            < 0) {
                                        error=1;
                                        break;
                                }
                                free(tmp);
                        }
                } else {
                        tmp=sub;
                        if (asprintf(&sub, "%s%s,", sub, tok) < 0) {
                                error=1;
                                break;
                        }
                        free(tmp);
                }
                tok=strtok_r(NULL, ",", &ptr);
        }

The attacker supplies the input string for this function, and the values
of 'begin' and 'end' are not checked. Consequently, by supplying an
abnormally long range, an attacker can cause the program to remain in
the above loop for an extremely long period of time. Since mcstransd is
a single-threaded, single-process daemon, it supports only one
concurrent request.

        This weakness allows a local attacker to trivially prevent the daemon
from responding to requests for an extended period of time (hours or
days). When the mcstrans service is enabled, the system calls upon
mcstransd for user logins and the execution of many programs. If
mcstransd does not respond, those operations silently hang.

Comment 1 Steve Grubb 2007-09-12 20:13:16 UTC
Created attachment 193951 [details]
patch attempting to fix problem

This is a proposed patch to sanity check the values before using them.

Comment 7 Mark J. Cox 2007-11-07 14:16:13 UTC
removing embargo

Comment 8 Kurt Seifried 2011-09-28 22:35:18 UTC
This issue has been addressed in following products:

  Red Hat Linux Enterprise 5

Via RHSA-2007:0542 available at https://rhn.redhat.com/errata/RHSA-2007-0542.html


Note You need to log in before you can comment on or make changes to this bug.