Package: libfcgi-perl / 0.71-1+squeeze1

cve-2011-2766.patch Patch series | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Description: replace testing of hash value with hash reference
 %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. badbadbad
 This is CVE-2011-2766.
Author: chansen@cpan.org
Bug: https://rt.cpan.org/Public/Bug/Display.html?id=68380
Bug-Debian: http://bugs.debian.org/607479

--- a/FCGI.PL
+++ b/FCGI.PL
@@ -294,14 +294,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
@@ -313,7 +313,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)) {