[scponly] Patch for chdir bug with version 4.0
wby oblyr
joe at sublimation.org
Fri Dec 3 18:46:23 EST 2004
Thanks David, I will release 4.1 immediately after reviewing the patch.
joe
David Ramsden wrote this message on
Fri, Dec 03, 2004 at 23:41 +0000:
> [Note: This is a repost of my previous message, just not signed with my
> PGP key because the mailing list archive doesn't display it properly]
>
> Hi,
>
> Once again, version 4.0 suffers from a bug which prevents chdir's from
> working if scponly puts the user in a chroot.
>
> This also existed in scponly 3.11 for which I also created a patch for
> (this was included in Debian unstable's scponly package).
>
> Not only does it correct the problem but also fixes a security violation
> - after you chroot() you should /always/ chdir() to lessen the chances
> of being able to break out of the chroot. Please read chroot(2) for more
> information, especially this part:
> ----
> Note that this call does not change the current working
> directory, so that `.' can be outside the tree rooted at
> `/'. In particular, the super-user can escape from a
> `chroot jail' by doing `mkdir foo; chroot foo; cd ..'.
> ----
>
> The mentioned patch for 4.0 is attached.
>
> Regards,
> David.
> --
> .''`. David Ramsden <david at hexstream.eu.org>
> : :' : http://david.hexstream.eu.org/
> `. `'` PGP key ID: 507B379B on wwwkeys.pgp.net
> `- Debian - when you have better things to do than to fix a system.
> --- scponly.c.old Fri Dec 3 23:19:04 2004
> +++ scponly.c Fri Dec 3 23:16:24 2004
> @@ -180,12 +180,15 @@
> if (chrooted)
> {
> char *root_dir = chrootdir;
> + char chdir_path[FILENAME_MAX];
>
> + strcpy(chdir_path, "/");
> strcpy(chrootdir, homedir);
> while((root_dir = strchr(root_dir, '/')) != NULL)
> {
> if (strncmp(root_dir, "//", 2) == 0)
> {
> + snprintf(chdir_path, FILENAME_MAX, "%s", root_dir + 1);
> *root_dir = '\0';
> break;
> }
> @@ -200,6 +203,20 @@
> syslog (LOG_ERR, "chroot: %m");
> }
> syslog (LOG_ERR, "couldn't chroot to %s [%s]", chrootdir, logstamp());
> + exit(EXIT_FAILURE);
> + }
> +
> + if (debuglevel)
> + {
> + syslog (LOG_DEBUG, "chdiring to dir: \"%s\"", chdir_path);
> + }
> + if (-1==(chdir(chdir_path)))
> + {
> + if (debuglevel)
> + {
> + syslog (LOG_ERR, "chdir: %m");
> + }
> + syslog (LOG_ERR, "couldn't chdir to %s [%s]", chdir, logstamp());
> exit(EXIT_FAILURE);
> }
> }
> _______________________________________________
> scponly mailing list
> scponly at lists.ccs.neu.edu
> https://lists.ccs.neu.edu/bin/listinfo/scponly
--
----
PGP KEY: http://www.sublimation.org/contact.html
PGP Key fingerprint = EC4B 0DA5 B4F6 BDDD 9176 55D6 3A6A 7D63 158F 22D2
More information about the scponly
mailing list