If you want to open a listen URI with HTTP.SYS you either need administrative privileges or an administrator that reserves the URI for normal users. I wrote about this here and here – and even wrote a tool to make that step easier (and given the download numbers, this seems to be helpful for a lot of people).
The whole reason for ACLs on listen URIs is that malware can’t easily open a new listening port – or even trickier – hide behind an already opened port (at least that was my understanding).
You can view all existing reservations on your machine using either the httpcfg.exe tool:
httpcfg.exe query urlacl
or netsh on Vista/LHS:
netsh http show urlacl
Now on a typical machine you will find quite a lot of reservations – and even worse some of them are not ACLed for specific accounts (like service or machine accounts), but generally for ‘users’ or even ‘everyone’.
One of those “wildcard” reservations is this one:
URL: http://+:80/Temporary_Listen_Addresses/
ACL: D:(A;;GX;;;WD)
This reservation comes with .NET 3.0/WCF to make duplex communication over HTTP easily possible (and the WD stands for ‘everyone’).
So if some malware wants to open a highly sophisticated listening port on your machine (e.g. using HttpListener, WCF or the C++ HTTP API) – they can just use one that Microsoft already opened for them….
Doesn’t this totally defeat the purpose???