Nada de errado com setuid
no TinyCore. No entanto, o programa simples na questão não é tão simples de explorar no TinyCore.
A chamada system
chama o comando especificado usando /bin/sh -c
. No TinyCore, /bin/sh
é um link simbólico para busybox ash
, que desce setuid
privileges. Portanto, mesmo que você crie um script de shell ou até mesmo um binário que faça algo malicioso e chame-o de date
para enganar o programa vulnerável para executá-lo, ele não será executado como setuid
. O programa original estará executando setuid
, mas não o comando gerado por system
.
Como uma observação, o bash
padrão também cai setuid
privileges quando invocado como /bin/sh
, desde a versão 2. No entanto, a vulnerabilidade descrita na questão pode ser demonstrada no Debian e seus derivados, aparentemente A versão de bash
não descarta privilégios. (Obviamente, há uma boa razão para isso, mas eu não pesquisei.)
Por fim, posso contornar o comportamento de eliminar privilégios alterando o programa para:
int main(int argc, char **argv)
{
// circumvent busybox ash dropping privileges
uid_t uid = geteuid();
setreuid(uid, uid);
printf("Current time: ");
fflush(stdout);
system("date");
return 0;
}