roger's picture

Odd behaviour with WCF base addresses and HTTP.SYS wildcards

I'm at DevWeek this week, and I went (among other things) to a couple of WCF presentations by Aaron Skonnard.

So, anyway, last night I put together a really simple WCF service. It looks like this:

using System;
using System.ServiceModel;

namespace WcfHost
{
    [ServiceContract]
    internal interface IHello
    {
        [OperationContract]
        string SayHello();
    }

    internal class HelloService : IHello
    {
        public string SayHello()
        {
            return "Hello";
        }
    }

    class Program
    {
        static void Main()
        {
            ServiceHost host = new ServiceHost(typeof(HelloService), new Uri("http://+:8010/"));
            host.AddServiceEndpoint(typeof(IHello), new BasicHttpBinding(), "Hello");
            host.Open();
            Console.WriteLine("Ready. Press Enter to quit.");
            Console.ReadLine();
            host.Close();
        }
    }
}

Note how I'm using the HTTP.SYS wildcard syntax for the URI. Unfortunately, WCF doesn't like that, and I get a UriFormatException: Invalid URI: The hostname could not be parsed.

So I change it to http://localhost:8080/, and instead I get another exception: HTTP could not register URL http://+:8080/. Your process does not have access rights to this namespace (see http://go.microsoft.com/fwlink/?LinkId=70353 for details).

It's not lying: I don't have access rights to the HTTP namespace (I run Windows Vista with UAC turned off, under a normal user account). Most things work fine. Occasionally I have to step out to the Administrator account for some stuff. In this case, that would be a netsh http add urlacl url=http://+:8080/ user=HOME\roger.

That's not what's bothering me.

What's bothering me is that WCF appears to have quietly translated my localhost to +, meaning that even though I've asked only to bind to 127.0.0.1, I've actually bound to all available addresses.

Surely this increases the attack surface for my WCF host? Or am I missing something?

Reply

The content of this field is kept private and will not be shown publicly.
  • Allowed HTML tags: <a> <b> <br> <code> <dd> <dl> <dt> <hr> <h1> <h2> <h3> <i> <img> <li> <ol> <p> <pre> <table> <td> <th> <tr> <tt> <u> <ul>
  • Images can be added to this post.

More information about formatting options