[OpenID] Abusing Authentication Failure messages
Andrew Arnott
andrewarnott at gmail.com
Sat Aug 21 21:33:22 UTC 2010
I don't know why you see this as a security flaw in the protocol. Your
email started out as "hey, I wish a request and associated response could be
tied together in my log files" so it seemed like just an inconvenience to
you, and now you're talking about a security flaw. It sounds like you have
multiple topics in your email now. So now that we've helped you totally
address your "inconvenience" grievance (and you're welcome...?) let's move
on to your security concerns (the ones that I can find in your original
email...
Maarten said:
> In the case of a failure response, however, there is a significant lack of
> useful information passed from the OP to the RP. This lack of useful
> information makes it impossible for the RP to verify that the response did
> originate from the OP.
If it's a failure response, you're absolutely right. Anyone can forge a
failure response. What would the RP do differently if it knew for sure
whether the failure came from the OP or not? If it makes any difference to
your RP, I'm sure we'd be interested to know what that difference would be.
> Unfortunately for the RP, (and conveniently for an attacker), the response
> is sent via indirect communication (via the User Agent); so the RP has no
> clue whatsoever where the response came from or who crafted it. There is no
> association handle, no signature, no nonce, no nothing.
Again, for a failure response, that's true -- unless you utilize the
return_to parameter as we've described in prior emails. But what's the
problem with this? Unless you have very stringent security requirements
that I can't think of at the moment, since a failure response gets the user
no security elevation from the RP, why would an attack do this? He would
gain anything, or cause the site itself to suffer and failure responses are
very cheap to process.
>
> Does that mean that to sabotage an OpenID site's authentication process,
> all I have to do is craft a website which, when opened by the user in a
> separate tab, continuously makes requests to the RP providing authentication
> failure responses?
No, I don't think so. That wouldn't sabatoge the site's authentication
process at all. Merely sending failure messages to the RP is only going to
send the attacker a failed auth message from the RP in HTML as if they were
a user. That won't hurt the RP aside from minimal CPU time. Legitimate
users at that RP will be totally unaffected. Unless you hit the site so
hard that it becomes a DoS attack, in which case OpenID isn't offering a new
vulnerability at all, because as I said failure responses are cheap for the
RP to process -- about as cheap as any other cheap server-side scripted
page.
OpenID advocates and authors take security seriously, and they mean to
improve it in future versions. To say all security features are optional is
a very poor statement to make, as an authentication protocol with no
required security features is ludicrous. I'll stop before ranting about
that further... But perhaps you can ask additional questions (if you have
any that this email doesn't answer) in a more "help me understand" attitude?
--
Andrew Arnott
"I [may] not agree with what you have to say, but I'll defend to the death
your right to say it." - S. G. Tallentyre
On Sat, Aug 21, 2010 at 2:05 PM, Maarten Billemont <lhunath at gmail.com>wrote:
>
> On 20 Aug 2010, at 16:17, Andrew Arnott wrote:
>
> I don't consider this a flaw at all. In fact you can solve it yourself
> today, in total compliance with the OpenID spec.
>
> Use the return_to parameter to add whatever unique ID you wish was there.
> Then in your logs, you'll see the ID on the outgoing request (if you log
> it) and on the response (via the incoming HTTP indirect message).
>
> Problem solved, right? It's totally up to the RP (you) to leverage this
> hidden "feature" of ways to use return_to.
>
>
> Might I ask what the wisdom behind this is?
>
> I have the feeling OpenID is all about a way of authenticating users and
> exchanging identity information but utter minimal requirements to do that in
> a secure fashion. All features that are there to protect against known and
> proven attack vectors are optional. And as indicated by this thread, some
> attack vectors aren't even dealt with by the protocol: one would need to do
> silly undocumented stuff to existing parameters or add extensions to the
> protocol. You could say, the OpenID protocol is the exact opposite of
> "Secure By Default". And designing a protocol that way only encourages lazy
> implementations that have no regard for user privacy concerns.
>
> Do the OpenID designers hold security in a low regard or does security come
> second to "ease of implementation" (frankly, a secure protocol is just as
> easily adopted given good reference implementations). Perhaps I'm not
> seeing all the reasons why OpenID was designed the way it was - can anyone
> shed some light?
>
>
> In particular, DotNetOpenAuth utilizes return_to when its optional feature
> is activated that disables "unsolicited assertions", which guarantees that
> each authentication response starts with an authentication request that
> originated at the RP. We had a signed nonce from the RP to the return_to,
> and verify it when it comes back. Again, this is only if you wanted to
> disable unsolicited assertions deliberately for some reason.
>
> --
> Andrew Arnott
> "I [may] not agree with what you have to say, but I'll defend to the death
> your right to say it." - S. G. Tallentyre
>
>
> On Fri, Aug 20, 2010 at 2:12 AM, Maarten Billemont <lhunath at gmail.com>
> wrote:
>
>> It has always bothered me that the OpenID protocol does not assign a
>> unique ID to requests that is required to be repeated in the request's
>> response. This makes it annoying to cleanly identify whether a response
>> matches a particular request; instead relying on chronology (response Y
>> comes after request X? It must be a response to X!).
>>
>> This is an annoyance, yet, in the case of successful authentication
>> responses, not a disaster: The response can be signed and verified.
>>
>> In the case of a failure response, however, there is a significant lack of
>> useful information passed from the OP to the RP. This lack of useful
>> information makes it impossible for the RP to verify that the response did
>> originate from the OP. Unfortunately for the RP, (and conveniently for an
>> attacker), the response is sent via indirect communication (via the User
>> Agent); so the RP has no clue whatsoever where the response came from or who
>> crafted it. There is no association handle, no signature, no nonce, no
>> nothing.
>>
>> Does that mean that to sabotage an OpenID site's authentication process,
>> all I have to do is craft a website which, when opened by the user in a
>> separate tab, continuously makes requests to the RP providing authentication
>> failure responses?
>>
>> Am I missing something here, or is the OpenID protocol really so flawed?
>> And if it is, can I expect anyone to fix the protocol any time soon?
>>
>> _______________________________________________
>> general mailing list
>> general at lists.openid.net
>> http://lists.openid.net/mailman/listinfo/openid-general
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openid.net/pipermail/openid-general/attachments/20100821/a679fa13/attachment.html>
More information about the general
mailing list