>Number: 5354
>Category: mod_proxy
>Synopsis: Proxy-Authenticate Issue
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: apache
>State: open
>Class: sw-bug
>Submitter-Id: apache
>Arrival-Date: Tue Nov 23 11:30:02 PST 1999
>Last-Modified:
>Originator: [EMAIL PROTECTED]
>Organization:
apache
>Release: 1.3.9
>Environment:
redhat 6.1
>Description:
i am using apache v1.3.9 as a proxy/cache in an environment where there is an
upstream cache. i have apache configured to point to the upstream cache using
ProxyRemote. Everything works fine as long as authentication is not turned on
at the upstream cache.
if it is, when the browser issues a GET, it is passed to apache, then forwarded
by apache to the upstream cache. the upstream cache issues a 407
(Proxy-Authenticate: in the header) back to apache. apache forwards that back
to the browser. the browser responds and passes the authentication back to
apache. now the problem: apache strips the authentication response out of the
header and passes the request to the upstream cache (where it reissues a 407
again).
browser:GET --> apache:GET --> upstreamcache:407 --> apache:407 -->
browser:GET/Proxy-Authenticate --> apache:GET/{NO auth info]
--> upstreamcache:407 --> apache...
i have seen a number of posts that discuss similar issues, however they tend to
place blame on the browser which does not make sense in this case since i can
see the browser responding properly in my traces. obviously there is an issue
because the following code snippet says so!
reqhdrs_arr = ap_table_elts(r->headers_in);
reqhdrs = (table_entry *) reqhdrs_arr->elts;
for (i = 0; i < reqhdrs_arr->nelts; i++) {
if (reqhdrs[i].key == NULL || reqhdrs[i].val == NULL
/* Clear out headers not to send */
|| !strcasecmp(reqhdrs[i].key, "Host") /* Already sent */
/* XXX: @@@ FIXME: "Proxy-Authorization" should *only* be
* suppressed if THIS server requested the authentication,
* not when a frontend proxy requested it!
*/
|| !strcasecmp(reqhdrs[i].key, "Proxy-Authorization"))
continue;
ap_bvputs(f, reqhdrs[i].key, ": ", reqhdrs[i].val, CRLF, NULL);
}
i can get this to work in my current environment, however i am concerned as to
what it is that i will be allowing to happen once i do so. there has to be a
reason why the 'quick fix' was applied above (i assume that code commented with
FIXME is a quick fix! :o). i can see why stripping this information out has
value because it is a license to 'spoof' on a shared ip address, but i am in a
closed environment where authentication should (and must) only reside at the
perimeter of the entire network. is it a security issue? a lack of standard?
bad juju?
thanks
b
>How-To-Repeat:
just point an apache to a proxy requiring authentication
>Fix:
the 'fix' that we have implemented is to simply pass authentication requests
on. this is very simple, so i am quite sure that there is a reason why you are
not allowing this.
>Audit-Trail:
>Unformatted:
[In order for any reply to be added to the PR database, you need]
[to include <[EMAIL PROTECTED]> in the Cc line and make sure the]
[subject line starts with the report component and number, with ]
[or without any 'Re:' prefixes (such as "general/1098:" or ]
["Re: general/1098:"). If the subject doesn't match this ]
[pattern, your message will be misfiled and ignored. The ]
["apbugs" address is not added to the Cc line of messages from ]
[the database automatically because of the potential for mail ]
[loops. If you do not include this Cc, your reply may be ig- ]
[nored unless you are responding to an explicit request from a ]
[developer. Reply only with text; DO NOT SEND ATTACHMENTS! ]