[cap-talk] Confusing deputies with SAML assertions (was: Re: Confused Deputies in Capability Systems)
Jed Donnelley
capability at webstart.com
Tue Feb 10 03:21:54 EST 2009
At 02:51 PM 2/9/2009, Karp, Alan H wrote:
>David-Sarah Hopwood wrote:
> >
> > > Validating capabilities does make sense in other environments. Tyler
> > > pointed out a vulnerability in our Zebra Copy implementation. In that
> > > work, capabilities are SAML authorization assertions. Each service
> > > reference passed as an argument is represented by a SAML authorization
> > > assertion delegating to the service being invoked the right in the
> > > assertion. We neglected to verify that the invoker had the right being
> > > delegated, which allowed a confused deputy attack.
> >
> > This is not a confused deputy attack. It's a mistake in the implementation
> > of the capability system TCB. (It's also not a particularly subtle mistake,
> > since it directly violates an assertion of the system design.)
>
>The attack is possible even with a correctly implemented TCB. SAML
>certificates are assumed to be public documents.
So far I'm with you.
>Alice can include a copy of a delegation from Carol to Bob in a
>request Alice makes of Bob, and Bob may use Carol's permission on
>behalf of Alice. If Carol is the powerbox for the person running
>Bob, then we have a classic confused deputy. If not, it's a
>different form of confused deputy, but the result is that the
>attacker gains an authority. Bob can protect himself by making sure
>the submitter of the request has the rights being delegated.
I'm afraid I'm a bit lost in the above. When you say that Bob can
protect himself by making sure that the submitter of the request has
the rights being delegated, I thought 'that' (the fact that rights
received in a message were rights the sender had) was a property of
all capability communication systems. If Alice was somehow able to
include a 'delegation from Carol to Bob in a request Alice makes of
Bob', then didn't Alice have the authority represented by that
"delegation" before sending it to Bob? If not then it doesn't sound
to me like we're discussing a "capability" communication system.
My first impression is to agree with David-Sarah Hopwood. Perhaps I
need to learn more about SAML assertions as "capabilities". In what
sense are they capabilities if they violate this seemingly basic
tenant of capability communication?
Perhaps this is another terminology issue. What do we mean by a
"capability communication system"? As you can see in my Managing
Domains paper:
http://www.webstart.com/jed/papers/Managing-Domains/
I use the term "capability" to refer to a representation of object
access (access authority) that:
1. can be validated when used as authorization for a service request, and
2. can be communicated between any two processes that can communicate data.
What I mean(t) by "communicated" is that, as with data, if Alice
sends a capability in a message to Bob, then Bob knows that Alice had
the capability (the authority to make a service request on the
capability) before sending it to Bob and that Bob can make use of the
authority for service requests after the communication as Alice could
before the communication. Whether or not Bob had the authority
before the communication (just as with data), Bob does have the
authority after receiving the message and Bob knows that it came from
Alice (Alice had it to begin with).
Sorry for being somewhat repetitive in the above. I'm hoping that by
using slightly different terms in the definition of a "capability"
and the level at which the definition seems to me to apply then I'll
be able to communicate the concept/definition more clearly. These
semantics for capability communication seems pretty fundamental/basic to me.
In the above (Managing Domains) paper I describe a number of
implementations of capabilities, including two based on ACLs, one of
which meets the criteria above and one that fails to ("Reflection
Problem" - a variation on a Confused Deputy). For me the concept of
a "capability" is something that meets this basic intuitive notion of
being able to communicate an authority like one can communicate data.
This definition is why I've always been uncomfortable with the
concept of "Rights Amplification" in capability systems. If a
receiver can get more authority from a received capability than the
sender had (the receiver is able to "amplify" the capability), then
in what sense was the capability communicated from the sender to the receiver?
Do SAML assertions meet the above criteria (#1, #2) for "capabilities"?
--Jed http://www.webstart.com/jed-signature.html
More information about the cap-talk
mailing list