nginx 0day exploit for nginx + fastcgi PHP

Ian M. Evans ianevans at digitalhit.com
Sat May 22 16:13:58 MSD 2010


On 5/22/2010 6:49 AM, Ian M. Evans wrote:
> On 5/22/2010 6:22 AM, Igor Sysoev wrote:
>> On Sat, May 22, 2010 at 06:17:26AM -0400, Ian M. Evans wrote:
>>> Yep, the two locations you suggested:
>>> location ~ ^/(?P<SN>cr...
>>> and
>>> location ~ ^(?P<SN>.*/(cr...
>> I can not reproduce. Do you use 0.8.37 ?
>
> Yes...I installed it last night and forgot to restart it, so the old
> version was still running. Once I finish banging my head on the desk,
> I'll disable the cgi.fix_pathinfo and make sure all is well.
>
> Thanks, and I'll let you know the results.

Well, unfortunately, changing cgi.fix_pathinfo to cgi.fix_pathinfo=0 
killed the extensionless php files, just like it did in 2008.

Here's a snippet from the debug log when it works (cgi.fix_pathinfo=1):

2010/05/22 07:50:51 [debug] 24492#0: *1153 http uri: "/academy/75/photos"
2010/05/22 07:50:51 [debug] 24492#0: *1153 http args: ""
2010/05/22 07:50:51 [debug] 24492#0: *1153 http exten: ""
2010/05/22 07:50:51 [debug] 24492#0: *1153 http process request header line
...
2010/05/22 07:50:51 [debug] 24492#0: *1153 test location: "/"
2010/05/22 07:50:51 [debug] 24492#0: *1153 test location: ~ 
"\.(shtml|php|inc)$"
2010/05/22 07:50:51 [debug] 24492#0: *1153 test location: ~ 
"^/(?P<SN>cr|evans|news|poll|posters|photos|profile|review|shop|evansabove|celebrityrow|torontofilmfestival)(?P<PI>/.*$|$)"
2010/05/22 07:50:51 [debug] 24492#0: *1153 test location: ~ 
"^/(?P<SN>galleries)(?P<PI>/.*$|$)"
2010/05/22 07:50:51 [debug] 24492#0: *1153 test location: ~ 
"^(?P<SN>.*/(cr|evans|news|poll|posters|photos|profile|review|shop|evansabove|test|profiles|reviews))(?P<PI>/.*$|$)"
2010/05/22 07:50:51 [debug] 24492#0: *1153 http regex set $pi to ""
2010/05/22 07:50:51 [debug] 24492#0: *1153 http regex set $sn to 
"/academy/75/photos"
2010/05/22 07:50:51 [debug] 24492#0: *1153 using configuration 
"^(?P<SN>.*/(cr|evans|news|poll|posters|photos|profile|review|shop|evansabove|test|profiles|reviews))(?P<PI>/.*$|$)"
...
2010/05/22 07:50:51 [debug] 24492#0: *1153 http script var: 
"/academy/75/photos"
2010/05/22 07:50:51 [debug] 24492#0: *1153 fastcgi param: 
"SCRIPT_FILENAME: /usr/local/apache/htdocs/academy/75/photos"
2010/05/22 07:50:51 [debug] 24492#0: *1153 http script copy: "PATH_INFO"
2010/05/22 07:50:51 [debug] 24492#0: *1153 http script var: ""
2010/05/22 07:50:51 [debug] 24492#0: *1153 fastcgi param: "PATH_INFO: "
...
2010/05/22 07:50:51 [debug] 24492#0: *1153 http finalize request: -4, 
"/academy/75/photos?" a:1, c:2
...
2010/05/22 07:50:52 [debug] 24492#0: *1153 http fastcgi record length: 8184

And here's the same request failing when cgi.fix_pathinfo is turned off:

2010/05/22 07:53:18 [debug] 24492#0: *1196 http uri: "/academy/75/photos"
2010/05/22 07:53:18 [debug] 24492#0: *1196 http args: ""
2010/05/22 07:53:18 [debug] 24492#0: *1196 http exten: ""
...
2010/05/22 07:53:18 [debug] 24492#0: *1196 test location: ~ 
"\.(shtml|php|inc)$"
2010/05/22 07:53:18 [debug] 24492#0: *1196 test location: ~ 
"^/(?P<SN>cr|evans|news|poll|posters|photos|profile|review|shop|evansabove|celebrityrow|torontofilmfestival)(?P<PI>/.*$|$)"
2010/05/22 07:53:18 [debug] 24492#0: *1196 test location: ~ 
"^/(?P<SN>galleries)(?P<PI>/.*$|$)"
2010/05/22 07:53:18 [debug] 24492#0: *1196 test location: ~ 
"^(?P<SN>.*/(cr|evans|news|poll|posters|photos|profile|review|shop|evansabove|test|profiles|reviews))(?P<PI>/.*$|$)"
2010/05/22 07:53:18 [debug] 24492#0: *1196 http regex set $pi to ""
2010/05/22 07:53:18 [debug] 24492#0: *1196 http regex set $sn to 
"/academy/75/photos"
2010/05/22 07:53:18 [debug] 24492#0: *1196 using configuration 
"^(?P<SN>.*/(cr|evans|news|poll|posters|photos|profile|review|shop|evansabove|test|profiles|reviews))(?P<PI>/.*$|$)"
...
2010/05/22 07:53:18 [debug] 24492#0: *1196 http script var: 
"/academy/75/photos"
2010/05/22 07:53:18 [debug] 24492#0: *1196 fastcgi param: 
"SCRIPT_FILENAME: /usr/local/apache/htdocs/academy/75/photos"
2010/05/22 07:53:18 [debug] 24492#0: *1196 http script copy: "PATH_INFO"
2010/05/22 07:53:18 [debug] 24492#0: *1196 http script var: ""
2010/05/22 07:53:18 [debug] 24492#0: *1196 fastcgi param: "PATH_INFO: "
...
2010/05/22 07:53:18 [debug] 24492#0: *1196 http finalize request: -4, 
"/academy/75/photos?" a:1, c:2
...
2010/05/22 07:53:18 [debug] 24492#0: *1196 http upstream request: 
"/academy/75/photos?"
...
2010/05/22 07:53:18 [debug] 24492#0: *1196 http finalize request: 404, 
"/academy/75/photos?" a:1, c:1
2010/05/22 07:53:18 [debug] 24492#0: *1196 http special response: 404, 
"/academy/75/photos?"
2010/05/22 07:53:18 [debug] 24492#0: *1196 internal redirect: 
"/dhe404.shtml?"

Thanks for any suggestions. What I find interesting (mind-boggling?) is 
that in both instances $pi, $sn, SCRIPT_FILENAME and PATH_INFO are the 
same yet one succeeds and the other tosses a 404.



More information about the nginx mailing list