ID:               37273
 Updated by:       [EMAIL PROTECTED]
 Reported By:      c dot i dot morris at durham dot ac dot uk
 Status:           Open
-Bug Type:         Documentation problem
+Bug Type:         Session related
 Operating System: Linux
 PHP Version:      5.1.3
 New Comment:

Security vulnerability should be better fixed in source than
documented.


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

[2006-07-27 11:41:42] a dot d dot stribblehill at durham dot ac dot uk

This is *not* a documentation bug: as the original report says, it is a
security vulnerability -- one that can and should be fixed in the code.

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

[2006-07-27 01:34:11] [EMAIL PROTECTED]

Reclassified. Ilia will give more info for whomever is going to
document this.

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

[2006-06-16 14:32:37] c dot i dot morris at durham dot ac dot uk

For a possible solution to this, in ext/session/mod_files.c, the
ps_files_open function has:
data->fd = VCWD_OPEN_MODE(buf, O_CREAT | O_RDWR | O_BINARY, 
                                data->filemode);

On systems that support O_NOFOLLOW (FreeBSD, Linux>=2.2, maybe others)
you can probably do
data->fd = VCWD_OPEN_MODE(buf, O_CREAT | O_RDWR | O_BINARY |
O_NOFOLLOW, 
                                data->filemode);
which will cause this open to fail (with error ELOOP) if the session
file is a symlink rather than a regular file.

On systems that don't support O_NOFOLLOW, stat()ing the file and making
sure the file mode isn't S_IFLNK should do it.

Would you like me to try to put together a patch for this?

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

[2006-05-03 16:19:05] c dot i dot morris at durham dot ac dot uk

As above - I managed to lose the bug password and it took a while to
come through to my email.

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

[2006-05-03 13:30:53] cim at compsoc dot dur dot ac dot uk

Ah, there appears to be some confusion over what I mean. I don't mean
ini_set() the session directory to a symlink, I mean set the session
directory to a real directory (which, yes, must be within open_basedir
confines) that contains a symlink outside open_basedir.
(So, for example, open_basedir = /users/www1/, create a symlink from
/users/www1/bob/sess_abc to /users/www2/fred/target, ini_set() the
session storage directory to /users/www1/bob/, and then create a session
with ID 'abc' using ?PHPSESSID=abc)

Does that make more sense?

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

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/37273

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

Reply via email to