Skip to content

Commit

Permalink
Stop leaking information across requests
Browse files Browse the repository at this point in the history
%hash is false if the hash hasn't been assigned to, *or* if the hash is simply
empty. This causes the environment from the *second* request (that is, the
environment produced by the first request) to be saved as default if the first
request had empty environment. This way, request after the first can get access
to credentials set up by the first request.

Instead of fixing this, I'd much rather remove this old and buggy
interface. However, 10 years of deprecation don't seem to have been enough for
CGI::Fast to switch to the new and properly supported interface. :-(

This is CVE-2011-2766.
  • Loading branch information
rafl committed Sep 24, 2011
1 parent 21472f7 commit 297693d
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions perl/FCGI.PL
Expand Up @@ -295,14 +295,14 @@ sub Request(;***$*$) {
sub accept() {
warn "accept called as a method; you probably wanted to call Accept" if @_;
if (%FCGI::ENV) {
%ENV = %FCGI::ENV;
if ( defined($FCGI::ENV) ) {
%ENV = %$FCGI::ENV;
} else {
%FCGI::ENV = %ENV;
$FCGI::ENV = {%ENV};
}
my $rc = Accept($global_request);
for (keys %FCGI::ENV) {
$ENV{$_} = $FCGI::ENV{$_} unless exists $ENV{$_};
for (keys %$FCGI::ENV) {
$ENV{$_} = $FCGI::ENV->{$_} unless exists $ENV{$_};
}
# not SFIO
Expand All @@ -314,7 +314,7 @@ sub accept() {
sub finish() {
warn "finish called as a method; you probably wanted to call Finish" if @_;
%ENV = %FCGI::ENV if %FCGI::ENV;
%ENV = %$FCGI::ENV if defined($FCGI::ENV);
# not SFIO
if (tied (*STDIN)) {
Expand Down

0 comments on commit 297693d

Please sign in to comment.