Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce a bit to indicate the server doesn't do IP-based authentication #1993

Closed
annevk opened this issue Nov 12, 2018 · 5 comments
Closed
Labels
-transport design An issue that affects the design of the protocol; resolution requires consensus. has-consensus An issue that the Chairs have determined has consensus, by canvassing the mailing list. parked An issue that we can't immediately address; for future discussion.

Comments

@annevk
Copy link

annevk commented Nov 12, 2018

Web browsers have needed to invent a variety of schemes to talk to servers, such as the CORS protocol for HTTP and WebSocket as some kind of TCP, to avoid allowing attacker.example access to IP-authenticated data (e.g., intranets without the best security setup).

It'd be nice if this kind of thing could be done at the base protocol level. This would also allow browsers to expose a QUIC^W??? API to communicate with arbitrary servers that have the relevant bit set. (If such an API saw adoption that might also be a further incentive for middleware to get their act together.)

This would not obviate the need for something like CORS entirely, as requests containing cookies or HTTP authentication data would still require explicit consent, but it would allow browser-based applications to more usefully take part in the ecosystem.

cc @jakearchibald

@martinthomson martinthomson added design An issue that affects the design of the protocol; resolution requires consensus. -transport parked An issue that we can't immediately address; for future discussion. labels Nov 12, 2018
@martinthomson
Copy link
Member

Since this idea probably traces back to me, I can't really say this is bad. But I think that we can probably do something in an extension. This is a somewhat specialized use case. Happy to work with you, @annevk or @jakearchibald, to make that happen.

A generic TLS extension might be better here. QUIC could pick that up, but it might also be nice to have that signal in other contexts than just QUIC.

I have significant reservations about how this sort of extension might be deployed safely. We'll have to be very careful to explain the risks of a mistake. Turning on a server-level config like this requires confidence that there are no resources on that server that are restricted. Worse, if servers can be used for connection coalescing (in HTTP/2 or QUIC), then that risk extends to all resources across all origins that might be coalesced onto the same connection.

I suspect that server-level CORS is a common-enough implementation technique. So we likely already have servers taking that risk. So on balance this is probably worth doing.

@annevk
Copy link
Author

annevk commented Nov 12, 2018

For CORS there might be origin-wide configurations going forward, as per https://github.com/WICG/origin-policy, but that wouldn't really help with any kind of low-level networking API.

And CORS is quite granular today when it comes to what kind of requests can be made. A low-level bit would bypass all those restrictions more easily allowing for dictionary-based attacks and such, including on cookies, which would no longer have the same restrictions as they do today in the Fetch/HTTP stack exposed by browsers. This also applies to other things in the Fetch/HTTP stack which would have to be re-examined. (This is assuming a low-level API on which an attacker could build their own HTTP client.)

Sigh, perhaps Origin Policy/Manifest is our best bet and low-level APIs are too dangerous.

@mcmanus
Copy link
Contributor

mcmanus commented Nov 12, 2018

interesting.

one of the nice things here is that it addresses the binding vulnerability by pushing cors down the stack (at least as far as the assertion goes). I would be concerned that variable binding is a normal part of the web platform (DNS, but also l4 lb, and alt-svc, and origin frame, ..) and its not hard to imagine mismatches here which lead to unexpected hard failure even for non web services.

@martinthomson
Copy link
Member

FYI, in accordance with the spirit of RFC 5704, w3c/p2p-webtransport#73 just had this added: w3c/p2p-webtransport@a4b1bee

@martinthomson
Copy link
Member

Tokyo conclusion: this is a candidate for an extension.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
-transport design An issue that affects the design of the protocol; resolution requires consensus. has-consensus An issue that the Chairs have determined has consensus, by canvassing the mailing list. parked An issue that we can't immediately address; for future discussion.
Projects
None yet
Development

No branches or pull requests

4 participants