OpenID to LID Proxy

Martin Atkins mart at degeneration.co.uk
Thu May 26 10:35:36 PDT 2005


I've created an OpenID to LID proxy which lets anyone with a LID server 
running log into an OpenID site -- in theory, at least.

In order to use it, the user must list his OpenID identity server URL as:
http://goathack.livejournal.org:9016/lidoid
...with a transformation of the LID URL concatenated on the end.

For example, the LID demo user would be:
<http://goathack.livejournal.org:9016/lidoid/lid.netmesh.org/liddemouser/>
or, for an SSL site:
<http://goathack.livejournal.org:9016/lidoid/s/lid.netmesh.org/liddemouser/>

The way I've been testing it is to put an HTML document at some dumb URL 
referencing that URL and logging in as the demo user. The details are here:
     <http:/lid.netmesh.org/liddemouser/>

Remember that since the demo user's details are well known, you're 
essentially giving whatever URL you use to everyone.

Of course, you don't trust my proxy as it might lie about you or even 
exploit LID's XSS holes to steal your current LID session. In practice 
you would run it yourself on your own server:
    <http://goathack.livejournal.org:9016/lidoid.txt>

AJAX logins don't work. I'm not sure what I'm doing wrong, so if someone 
could let me know I'd appreciate it. I'm obviously not understanding the 
mechanics of the AJAX logins.

--------------

However, the most important part of this message follows:
* WARNING! * WARNING! * WARNING! * WARNING! * WARNING! *

I think there's a glaring security hole in this thing right now, but I'm 
having trouble getting my head around it to figure out if it's there or 
not. I'd appreciate a second opinion.

If I control a LID server I can respond with any OpenID Identity I want. 
If I return one that doesn't reference the OpenID proxy then key 
verification will fail as you'd expect. However, if some other person 
has an identity which references the same proxy with a *different* LID 
URL then I can impersonate him because there is nothing specific to the 
ID server URL in the signature, and the proxy always uses the same key.

Obviously the proxy should really be maintaining some kind of state 
rather than just trusting what the LID server says, but maybe I'm 
missing something which means that this isn't such a big deal after all?

I plan to shortly implement proper request tickets anyway, so this isn't 
a major deal. However, if I'm right and this is a problem please don't 
use this proxy on any URL you wouldn't want compromised!



More information about the yadis mailing list