On Mon, Oct 20, 2014 at 11:00 AM, Zack Weinberg <za...@cmu.edu> wrote:
> On Mon, Oct 20, 2014 at 1:38 PM, Chris Steipp <cste...@wikimedia.org> wrote:
>> * Tokens can be time limited. By default they won't be, but this puts
>> the plumbing in place if it makes sense to do that on any token checks
>> in the future.
>> * The tokens returned in a request will change on each request. Any
>> version of the token will be good for as long as the time limit is
>> valid (which again, will default to infinite), but this protects
>> against ssl-compression attacks (like BREACH) where plaintext in a
>> request can be brute-forced by making many requests and watching the
>> size of the response.
>>
>> To do this, the size of the token (which has been a fixed 32 bytes +
>> token suffix for a very long time) will change to add up to 16 bytes
>> of timestamp (although in practice, it will stay 8 bytes for the next
>> several years) to the end of the token.
>
> I have no objection to the change itself, but I would like to make a
> few related comments:
>
> 1) Since this is changing anyway, it would be a good time to make the
> token size and structure independent of whether the user is logged on
> or not.  (This is probably not the only place where MediaWiki leaks
> "is this user logged on?" via request or response size, but it is an
> obvious place.)  I think that would involve generating 'wsEditToken'
> whether or not isAnon() is true, which should be fine?  And then
> matchEditToken() would be simpler.  And anonymous editing tokens could
> also be time-limited.

This is the direction I'm pushing towards. The way we handle caching
at the WMF keeps this from being as simple as you have here, but yes,
it's a long over due change.

> 2) Since this is changing anyway, it would be a good time to stop
> using MD5.  SHA256 should be good for a while.

Preimage attacks on md5 are still just slightly faster than brute
force, so while I don't think we're in danger, I'm not opposed to
strengthening this. Hopefully after this, everyone will use
dynamically sized buffers, so this would be a fairly trivial change in
the future.

> 3) You're using the per-session 'wsEditToken' value as the HMAC secret
> key.  Is there anywhere that the raw 'wsEditToken' might be exposed to
> the client?  Such a leak would enable a malicious client to forge
> editing tokens and bypass the time-limiting.

There shouldn't. If any extensions do that, I would treat it as a security bug.

> 4) Architecturally speaking, does it make sense to time-limit the
> *token* rather than the *session*?

That would be nice, but it makes it harder to do rolling validity, and
this way we can also limit different types of tokens (so a checkuser
token can be limited to a few minutes, while an edit token can have
several hours) without having to track more secrets in a user's
session.

> zw
>
> _______________________________________________
> Wikitech-l mailing list
> Wikitech-l@lists.wikimedia.org
> https://lists.wikimedia.org/mailman/listinfo/wikitech-l

_______________________________________________
Wikitech-l mailing list
Wikitech-l@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/wikitech-l

Reply via email to