The double-submitted-cookie isn't related to double submit protection,
no. Thats a completely different turf.

With that out of the way, its enough to create just one cookie and use
that both while rendering and validating forms.

I hope that makes it clearer. I'll try to provide a reference
implementation tomorrow.

Jörn

On Mon, Oct 20, 2008 at 12:58 PM, Johan Compagner <[EMAIL PROTECTED]> wrote:
> hmm i will read the paper then
> I stil dont get it how it is possible with 1 cookie, that then can never
> change when it is first generated
> and all the forms also just have that value right?
>
> But it is also for double submit protection right? So the cookie has to
> change right?
> But how can you then have 1 cookie? for all the forms?
> If i submit one and that is rerendered or redirected to another page.
> (so it has a new cookie so the double submit cant happen)
> But if a new cookie is set then all other forms are also suddenly invalid..
> and that looks pretty wrong to me
>
> johan
>
>
> On Mon, Oct 20, 2008 at 12:44 PM, Jörn Zaefferer <
> [EMAIL PROTECTED]> wrote:
>
>> No, the cookie is subject to the same-origin-policy, both in reading
>> and writing. The request is authenticated because the session cookie
>> is set, but its invalid when the form itself is missing the value.
>> Combining the attack with XSS would give access to the cookie, but
>> then he could just as well hijack the session directly.
>>
>> In other words: With CSRF alone there is no way for the attacker to
>> read the cookie, therefore its enough to use just one.
>>
>> Their whitepaper may do a better job of explaining the techniquie:
>> http://www.freedom-to-tinker.com/sites/default/files/csrf.pdf
>> Solutions are described on page 8ff.
>>
>> Jörn
>>
>> On Mon, Oct 20, 2008 at 12:33 PM, Johan Compagner <[EMAIL PROTECTED]>
>> wrote:
>> > what i dont get
>> > if an attacker wants to submit the form. and it can get to the form it
>> can
>> > do the post
>> > but you say it cant access the cookie. But if the cookie value is just
>> > compared to the form post value
>> > we have to make sure that the name of the cookie cant be guessed right?
>> So
>> > what should the name be?
>> >
>> > Because if the name would be "wicket-form-uuid" then couldnt the attacker
>> > also just generate that cookie?
>> >
>> > I guess there is a cookie per form (there can be many forms on the same
>> page
>> > or different active pages)
>> > and that cookie must be regenerated/set on every form render?
>> >
>> > johan
>> >
>> >
>> > On Mon, Oct 20, 2008 at 11:27 AM, Jörn Zaefferer <
>> > [EMAIL PROTECTED]> wrote:
>> >
>> >> Hi,
>> >>
>> >> my application currently uses CryptedUrlWebRequestCodingStrategy to
>> >> protect against CRSF attacks. Afaik 1.3.5 will include an update that
>> >> generates the key based on user sessions:
>> >> http://issues.apache.org/jira/browse/WICKET-1782
>> >> According to Johan Compagner, there are still issues with that
>> >> approach, though I don't know if that has been fixed:
>> >> http://www.nabble.com/Wicket-not-secure--to19556259.html#a19557593
>> >>
>> >> Anyway, the point of this mail is to bring up a different strategy for
>> >> CSRF protection, the double-submitted-cookie. Discussion of that are
>> >> here http://www.codinghorror.com/blog/archives/001175.html which links
>> >> to this article, including a whitepaper:
>> >>
>> >>
>> http://freedom-to-tinker.com/blog/wzeller/popular-websites-vulnerable-cross-site-request-forgery-attacks
>> >>
>> >> The basic idea is:
>> >>
>> >> "When a user visits a site, the site should generate a
>> >> (cryptographically strong) pseudorandom value and set it as a cookie
>> >> on the user's machine. The site should require every form submission
>> >> to include this pseudorandom value as a form value and also as a
>> >> cookie value. When a POST request is sent to the site, the request
>> >> should only be considered valid if the form value and the cookie value
>> >> are the same. When an attacker submits a form on behalf of a user, he
>> >> can only modify the values of the form. An attacker cannot read any
>> >> data sent from the server or modify cookie values, per the same-origin
>> >> policy. This means that while an attacker can send any value he wants
>> >> with the form, he will be unable to modify or read the value stored in
>> >> the cookie. Since the cookie value and the form value must be the
>> >> same, the attacker will be unable to successfully submit a form unless
>> >> he is able to guess the pseudorandom value."
>> >>
>> >> For Wicket, this would mean: Generate a pseudorandom value and set is
>> >> as a session cookie, when the cookie doesn't yet exist. Insert a
>> >> hidden input into each form with the generated value. Validate that
>> >> the value equals the cookie when submitting a form. The input and
>> >> validation can be abstracted into a Form subclass (or even add it to
>> >> Wicket's Form class...).
>> >>
>> >> That really easy to implement, is much more efficient (generate only
>> >> one value per user/browser session, store it on the client, not the
>> >> server) and is now the most common strategy to protect against CSRF
>> >> attacks. I've read a lot about CSRF, and this strategy seems the only
>> >> one both easy enough to implement and without holes.
>> >>
>> >> What do you think? Should Wicket support that out-of-the-box?
>> >>
>> >> Jörn
>> >>
>> >
>>
>

Reply via email to