sys.exec disown defunc prcoess
Closed this issue · 1 comments
hulto commented
Describe the bug
When sys.exec
uses the disown flag on Linux a defunc child process is left hanging indefinitely.
![image](https://private-user-images.githubusercontent.com/7121375/321831255-c6abb114-dcb5-4a8e-9f22-69412d780fd8.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjAyMzk0ODUsIm5iZiI6MTcyMDIzOTE4NSwicGF0aCI6Ii83MTIxMzc1LzMyMTgzMTI1NS1jNmFiYjExNC1kY2I1LTRhOGUtOWYyMi02OTQxMmQ3ODBmZDgucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI0MDcwNiUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNDA3MDZUMDQxMzA1WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9OWY3MjY2NzY4N2E3Yjg0M2Q2NDczZGU1NzE3NDczNTEzNTI2NGQ5MzRlNjAzMzQ4OTAzYzk4OTVmMmQxNmUyMiZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmYWN0b3JfaWQ9MCZrZXlfaWQ9MCZyZXBvX2lkPTAifQ.40L8xcGwJTjw9KSdvuhkUgswfoxvNx4CulOKyDoTWF4)
To Reproduce
def main():
sys.exec("/bin/sleep", ["10"], True)
print(sys.shell("ps -faux")['stdout'])
time.sleep(30)
main()
root ➜ /workspaces/realm/implants/golem (defunt-child-proc) $ cargo run -- /tmp/test.eldritch
hulto commented
Seems to fork a daemon process the parent process usually dies.
That works but our agent would die.
To fix this we wrap it in an extra fork.
This extra fork leaves an intermediate process hanging in the process tree.