tech-security archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: open()ing a directory without O_DIRECTORY



matthew green <mrg%eterna.com.au@localhost> writes:

> i don't see the security issue here.

Here is an instance of the example I gave:

localhost$ mkdir foo
localhost$ cd foo
localhost$ touch secretfile1 secretfile2
localhost$ rm secretfile1 secretfile2
localhost$ # Give access to directory "foo" to someone else here
localhost$ hexdump -C .
00000000  b6 d4 76 00 0c 00 04 01  2e 00 00 00 00 a6 62 00  |..v...........b.|
00000010  f4 01 04 02 2e 2e 00 00  fd d7 76 00 14 00 08 0b  |..........v.....|
00000020  73 65 63 72 65 74 66 69  6c 65 31 00 fe d7 76 00  |secretfile1...v.|
00000030  d4 01 08 0b 73 65 63 72  65 74 66 69 6c 65 32 00  |....secretfile2.|
00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000200
localhost$ 

> i can't open a directory and read it if i don't have read perms
> on it.  this stops ls(1) etc from working.  i can't see any leak
> here that depends upon being able to read(2) a directory.  you
> can get the same data from readdir() or read(), only if you can
> actually read the directory itself.

Well, maybe getdents() needs to be patched to avoid a leak, but that's
perfectly doable if it's not already done.

There is no trivial way to get rid of this no longer valid contents,
since for good reason you can't write to a directory as a file. You have
to re-create it (not always possible due to permissions) or create long
entries until your data disappears... :-/

> is there some corner case i'm missing?  please provide an actual
> example you think leaks info.

See above.

> i may be sold on the usability point, because i rarely want to
> actually grep or look inside a directory entry as-is, but i
> think that belongs on a different list.

Heh, fine. :-)

 Aymeric


Home | Main Index | Thread Index | Old Index