6765427 2001-07-18 02:53 +0200 /28 rader/ Laurent Sintes <sintes@nfrance.com> Sänt av: joel@lysator.liu.se Importerad: 2001-07-18 18:28 av Brevbäraren Extern mottagare: bugtraq@securityfocus.com Mottagare: Bugtraq (import) <18068> Extra kopia: PHP (-) erfarenhetsutbyte <231> Sänt: 2001-07-18 19:25 Sänt av Mathias Hansson (banana seats for grease monkeys) Ärende: php mail function bypass safe_mode restriction ------------------------------------------------------------ From: Laurent Sintes <sintes@nfrance.com> To: bugtraq@securityfocus.com Message-ID: <20010718025357.A19592@albertine.nfrance.com> php mail() function does not do check for escape shell commandes, even if php is running in safe_mode. So it's may be possible to bypass the safe_mode restriction and gain shell access. Affected: php4.0.6 php4.0.5 Significatives lines of ext/standard/mail.c: >extra_cmd = (*argv[4])->value.str.val; >strcat (sendmail_cmd, extra_cmd); >sendmail = popen(sendmail_cmd, "w"); Exploit: mail("toto@toto.com", "test", "test", "test", "; shell_cmd"); (6765427) /Laurent Sintes <sintes@nfrance.com>/----- Kommentar i text 6765813 av Salim Gasmi <salim@sdv.fr> 6765813 2001-07-18 19:07 +0200 /51 rader/ Salim Gasmi <salim@sdv.fr> Sänt av: joel@lysator.liu.se Importerad: 2001-07-18 20:22 av Brevbäraren Extern mottagare: Laurent Sintes <sintes@nfrance.com> Extern mottagare: bugtraq@securityfocus.com Mottagare: Bugtraq (import) <18082> Kommentar till text 6765427 av Laurent Sintes <sintes@nfrance.com> Ärende: Re: php mail function bypass safe_mode restriction ------------------------------------------------------------ From: Salim Gasmi <salim@sdv.fr> To: Laurent Sintes <sintes@nfrance.com>, bugtraq@securityfocus.com Message-ID: <5.1.0.14.0.20010718190033.033ce8c0@panoramix.sdv.fr> At 18/07/2001 02:53, Laurent Sintes wrote: >php mail() function does not do check for escape shell commandes, >even if php is running in safe_mode. > >So it's may be possible to bypass the safe_mode restriction and gain >shell access. > >Affected: >php4.0.6 >php4.0.5 > >Significatives lines of ext/standard/mail.c: > > >extra_cmd = (*argv[4])->value.str.val; > >strcat (sendmail_cmd, extra_cmd); > >sendmail = popen(sendmail_cmd, "w"); > >Exploit: >mail("toto@toto.com", > "test", > "test", > "test", > "; shell_cmd"); I confirm, this works ... A very trivial patch if like me you cannot disable the mail() function is to: Add this line: extra_cmd=NULL; in file ext/standard/mail.c, (line #152, juste before if (extra_cmd != NULL) { ) : and recompile php. This will force the parameter extra_cmd to NULL and thus disabling the bug. This is a fast and trivial patch, the right way is to unescape all characters in extra_cmd. Salim *************************************************** Gasmi Salim - SdV Plurimedia <http://www.sdv.fr> Directeur technique / C.T.O PGP Key available at: http://www.gasmi.net/pgp.txt *************************************************** (6765813) /Salim Gasmi <salim@sdv.fr>/----(Ombruten) Kommentar i text 6770271 av Laurent Sintes <sintes@nfrance.com> 6770271 2001-07-18 20:03 +0200 /21 rader/ Laurent Sintes <sintes@nfrance.com> Sänt av: joel@lysator.liu.se Importerad: 2001-07-19 18:32 av Brevbäraren Extern mottagare: bugtraq@securityfocus.com Mottagare: Bugtraq (import) <18111> Kommentar till text 6765813 av Salim Gasmi <salim@sdv.fr> Ärende: Re: php mail function bypass safe_mode restriction ------------------------------------------------------------ From: Laurent Sintes <sintes@nfrance.com> To: bugtraq@securityfocus.com Message-ID: <20010718200339.A19480@albertine.nfrance.com> > Add this line: extra_cmd=NULL; > in file ext/standard/mail.c, (line #152, juste before if (extra_cmd != > NULL) { ) : > and recompile php. You can also use extra_cmd = php_escape_shell_cmd(extra_cmd); to unescape all characters. In latest CVS you can see extra_cmd = php_escape_shell_arg(Z_STRVAL_PP(argv[4])); But it is not a suffisant check because php_escape_shell_arg does not escape all charaters. See ext/standard/exec.c for php_escape_shell_* code. (6770271) /Laurent Sintes <sintes@nfrance.com>/----- 6770331 2001-07-18 18:03 +0000 /26 rader/ Laurent Sintes <sintes@nfrance.com> Sänt av: joel@lysator.liu.se Importerad: 2001-07-19 18:49 av Brevbäraren Extern mottagare: bugtraq@securityfocus.com Mottagare: Bugtraq (import) <18114> Ärende: Re: php mail function bypass safe_mode restriction ------------------------------------------------------------ From: Laurent Sintes <sintes@nfrance.com> To: bugtraq@securityfocus.com Message-ID: <05256A8E.005DD0B2.00@mail.awiweb.com> > Add this line: extra_cmd=NULL; > in file ext/standard/mail.c, (line #152, juste before if (extra_cmd != > NULL) { ) : > and recompile php. You can also use extra_cmd = php_escape_shell_cmd(extra_cmd); to unescape all characters. In latest CVS you can see extra_cmd = php_escape_shell_arg(Z_STRVAL_PP(argv[4])); But it is not a suffisant check because php_escape_shell_arg does not escape all charaters. See ext/standard/exec.c for php_escape_shell_* code. (6770331) /Laurent Sintes <sintes@nfrance.com>/----- Kommentar i text 6770833 av Jon Ribbens <jon+bugtraq@unequivocal.co.uk> 6770833 2001-07-19 20:05 +0100 /14 rader/ Jon Ribbens <jon+bugtraq@unequivocal.co.uk> Sänt av: joel@lysator.liu.se Importerad: 2001-07-19 21:32 av Brevbäraren Extern mottagare: bugtraq@securityfocus.com Mottagare: Bugtraq (import) <18136> Kommentar till text 6770331 av Laurent Sintes <sintes@nfrance.com> Ärende: Re: php mail function bypass safe_mode restriction ------------------------------------------------------------ From: Jon Ribbens <jon+bugtraq@unequivocal.co.uk> To: bugtraq@securityfocus.com Message-ID: <20010719200545.D6312@snowy.squish.net> Laurent Sintes <sintes@nfrance.com> wrote: > extra_cmd = php_escape_shell_arg(Z_STRVAL_PP(argv[4])); > > But it is not a suffisant check because php_escape_shell_arg > does not escape all charaters. False. escape_shell_arg will successfully escape all characters from shells. (6770833) /Jon Ribbens <jon+bugtraq@unequivocal.co.uk>/ 6770564 2001-07-19 01:43 -0400 /60 rader/ Stuart Moore <info@securitytracker.com> Sänt av: joel@lysator.liu.se Importerad: 2001-07-19 19:59 av Brevbäraren Extern mottagare: bugtraq@securityfocus.com Extern mottagare: sintes@nfrance.com Mottagare: Bugtraq (import) <18131> Ärende: Re: php mail function bypass safe_mode restriction ------------------------------------------------------------ From: Stuart Moore <info@securitytracker.com> To: bugtraq@securityfocus.com, sintes@nfrance.com Message-ID: <3B567368.233FE64@securitytracker.com> Hi. I might be having a case of deja vu, because this problem sounds familiar. Is this problem different from the one posted by Joost Pol < joost@contempt.nl > on Sat Jun 30 2001 12:40:06 ("php breaks safe mode")? In that one, a problem with an extra 5th parameter that was added to the mail() command and broke safemode was described, affecting 4.0.5. See: http://www.securityfocus.com/bid/2954 Also, from January 2000 there was a report of a problem in PHP 3 where the popen() command, used by mail(), fails to be applied to the EscapeShellCmd() command. See: http://www.securityfocus.com/bid/911 So, is the problem w/ popen() or with mail()? Stuart ---------------------------- Stuart Moore SecurityTracker.com SecurityGlobal.net LLC smoore @ securityglobal.net ---------------------------- ----------------------------------------------------------------- php mail() function does not do check for escape shell commandes, even if php is running in safe_mode. So it's may be possible to bypass the safe_mode restriction and gain shell access. Affected: php4.0.6 php4.0.5 Significatives lines of ext/standard/mail.c: >extra_cmd = (*argv[4])->value.str.val; >strcat (sendmail_cmd, extra_cmd); >sendmail = popen(sendmail_cmd, "w"); Exploit: mail("toto@toto.com", "test", "test", "test", "; shell_cmd"); ----------------------------------------------------------------- (6770564) /Stuart Moore <info@securitytracker.com>/(Ombruten)