5 ms·
> This is a bit like arguing against the claim that generating SQL queries by concatenating strings is unsafe. "Only if you completely bungle escaping the param
by Freak_NL 10y ago
> This is a bit like arguing against the claim that generating SQL queries by concatenating strings is unsafe. "Only if you completely bungle escaping the parameters", right?
No, you document how it should be done. Any major database layer using SQL provides parametrised SQL queries, and strongly suggests developers use that (usually in the quick start guide). You can still do your own concatenation, but aren't advised to.
The JWT libraries that are up-to-date and well-documented don't recommend blindly trusting the algorithm set in the header either, they recommend safe approaches such as configuring your whitelist and letting any unlisted algorithms fail. For example:
https://github.com/auth0/java-jwt#verify-a-token https://github.com/auth0/java-jwt#verify-a-token
Only if you completely refuse to read even the basic 'getting started' documentation will you get to this kind of weird vulnerability. The issues with this part of the JWT standard have been addressed by the libraries, what remains is just a little bit of effort on the part of the developer — which may be expected from someone writing security critical code.
That is, don't blame the hammer for the shoddy carpentry.
> So instead of relying on developers avoiding this pitfall each time, let's avoid the pitfall altogether and get rid of negotiation.
So write a concise pamphlet that can easily be shared with all of the JWT libraries in an issue/bug report. If there is a good argument for having to explicitly whitelist algorithms, they might welcome the suggestion.
Some libraries already do this mind!
- kevinburke 10y agoI just documented how it should be done, in the article at the top of the page. The answer is "don't use JWT." Use specific tools for the thing you are actually trying to do, that have API's that are harder to mess up.
- Minikloon 10y agoBy that logic the answer is also "don't use SQL".
- kevinburke 10y agoMore like "Don't use SQL, if a thing adjacent to SQL exists that is better suited to a particular use case, doesn't have a history of poor implementations, and is harder for implementers and end users to screw up." In this case: - crypto_auth, or HMAC-SHA256 by itself, for authentication - crypto_secretbox for symmetric encryption - crypto_box or TLS for public key encryption
- wolco 10y agoBut what happens is that sql version becomes sqlite and it doesn't provided enough power or flexibility.
- deathanatos 10y agoGood JWT libraries essentially have a "box" and "unbox" function; the work required by the client needed to go behind the library's back here is on the same level as that needed to behind crypto_box's. Further, crypto_box works on a lower level than JWT encode/decode functions typically do, and would leave many concerns that JWTs handle in the user's hands for them to handle, alone. Having the user write their own code to handle those concerns is a terrible idea.
- mmalone 10y agoI'm with you on this. I've never thought of JWTs as a session storage mechanism; rather, I've always thought of them as a simpler (JSON-based) alternative to technologies like X.509 attribute certificates and SAML assertions. If you're creating a ticket / verifiable claim, there are a bunch of security considerations that JWT at least lays the groundwork for, and that NaCl secretbox doesn't appear to offer. Curious what OP thinks about putting things like payload canonicalization, subject/issuer/audience specification, and expiration entirely in the user's hands. I suppose its up to implementors to do appropriate validation, but at least JWT simplifies the conversation a bit.
- rattray 10y ago> Use specific tools for the thing you are actually trying to do, that have API's that are harder to mess up. That sounds like it would require a greater amount of knowledge to do correctly than "careful JWT".
- kevinburke 10y ago"Careful JWT" implies you know what you should be careful about. If you know that much, you should just use the better things. It also ignores the role JWT plays in promoting bad security practices
- gsylvie 10y agoReminds me of the problem of fatal tractor rollovers on farms. Should we fix the problem with better documentation, better training, or better tractors? http://www.sciencedirect.com/science/article/pii/S0925753596000690 http://www.sciencedirect.com/science/article/pii/S0925753596... http://agrivita.ca/program/lowcost.php#LowCostRollOverProtectiveStructuresInterventionProject http://agrivita.ca/program/lowcost.php#LowCostRollOverProtec...
- grovegames 10y agoI think all three should be used. But this isn't the question being addressed, which is whether to use tractors at all...
- MR4D 10y agoNever underestimate the ignorance (or stupidity) of a developer under a deadline.