On Sat, 2021-02-06 at 22:26 +0100, Ludovic Courtès wrote: > > [...] > I understand the TOCTTOU race. However, activation code runs in two > situations: when booting the system (before shepherd takes over), and > upon ‘guix system reconfigure’ completion. > > When booting the system, there’s just no process out there to take > advantage of the race condition. > > In the second case, presumably all the file name components already > exist. In the second situation, a compromised service could quickly rename a component to something else and create a symlink in place, and after the activation code has changed permissions and owner remove the symlink and rename the component back to avoid suspicion. (The old component could be removed entirely and replaced with a symlink, but that will likely break something, which may lead to the sysadmin investigating.) (The attack method I'm describing here of course only works if the compromised service has control over both the component and the parent directory.) > Does that make sense? Maybe? While I would prefer there would *not* be a TOCTTOU race, we may have to live with that for the moment (and even with a TOCTTOU race, at least an attacker only has a narrow window). I'll submit a new patch *without* a TOCTTOU race once openat, fstatat, ... bindings make it into guile, but for the mean time, I've attached a patch with the TOCTTOU race. I've tested with 'make check-system TESTS="basic cups"'. I couldn't test all affected services, unfortunately, due to lack of system tests. Thoughts? Greetings, Maxime.