Miklos Szeredi <[EMAIL PROTECTED]> wrote:
>> For example, consider the classic symlink attack.
>> We're not supposed to follow symlinks and our system lacks support
>> for open's O_NOFOLLOW flag.  So we lstat the target directory,
>> determine that it is indeed a directory, then open it.  But between
>> the lstat and the open, someone moved it aside and replaced it with
>> a symlink to another directory.  The only way to detect that is to
>> compare dev/inode pairs before and after.
>
> OK, but for systems which do have O_NOFOLLOW, this isn't necessary and
> less efficient than just using O_NOFOLLOW.  So can't this test be made
> conditional for systems lacking O_NOFOLLOW?

For that one yes, but there is a more insidious attack.

The case in which a partially processed (visited just once so far)
directory is renamed to reside at a different level in the file system
hierarchy must also be detected.  There, O_NOFOLLOW doesn't help at all.
It can be detected upon traversing a ".." link only by comparing prior
and current dev/ino pairs.


Reply via email to