i* Initial import of 'sup' into mercurial - sup - small tool for privilege escalation Err bitreich.org 70
hgit clone git://bitreich.org/sup git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/sup URL:git://bitreich.org/sup git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/sup bitreich.org 70
1Log /scm/sup/log.gph bitreich.org 70
1Files /scm/sup/files.gph bitreich.org 70
1Refs /scm/sup/refs.gph bitreich.org 70
1Tags /scm/sup/tag bitreich.org 70
1README /scm/sup/file/README.gph bitreich.org 70
1LICENSE /scm/sup/file/LICENSE.gph bitreich.org 70
i--- Err bitreich.org 70
1commit 989bc1c744d8fe03a58692410a6d68ad00a872c8 /scm/sup/commit/989bc1c744d8fe03a58692410a6d68ad00a872c8.gph bitreich.org 70
hAuthor: pancake@dazo <unknown> URL:mailto:unknown bitreich.org 70
iDate: Mon, 14 Dec 2009 01:02:07 +0100 Err bitreich.org 70
i Err bitreich.org 70
i* Initial import of 'sup' into mercurial Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i A Makefile | 31 +++++++++++++++++++++++++++++++ Err bitreich.org 70
i A TODO | 1 + Err bitreich.org 70
i A config.def.h | 18 ++++++++++++++++++ Err bitreich.org 70
i A sup.1 | 23 +++++++++++++++++++++++ Err bitreich.org 70
i A sup.c | 72 +++++++++++++++++++++++++++++++ Err bitreich.org 70
i Err bitreich.org 70
i5 files changed, 145 insertions(+), 0 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/Makefile b/Makefile /scm/sup/file/Makefile.gph bitreich.org 70
i@@ -0,0 +1,31 @@ Err bitreich.org 70
i+CC?=gcc Err bitreich.org 70
i+DESTDIR?= Err bitreich.org 70
i+PREFIX?=/usr Err bitreich.org 70
i+VERSION=0.1 Err bitreich.org 70
i+USER=root Err bitreich.org 70
i+GROUP=root Err bitreich.org 70
i+ Err bitreich.org 70
i+all: config.h sup Err bitreich.org 70
i+ Err bitreich.org 70
i+config.h: Err bitreich.org 70
i+ cp config.def.h config.h Err bitreich.org 70
i+ Err bitreich.org 70
i+sup.o: config.h sup.c Err bitreich.org 70
i+ ${CC} -c sup.c Err bitreich.org 70
i+ Err bitreich.org 70
i+sup: sup.o Err bitreich.org 70
i+ ${CC} sup.o -o sup Err bitreich.org 70
i+ Err bitreich.org 70
i+clean: Err bitreich.org 70
i+ rm -f sup.o sup Err bitreich.org 70
i+ Err bitreich.org 70
i+mrproper: clean Err bitreich.org 70
i+ rm -f config.h Err bitreich.org 70
i+ Err bitreich.org 70
i+install: Err bitreich.org 70
i+ mkdir -p ${DESTDIR}${PREFIX}/bin Err bitreich.org 70
i+ cp sup ${DESTDIR}${PREFIX}/bin Err bitreich.org 70
i+ chown ${USER}:${GROUP} ${DESTDIR}/${PREFIX}/bin/sup Err bitreich.org 70
i+ chmod 4111 ${DESTDIR}${PREFIX}/bin/sup Err bitreich.org 70
i+ sed s,VERSION,${VERSION}, sup.1 \ Err bitreich.org 70
i+ > ${DESTDIR}${PREFIX}/share/man/man1/sup.1 Err bitreich.org 70
1diff --git a/TODO b/TODO /scm/sup/file/TODO.gph bitreich.org 70
i@@ -0,0 +1 @@ Err bitreich.org 70
i+* Enforce with checksums (sha1?) Err bitreich.org 70
1diff --git a/config.def.h b/config.def.h /scm/sup/file/config.def.h.gph bitreich.org 70
i@@ -0,0 +1,18 @@ Err bitreich.org 70
i+#define USER 1000 Err bitreich.org 70
i+#define GROUP -1 Err bitreich.org 70
i+ Err bitreich.org 70
i+#define SETUID 0 Err bitreich.org 70
i+#define SETGID 0 Err bitreich.org 70
i+ Err bitreich.org 70
i+#define CHROOT "/" Err bitreich.org 70
i+ Err bitreich.org 70
i+#define ENFORCE 1 Err bitreich.org 70
i+ Err bitreich.org 70
i+static struct rule_t rules[] = { Err bitreich.org 70
i+ { USER, GROUP, "whoami", "/usr/bin/whoami" }, Err bitreich.org 70
i+ { USER, GROUP, "ifconfig", "/sbin/ifconfig" }, Err bitreich.org 70
i+ { USER, GROUP, "ls", "/bin/ls" }, Err bitreich.org 70
i+ { USER, GROUP, "wifi", "/root/wifi.sh" }, Err bitreich.org 70
i+ { USER, GROUP, "", ""}, // allow to run any program Err bitreich.org 70
i+ { 0 }, Err bitreich.org 70
i+}; Err bitreich.org 70
1diff --git a/sup.1 b/sup.1 /scm/sup/file/sup.1.gph bitreich.org 70
i@@ -0,0 +1,23 @@ Err bitreich.org 70
i+.TH SUP 1 sup\-VERSION Err bitreich.org 70
i+.SH NAME Err bitreich.org 70
i+sup - scale user priviledges Err bitreich.org 70
i+.SH SYNOPSIS Err bitreich.org 70
i+.B sup Err bitreich.org 70
i+.RB [ \-hlv ] Err bitreich.org 70
i+.SH DESCRIPTION Err bitreich.org 70
i+sup is a minimal priviledge scalation utility that allow normal Err bitreich.org 70
i+users to run other programs as different user and group. Err bitreich.org 70
i+.P Err bitreich.org 70
i+The configuration is done in config.h at compile time. Err bitreich.org 70
i+.SH OPTIONS Err bitreich.org 70
i+.TP Err bitreich.org 70
i+.B \-h Err bitreich.org 70
i+print help message Err bitreich.org 70
i+.TP Err bitreich.org 70
i+.B \-l Err bitreich.org 70
i+list command whitelist Err bitreich.org 70
i+.TP Err bitreich.org 70
i+.B \-v Err bitreich.org 70
i+prints version information Err bitreich.org 70
i+.SH AUTHOR Err bitreich.org 70
i+pancake <nopcode.org> Err bitreich.org 70
1diff --git a/sup.c b/sup.c /scm/sup/file/sup.c.gph bitreich.org 70
i@@ -0,0 +1,72 @@ Err bitreich.org 70
i+/* pancake <nopcode.org> -- Copyleft 2009 */ Err bitreich.org 70
i+ Err bitreich.org 70
i+#include <stdio.h> Err bitreich.org 70
i+#include <errno.h> Err bitreich.org 70
i+#include <string.h> Err bitreich.org 70
i+#include <sys/stat.h> Err bitreich.org 70
i+ Err bitreich.org 70
i+#define HELP "sup [-hlv] [cmd ..]" Err bitreich.org 70
i+#define VERSION "sup 0.1 pancake <nopcode.org> copyleft 2009" Err bitreich.org 70
i+ Err bitreich.org 70
i+struct rule_t { Err bitreich.org 70
i+ int uid; Err bitreich.org 70
i+ int gid; Err bitreich.org 70
i+ const char *cmd; Err bitreich.org 70
i+ const char *path; Err bitreich.org 70
i+}; Err bitreich.org 70
i+ Err bitreich.org 70
i+#include "config.h" Err bitreich.org 70
i+ Err bitreich.org 70
i+static int die(int ret, const char *str) { Err bitreich.org 70
i+ fprintf (stderr, "%s\n", str); Err bitreich.org 70
i+ return ret; Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+int main(int argc, char **argv) { Err bitreich.org 70
i+ char *cmd; Err bitreich.org 70
i+ int i, uid, gid, ret; Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (argc < 2 || !strcmp (argv[1], "-h")) Err bitreich.org 70
i+ return die (1, HELP); Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (!strcmp (argv[1], "-v")) Err bitreich.org 70
i+ return die (1, VERSION); Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (!strcmp (argv[1], "-l")) { Err bitreich.org 70
i+ for (i = 0; rules[i].cmd != NULL; i++) Err bitreich.org 70
i+ printf ("%d %d %10s %s\n", rules[i].uid, rules[i].gid, Err bitreich.org 70
i+ rules[i].cmd, rules[i].path); Err bitreich.org 70
i+ return 0; Err bitreich.org 70
i+ } Err bitreich.org 70
i+ Err bitreich.org 70
i+ uid = getuid (); Err bitreich.org 70
i+ gid = getgid (); Err bitreich.org 70
i+ Err bitreich.org 70
i+ for (i = 0; rules[i].cmd != NULL; i++) { Err bitreich.org 70
i+ if (!rules[i].cmd[0] || !strcmp (argv[1], rules[i].cmd)) { Err bitreich.org 70
i+#if ENFORCE Err bitreich.org 70
i+ struct stat st; Err bitreich.org 70
i+ lstat (rules[i].path, &st); Err bitreich.org 70
i+ if (st.st_mode & 0222) Err bitreich.org 70
i+ return die (1, "Cannot run writable binaries."); Err bitreich.org 70
i+#endif Err bitreich.org 70
i+ if (uid != SETUID && rules[i].uid != -1 && rules[i].uid != uid) Err bitreich.org 70
i+ return die (1, "User does not match"); Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (gid != SETGID && rules[i].gid != -1 && rules[i].gid != gid) Err bitreich.org 70
i+ return die (1, "Group id does not match"); Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (setuid (SETUID) == -1 || setgid (SETGID) == -1 || Err bitreich.org 70
i+ seteuid (SETUID) == -1 || setegid (SETGID) == -1) Err bitreich.org 70
i+ return die (1, strerror (errno)); Err bitreich.org 70
i+#ifdef CHROOT Err bitreich.org 70
i+ if (chroot (CHROOT) == -1) Err bitreich.org 70
i+ return die (1, strerror (errno)); Err bitreich.org 70
i+#endif Err bitreich.org 70
i+ ret = execv (rules[i].path? rules[i].path:argv[1], argv+1); Err bitreich.org 70
i+ return die (ret, strerror (errno)); Err bitreich.org 70
i+ } Err bitreich.org 70
i+ } Err bitreich.org 70
i+ Err bitreich.org 70
i+ return die (1, "Sorry"); Err bitreich.org 70
i+} Err bitreich.org 70
.
Response:
text/plain