tech-security archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Updated NetBSD Security Advisory 2012-003: Intel processors sysret to non-canonical address behaviour
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
NetBSD Security Advisory 2012-003
=================================
Topic: Intel processors sysret to non-canonical address behaviour
Version: NetBSD-current: source prior to June 11, 2012
NetBSD 6.0 Beta: affected
NetBSD 5.1.*: affected
NetBSD 5.1: affected
NetBSD 5.0.*: affected
NetBSD 5.0: affected
NetBSD 4.0.*: affected
NetBSD 4.0: affected
Severity: local DoS, local user privilege escalation
Fixed: NetBSD-current: June 12th, 2012
NetBSD-6 branch: June 12th, 2012
NetBSD-5 branch: June 12th, 2012
NetBSD-5-1 branch: June 12th, 2012
NetBSD-5-0 branch: June 12th, 2012
NetBSD-4 branch: June 12th, 2012
NetBSD-4-0 branch: June 12th, 2012
Please note that NetBSD releases prior to 4.0 are no longer supported.
It is recommended that all users upgrade to a supported release.
Abstract
========
On Intel CPUs, the sysret instruction can be manipulated into returning
to specific non-canonical addresses, which may yield a CPU reset.
It has been shown by the VUPEN team that this vulnerability can also be
used to execute code with kernel privilege instead of crashing the system.
This vulnerability has been assigned CVE-2012-0217.
Technical Details
=================
This is a vulnerability following from a difference of behaviour of
sysret in Intel's version of the amd64 architecture, em64t.
System calls may be implemented as using the em64t syscall/sysret
instruction pair.
syscall saves the context of the calling unprivileged process before
executing a system call in kernel mode; sysret restores it and resumes
ordinary operations in user mode.
In the Intel implementation of sysret, if you have invalid information
about the "next instruction" address in your saved context, the sysret
instruction will trigger a trap in kernel space. However the sysret
instruction is executed with the user stack pointer already loaded,
so the kernel fault frame is written to the user stack.
The kernel is unable to safely recover from this, so must ensure
that the trap doesn't happen.
If your invalid "next instruction" address is in kernel space or
in user space (and in the latter case, not where your program is)
the program will segfault or execute attacker controlled code.
If it is in the gap between user space and kernel space, the CPU
will reset, except if someone managed to seed the address location
with a valid instruction.
Solutions and Workarounds
=========================
The fix in the following versions will disallow sysret to
an invalid address.
src/sys/arch/amd64/amd64/machdep.c
HEAD 1.184
netbsd-6 1.175.2.6
netbsd-5 1.102.4.14
netbsd-5-1 1.102.4.13.2.1
netbsd-5-0 1.102.4.10.2.2
netbsd-4 1.44.2.7
netbsd-4-0 1.44.2.3.6.1
src/sys/arch/amd64/amd64/netbsd32_machdep.c
HEAD 1.77
netbsd-6 1.74.10.2
netbsd-5 1.55.4.4
netbsd-5-1 1.55.4.3.2.1
netbsd-5-0 1.55.6.3
netbsd-4 1.30.2.4
netbsd-4-0 1.30.2.1.6.1
Thanks To
=========
Thanks to Manuel Bouyer for providing the fix, and David Laight for
help with writing the advisory. Also, thanks to Rafal Wojtczuk for
bringing the issue to our attention.
Additional thanks to the VUPEN team for showing how to exploit this
vulnerability to execute code under NetBSD and to Sofian Brabez for
pointing it out.
Revision History
================
2012-06-14 Initial release
2012-07-06 Updated severity after an exploit could be produced
More Information
================
Advisories may be updated as new information becomes available.
The most recent version of this advisory (PGP signed) can be found at
http://ftp.NetBSD.org/pub/NetBSD/security/advisories/NetBSD-SA2012-003.txt.asc
Information about NetBSD and NetBSD security can be found at
http://www.NetBSD.org/ and http://www.NetBSD.org/Security/ .
Copyright 2012, The NetBSD Foundation, Inc. All Rights Reserved.
Redistribution permitted only in full, unmodified form.
$NetBSD $
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)
iQIcBAEBAgAGBQJP9jJeAAoJEAZJc6xMSnBuPPAP/3bH6d1rpBi35FyN+apev4G2
j+eEtFIaSEHk2dpGXE5shsT04E8++YkYZxx2FYW6Ic5WRZj4msIpAKcyqYUnwex3
Z0F2eZql8YkULoHmqTgLHRvC5ukgDExAeBxnJJyqLuMTadEaZpR81kVEHo3gj77b
g/b1f04yk98AkJcb0uLE5WE22x8DGL5mdjwE+QqHoi8oQjOYEM3rJzlmZfP/I8Wt
Dl9THtJ2VixNTMgSYMxJXVjpNUaYDRHGsNK0mCX3gkmQrLC31CKqd760V28V8a8L
4m1IydbDRbnkSUPWk9fMVPW7zhN5Ayss8BL385wgZbjJxJ5cVg7HnFnwSYzKEAfr
kt2tuxVBusPF30H+dpHk1I2vCuXuqL+rUI1+E7MLdRZBPN5Ie1edEw2GQMQbTlIF
DFa6bF5GDq7RQ+xprYeVp6vOyp3fDRj8jpO8vDrkcXAVeMzuIhcmWO91OvU3nWjn
YQrK8gqszLIt5hWS63uUM49Fhz4tUY7QGJgMhPfMmQDWSyxpcs9N5jJDEwnQ9vET
Zk4KediM8FUh+KvIYv9t1yREzX+EMOyv7G5jgtcQYqKXjuaAw78PJH7amZKlljfc
P6VlQQJpEBya2qzrNNRYYK5q9nBy6xf3fNKvJ467tHX0Bl8YFLCj8sCHAdObkz9f
lFcsTnrBhj1/S7UvliOz
=6elS
-----END PGP SIGNATURE-----
Home |
Main Index |
Thread Index |
Old Index