Skip to content

Instantly share code, notes, and snippets.

@Jajauma
Last active February 18, 2017 14:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Jajauma/bb75c158984bad6168dd9949e5409e9a to your computer and use it in GitHub Desktop.
Save Jajauma/bb75c158984bad6168dd9949e5409e9a to your computer and use it in GitHub Desktop.
RootExec: extremely dumb and insecure sudo replacement
/* MIT License */
/* Copyright (c) 2016 Jajauma's GitHub */
/* Permission is hereby granted, free of charge, to any person obtaining a copy */
/* of this software and associated documentation files (the "Software"), to deal */
/* in the Software without restriction, including without limitation the rights */
/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell */
/* copies of the Software, and to permit persons to whom the Software is */
/* furnished to do so, subject to the following conditions: */
/* The above copyright notice and this permission notice shall be included in all */
/* copies or substantial portions of the Software. */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR */
/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, */
/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE */
/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER */
/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, */
/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE */
/* SOFTWARE. */
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
/* # gcc -Wall -O2 -o RootExec rootexec.c */
/* # chown root RootExec */
/* # chmod u+s RootExec */
int
main(int argc, char *argv[])
{
if (argc < 2)
{
fprintf(stderr, "Usage: %s <command [args]>\n", argv[0]);
exit(EXIT_FAILURE);
}
const char* this = argv[0];
const char* program = argv[1];
int narg = 1;
for (; narg < argc; narg++)
{
argv[narg-1] = argv[narg];
}
argv[argc-1] = NULL;
if (setreuid(0, -1) == -1)
{
perror("setreuid");
fprintf(stderr,
"\nNote that this program requires root ownership and set-user-ID \n"
"mode to work, e.g. `chown root %s && chmod u+s %s'\n", this, this);
exit(EXIT_FAILURE);
}
execvp(program, argv);
perror("execvp");
exit(EXIT_FAILURE);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment