Hey Allen, Thanks for taking the time to document for this. Also cc'ing the specs list since it will require a change to the spec itself.
There is however still the case of someone setting up a rogue redirector specifically targeting OpenID which does the correct thing when the OP makes the request and then evil thing to the user when it sees a response. In any case, I'm in favor of adding this sort of mode to the protocol as it will help to de-mystify the return_to URL which right now is sort of this abstract thing which the user sees. Why do you see this as a better solution to the OP just fetching the return_to URL and not proceeding if it receives a 3xx code? How do you also see an OP dealing with an RP which is behind a firewall and thus cannot be reached? This would be one reason I'd lean toward the OP fetching the return_to URL, throwing a gigantic error if it is a 3xx and a decent warning on a 404, 500, or destination unreachable. --David -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Allen Tom Sent: Monday, February 05, 2007 11:24 PM To: security@openid.net Subject: [security] Phishing issues with return_to url and realm Hello OpenID Security Community, This is my first post here, and before I get started, I'd like to compliment you all on the amazing progress that OpenID has made recently. As far as protocols go, this is very exciting, and I believe that it can be used as the foundation for as-yet unimagined new killerapps. However, there are some severe phishing issues with the OpenID 2.0 draft specification which urgently need to be resolved before the draft is finalized. First of all, anyone can craft valid Auth Requests using spoofed values for openid.return_to and openid.realm. This has very nasty consequences for sites running redirect servers for click tracking purposes, such as these: http://x.go.com/cgi/x.pl?goto=http://www.jyte.com http://www.aol.com/ams/clickThruRedirect.adp?1,2,http://www.jyte.com A rogue RP could mask its identity and claim to be go.com or aol.com by hiding behind these redirect servers. When serving the Auth Request, an OP like myopenid.com will display this message to the user: "A site identifying as all sites matching http://anything.go.com has asked us for confirmation that xxxx is your identity URL..." This is EXTREMELY BAD, as users expect to trust their OP, especially if they feel extra secure because they configured an anti-phishing image (like MyOpenID's Personal Icon) and enabled SafeSignIn.This is particularly bad if the OP passes sensitive personal information or credentials via an extension in the Auth Response. The best way to resolve this issue is to define a way for the OP to verify that the return_to URL is actually a valid OpenID endpoint, and to also verify its association. I propose that an RP's return_to url expose an interface to allow it to identify itself as an OpenID 2.0 endpoint, and to also identify its association with the OP. Obviously, OPs must not follow redirects when interrogating the RP's endpoint. A possible interface would be for the RP return the its association handle if the OP hits the return_to url with the following parameters: openid.mode = "check_return_url" openid.server = "https://url_of_the_op.domain.com" Instead of doing this on every Authentication Request, it would make sense for the OP to verify the RP as part of the association process. After the OP issues a shared secret and assoc_handle to the RP, the OP should be able to query the RP's return_to url before enabling the association, exactly the same way an RP can verify an Auth Response by querying the OP. Because this implies that an association should be tied to a given return_to url, the Association Request interface should be extended to require the return_to url. Once the OP has verified the return_to url, the OP can enable the association so that all incoming Auth Requests with that assoc_handle and return_to url can be served without requiring additional verification of the return_to url. Verifying that the return_to url is actually a valid OpenID endopoint prevents redirect servers from being used by phishers to spoof their identify. The additional step of tying an association with an RP's endpoint allows an OP a way to easily identify verified endpoints and realms, and allows a way for an RP to properly identify itself when making an Auth Request. I believe that resolving this issue would increase the level of trust that users place on their OPs, as currently, users cannot trust their OP to tell them what site they're logging into. My apologies for the long winded introductory mail. Comments and feedback would be very appreciated. Thanks, Allen _______________________________________________ security mailing list security@openid.net http://openid.net/mailman/listinfo/security _______________________________________________ specs mailing list specs@openid.net http://openid.net/mailman/listinfo/specs