Negative Impacts of VML Vulnerability Workaround
There have been few reports of negative impacts of the two VML workaround scripts I have posted. However, two issues have come up that may be worth pointing out:
- Some OEMs apparently ship hard drives with non-standard permissions (ACLs) in various places. I have reports of an unspecified image where the %CommonProgramFiles%\Microsoft Shared\VGX directory has an ACL that has only Everyone:Full Control in it. In the script in the most recent post (http://msinfluentials.com/blogs/jesper/archive/2006/09/22/More-options-on-protecting-against-the-VML-vulnerability-on-a-domain.aspx) I undo the Everyone Deny ACE by removing all permissions from Everyone. On these OEM systems, that means the vgx.dll file now has no permissions at all, and everyone is denied access to the file. To fix that problem, you need to replace the permissions on the directory with the proper permissions. Those are, in SDDL form:
O:BAG:SYD:ARAI(A;;0x1200a9;;;BU)(A;OICIIO;GXGR;;;BU)(A;;0x1301bf;;;PU)(A;OICIIO;SDGXGWGR;;;PU)(A;;FA;;;BA)(A;OICIIO;GA;;;BA)(A;;FA;;;SY)(A;OICIIO;GA;;;SY)(A;OICIIO;GA;;;CO).
These permissions are normally inherited from %ProgramFiles%. The only command line way I can find to propagate inherited permissions is to create a security template that specifies and ACL that has only "D:AI" in it and then apply that with secedit. The enableVML.inf template posted in the first post I wrote (http://msinfluentials.com/blogs/jesper/archive/2006/09/19/Block-VML-Zero_2D00_Day-Vuln-on-a-domain.aspx) does exactly that. To apply it with a script, call:
secedit /configure /db foo.sdb /cfg enableVML.inf /log foo.log /quiet
This will configure the system silently with that template, which restores the original inherited permissions on the vgx.dll file.
- If you put a deny Access Control List Entry (ACE) for Everyone on vgx.dll you will have odd formatting problems with SharePoint. The site simply will not look right. It is unclear why this happens, but the problem only happens if the DLL is registered and it has a deny ACE on it. If the DLL is unregistered, as the startup script does, the problem goes away. In other words, if you use the startup script, this problem goes away.
If you have seen any more problems with any of the work-arounds, I'm sure everyone would love to hear about them and how you solve them.