diff options
author | Stephen Gallagher <sgallagh@redhat.com> | 2010-04-01 16:12:29 -0400 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2010-04-06 14:33:43 -0400 |
commit | 55a0f220ba8b35d7ea8e47ad19babdb05dd2bbe9 (patch) | |
tree | 0ad879883ea70686ca9a3caf012b29413b3315a5 /src/tests | |
parent | 3bd250d73e7d77cf8ceb72133ce13059c52a70ed (diff) | |
download | sssd-55a0f220ba8b35d7ea8e47ad19babdb05dd2bbe9.tar.gz sssd-55a0f220ba8b35d7ea8e47ad19babdb05dd2bbe9.tar.xz sssd-55a0f220ba8b35d7ea8e47ad19babdb05dd2bbe9.zip |
Protect against check-and-open race conditions
There is a small window between running lstat() on a filename and
opening it where it's possible for the file to have been modified.
We were protecting against this by saving the stat data from the
original file and verifying that it was the same file (by device
and inode) when we opened it again, but this is an imperfect
solution, as it is still possible for an attacker to modify the
permissions during this window.
It is much better to simply open the file and test on the active
file descriptor.
Resolves https://fedorahosted.org/sssd/ticket/425 incidentally, as
without the initial lstat, we are implicitly accepting symlinks
and only verifying the target file.
Diffstat (limited to 'src/tests')
-rw-r--r-- | src/tests/check_and_open-tests.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/tests/check_and_open-tests.c b/src/tests/check_and_open-tests.c index 7ec8f3bc3..e3d988680 100644 --- a/src/tests/check_and_open-tests.c +++ b/src/tests/check_and_open-tests.c @@ -100,11 +100,11 @@ START_TEST(test_symlink) ret = symlink(filename, newpath); fail_unless(ret == 0, "symlink failed [%d][%s]", ret, strerror(ret)); - ret = check_and_open_readonly(newpath, &fd, uid, gid, mode, CHECK_REG); + ret = check_file(newpath, uid, gid, mode, CHECK_REG, NULL); unlink(newpath); + fail_unless(ret == EINVAL, "check_and_open_readonly succeeded on symlink"); - fail_unless(fd == -1, "check_and_open_readonly file descriptor not -1"); } END_TEST |