On 03/22/2014 05:54 AM, Amos Jeffries wrote: > On 22/03/2014 7:46 a.m., Tsantilas Christos wrote: >> >> Hi all, >> a Measurement Factory customer reported the following bug: >> >> 1) A user sends a CONNECT request with valid credentials >> 2) Squid checks the credentials and adds the user to the user cache >> 3) The same user sends a CONNECT request with invalid credentials >> 4) Squid overwrites the entry in the user cache and denies the second >> CONNECT request >> 5) The user sends a GET request on the first SSL connection which is >> established by now >> 6) Squid knows that it does not need to check the credentials on the >> bumped connection but still somehow checks again whether the user is >> successfully authenticated >> 7) Due to the second CONNECT request the user is regarded as not >> successfully authenticated >> 8) Squid denies the GET request of the first SSL connection with 403 >> ERR_CACHE_ACCESS_DENIED >> >> On proxies with Basic authentication and SSL bumping, this can be used >> to prevent a legitimate user from making any HTTPS requests >> >> I am attaching a patch which disables authentication for tunneled requests. > > That is incorrect, however it is not what you have coded. > > The correct action which your patch contains is to disables *re-* > authentication of bumped requests.
I did not express my self well. What I mean is that we should authenticate only the first CONNECT request. We must not authenticate the HTTP requests which tunneled through the CONNECT tunnel. > >> Looks important bug and patch should applied. >> >> Looking in the authentication squid3 code I am seeing issues, related to >> authentication cache. >> For example >> - inside Auth::Basic::User::updateCached() we are replacing with >> (maybe wrong) password a valid cache entry. This is does not looks normal. > > Yes that is a bit strange. To maintain old Basic::User state references > it should replace the entire cached User object if anything in the state > changes. Yep. > >> >> - For digest authentication inside Auth::Digest::Config::decode method >> we are retrieving user from cache, and if we found it we are marking the >> cached user as Auth::Unchecked which means that the entry needs >> checking again. >> Looking in the code, in practice this is means, do not use cache, always >> query again. > > Digest has quite a few bugs at present. I'm working on it. Thanks for > pointing out this one. ok > >> >> Am I missing something? >> > > To emulate bumped traffic transparently as if it were non-bumped the > right thing to do is to disable re-authentication. > > But inside matchProxyAuth() is where the check for ssl-Bumped should be > happening I think. It already has access to Filled() state and can check > the flag and return 1 before doing anything else. > If you just move the if-statement I think the updated patch can go > straight in without another review. Applied with this fix. > > Amos >