subprocess.call(..., user=xx, group=xxx) is not able to gain privileges
Aberta
Ninguém assumiu esta issue ainda.
stdlib
topic-subprocess
type-bug
- Linguagem predominante
- Python
- Estrelas
- 77.2k
- Forks
- 36k
- Merge médio
- 1d 9h
- PRs com merge (30d)
- 558
Descrição
#!/usr/bin/python3
from os import getresuid, initgroups, setresgid, setresuid
from pwd import getpwnam
from subprocess import check_call
def drop_permissions():
user = 'nobody'
info = getpwnam(user)
uid = info.pw_uid
gid = info.pw_gid
assert uid
assert gid
initgroups(user, gid)
setresgid(gid, gid, gid)
setresuid(uid, uid, 0)
def run_privileged_proc():
def restore():
setresuid(0, 0, 0)
setresgid(0, 0, 0)
initgroups('root', 0)
check_call(['id'], preexec_fn=restore)
def main():
assert getresuid() == (0, 0, 0)
# This on works (dropping permissions in child process)
check_call(['id'], user=65534, group=65534)
drop_permissions()
# This one works:
run_privileged_proc()
# This does not:
check_call(['id'], user=0, group=0)
main()
for the last subprocess, strace of child process:
set_robust_list(0x7eff7bfaea20, 24) = 0
close(7) = 0
close(9) = 0
close(11) = 0
dup2(6, 0) = 0
dup2(8, 1) = 1
dup2(10, 2) = 2
rt_sigaction(SIGPIPE, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER|SA_ONSTACK, sa_restorer=0x7eff7b83ea30}, {sa
rt_sigaction(SIGXFSZ, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER|SA_ONSTACK, sa_restorer=0x7eff7b83ea30}, {sa
setgroups(0, []) = -1 EPERM (Операция не позволена)
write(12, "OSError:", 8) = 8
write(12, "1", 1) = 1
write(12, ":", 1) = 1
write(12, "noexec", 6) = 6
exit_group(255) = ?
+++ exited with 255 +++
Python 3.10.7
Linked PRs
- gh-134400
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Comece pelas chamadas de subprocess.check_call usando user, group e preexec_fn e, em seguida, compare o comportamento delas com processos filhos em relação à saída de strace fornecida. A tarefa estará concluída quando o subprocesso privilegiado final puder ser executado com sucesso após as permissões serem removidas; a issue também lista o PR vinculado gh-134400.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- python
- Domínio
- operating-systems
- Tipo de issue
- Bug
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Status de atividade
- Estagnada
- Clareza
- Precisa de esclarecimento
- Facilidade para iniciantes
- 25/100