Yes, this is exactly one of the core issues with UAC that caused so much controversy when it was initially presented. UAC was so fundamentally flawed from a security perspective that Microsoft could not call it a security feature. The fatal flaws are 1) the reason you presented above where the process the user elevates gets everything, (an elevated tetris game can install kernel drivers), and 2) lower IL processes can modify higher IL processes e.g. “hooking” by design.
This is false. Consider the following:
For instance, having your elevated AAM processes run in the same account as your other processes gives you the convenience of allowing your elevated processes access to your account’s code and data, but at the same time allows your non-elevated processes to modify that same code and data to potentially cause an elevated process to load arbitrary code.
Because elevations and ILs don’t define a security boundary, potential avenues of attack , regardless of ease or scope, are not security bugs.
-src: Mark Russinovich on PsExec, User Account Control and Security Boundaries 12 Feb 2007 https://web.archive.org/web/20100610231407/http://blogs.technet.com/b/markrussinovich/archive/2007/02/12/638372.aspx
Instead of being presented as a security feature, it was presented as a convenient method to consider alternative system configurations.
The bottom line is that elevations were introduced as a convenience that encourages users who want to access administrative rights to run with standard user rights by default.
-Mark Russinovich on Inside Windows Vista User Account Control
Look, if you still think UAC was designed and implemented as a security feature after reading one Microsoft’s contemporary engineers literally say that it wasn’t designed/implemented to be a security feature, then I do not know what to say. UAC is convenience, not a mechanism that provides OS security. Those fatal to system security design decisions are not “bugs” in UAC, they are inherent to how it was meant to work.
So that “secure” desktop which has been mentioned is supposed to prevent processes from getting your password directly via sniffing and then using it to elevate themselves to bypass UAC? There is no need to, just hook an elevated process:
[A] process with a low IL could create a shared memory object (called a section or memory-mapped file) that it knows a higher IL process will open, and store data in the memory that causes the elevated process to execute arbitrary code if the elevated process doesn’t properly validate the data.
So if you aren’t guaranteed that your elevated processes aren’t susceptible to compromise by those running at a lower IL, why did Windows Vista go to the trouble of introducing elevations and ILs?
-Mark Russinovich on PsExec, User Account Control and Security Boundaries
To get us to a world where everyone runs as standard user by default and all software is written with that assumption.
Without the convenience of elevations most of us would continue to run the way we have on previous versions of Windows: with administrative rights all the time.
-Mark Russinovich on Inside Windows Vista User Account Control
The “whole point” of UAC is to get application developers to write their software in a way compatible with standard user rights if they do not need admin rights. Using elevations to cross security boundaries, is fundamentally the same as the “run as” feature present in Win XP, but more convenient than letting processes crash and restarting them with “run as”. That is all UAC can at most ever amount to: continence if enabled while in a standard user account in a context where a user adequately understands the OS security model, and the ramifications of elevating software. Want to guess how many Windows users fall into that category? Do you actually think UAC is useful for users outside of that narrow category?
Because lower integrity level processes can hook higher ones, running UAC inside an admin account (admin approval mode AAM), is pointless as well.
Microsoft designed UAC to get in your way as a user to send a message to application developers. It does not, nor has it ever been intended to help users, but limit them.
However what users care about is DATA integrity, not OS security, so even in the base case outlined above, UAC cannot protect what users really care about. It just gets in the way with no substantive benefit that can withstand critical scrutiny.
My recommendation is to disable it, and implement a real security boundary like Sandboxie or VMs if you care about OS security. Then you do not have to deal with the problems that UAC creates and you have real security boundaries between the stuff that matters (your data) and the stuff that does not (the OS).