[krbdev.mit.edu #3499] race in replay cache file ownership  
    Roland C. Dowdeswell via RT 
    rt-comment at krbdev.mit.edu
       
    Tue Mar  7 15:38:31 EST 2006
    
    
  
In the replay cache code, in krb5_rc_io_open() there is the following
logic:
    if ((d->fd = stat(d->fn, &statb)) != -1) {
	uid_t me;
	me = geteuid();
	/* must be owned by this user, to prevent some security problems with
	 * other users modifying replay cache stufff */
	if ((statb.st_uid != me) || ((statb.st_mode & S_IFMT) != S_IFREG)) {
	    FREE(d->fn);
	    return KRB5_RC_IO_PERM;
	}
	d->fd = THREEPARAMOPEN(d->fn, O_RDWR | O_BINARY, 0600);
    }
This is wrong and has a race between the stat(2) and the open.  The
correct way to do this is:
	d->fd = THREEPARAMOPEN(d->fn, O_RDWR | O_BINARY, 0600);
	ret = fstat(d->fd, &statb);
	.
	.
	.
I.e. fstat(2) the actual open fd in order to avoid the race.
Thanks,
--
    Roland Dowdeswell                      http://www.Imrryr.ORG/~elric/
    
    
More information about the krb5-bugs
mailing list