4 ms·
> It breaks the isolation for that one container, the rest are just fine. Wrong. A container with access to the socket can compromise any other container, and
by hamdingers 1y ago
> It breaks the isolation for that one container, the rest are just fine.
Wrong. A container with access to the socket can compromise any other container, and start new containers with privileged access to the host system.
It compromises everything. This is a risk worth flagging.
- mbreese 1y agoIf you want to be able to spin up CI/CD containers, don’t you kinda already need to have docker socket access? In that case, you’ve already decided that this isn’t a threat vector you’re concerned about. Yes, this probably makes it easier, but the ability to startup new containers for CI/CD is what makes this threat possible. So, I’m not sure this is something I’d worry much about. Perhaps they should flag this in the documentation as something to be noted, but otherwise, I’m not sure how else you get this functionality. Is there another way?
- zenoprax 1y agoRunning a binary as a non-root user with scoped access to Docker commands seems more appropriate to me.
- franga2000 1y agoWhat do you mean by scoped access? A bunch of regexes checking that the app doesn't add any dangerous flags to docker run? That sounds like a fun CTF challenge to me, which is not a good thing for a security feature...
- soraminazuki 1y agoIt's a multi-user Git / CI /CD / project management platform. If you introduce this in your organization, a single vulnerability can take down the entire system and any other application running on the same host. You can't just "decide that this isn’t a threat vector" without taking the use case into account. Or at least it should come with alarm bells warning users that it's unsafe.
- franga2000 1y agoWhat is "entire system" here? I'd run something like that in a VM, so the "entire system" would be nothing but the app itself. If there is a RCE vuln in the app, your users are just as unsafe if it's running as root on the host or if it's running as nobody in a container. The valuable data is all inside.
- franga2000 1y agoYes, that's exactly what I said. The container with the socket is not isolated, but all the other containers are, including the CI containers, which is the whole point.
- cassianoleal 1y agoNo containers, existing or potential, are isolated from the one with socket access.
- franga2000 1y agoThe code inside those containers is isolated, which is the whole point. Only the app or runner container has socket access, which it uses to create new containers without socket access and it runs user code in there. If your get RCE in the app/runner, you get RCE on the host, yes, no shit. But if you get RCE in any other container on the system, you're properly contained.
- hamdingers 1y agoIt appears you fundamentally don't understand what mounting the docker socket is doing. I'm sorry to give you homework but you need to go look it up to participate in this conversation. > The code inside those containers is isolated, which is the whole point. A container with socket access can replace code or binaries in any other container, read any containers volumes and environment variables, replace whole containers, etc. That does not meet any definition of "isolated"
- franga2000 1y agoBut those containers DON'T have socket access. ONE container has socket access, then it creates other containers WITHOUT socket access. Those containers ARE isolated. Since the untrusted (user provided) code runs in those, the setup is reasonably secure. An RCE in OneDev is an RCE on the host, but that's a completely different threat model. The important part is that user code is isolated, which it is.
- fluidcruft 1y agoWould rootless docker help? (Potentially even running that specific workflow with it's own dedicated user)