A new security bug has been discovered on Windows 8 and above which makes ASLR useless. The bug was discovered by a security researcher named Will Dormann. He explained the issue in a detailed post on CERT:
Both EMET and Windows Defender Exploit Guard enable system-wide ASLR without also enabling system-wide bottom-up ASLR. Although Windows Defender Exploit guard does have a system-wide option for system-wide bottom-up-ASLR, the default GUI value of “On by default” does not reflect the underlying registry value (unset). This causes programs without /DYNAMICBASE to get relocated, but without any entropy. The result of this is that such programs will be relocated, but to the same address every time across reboots and even across different systems.
For those who don’t know, Microsoft first implemented ASLR (Address Space Layout Randomization) in Windows Vista that helps prevent code-reuse attacks. ASLR uses a random memory address to execute code, but in Windows 8, Windows 8.1 and Windows 10 the feature is not always applied properly. In Windows 8, 8.1 and Windows 10, ASLR is not using random memory addresses, essentially rendering it useless.
Actually, with Windows 7 and EMET System-wide ASLR, the loaded address for eqnedt32.exe is different on every reboot. But with Windows 10 with either EMET or WDEG, the base for eqnedt32.exe is 0x10000 EVERY TIME.
Conclusion: Win10 cannot be enforce ASLR as well as Win7! pic.twitter.com/Jp10nqk1NQ
— Will Dormann (@wdormann) November 15, 2017
The good thing though is, Will shared a manual Registry Edit to fix the issue. For this, you need to do the following.
- Create a text file with the following:Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\kernel]
- Save the file with Registry extension (.reg)
- Open Registry Editor by typing “regedit” in the Start Menu
- Select File>Import and choose the .reg file you just created.
This should be able to fix the issue until Microsoft sends an update to fix it completely.