Then there's the question of checking to see if the data in the envelope is consistent with data outside the envelope. A good way to do this is to ignore the data outside the envelope and only use the verified, enveloped data.

This is precisely the problem. But think about what "only using the data inside the envelope" means in the context of OAuth -- stuffing all the relevant parts of the HTTP request inside the envelope. I admit that I'm not up to speed on the latest OAuth specs, but in earlier versions, there were several parts of the HTTP request that were included under the OAuth signature, so this would amount to a lot of duplication.

The alternative is to somehow ensure that the data outside the envelope are the same as the data inside the envelope. Which brings us back to the two mechanisms we were talking about before for doing that: 1. Send the enveloped data and checking that the inside matches the outside 2. Just send the envelope (not the data) and reconstruct the data from the request based on the outside information.

Just using a JSON token / Magic Signature object that includes all the relevant fields requires that you do (1), which has the risk that the recipient can skip the check. You can do (2) with a "meta-MagicSig" where the content is included by reference (e.g., to field names) and the actual enveloped data structure is built and verified by the recipient.

As far as a specific attack vector, I think the idea is that a recipient could get a request like the following (again, with made-up syntax)...

POST /malevolent.php HTTP/1.1
Authorization: oauth { method: "GET", path: "innocuous.jpg", sig: valid_sig }

... and based on the validity of the signature, go ahead and grant the request.

--Richard

_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to