[PATCH] Do not set DOCKER_TMP to be owned by remapped root
authorBrian Goff <cpuguy83@gmail.com>
Tue, 6 Oct 2020 19:40:30 +0000 (19:40 +0000)
committerFelix Geyer <fgeyer@debian.org>
Sun, 21 Feb 2021 17:18:35 +0000 (17:18 +0000)
The remapped root does not need access to this dir.
Having this owned by the remapped root opens the host up to an
uprivileged user on the host being able to escalate privileges.

While it would not be normal for the remapped UID to be used outside of
the container context, it could happen.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
(cherry picked from commit bfedd2725971303efb7a2fe5d6990317b381622f)
Signed-off-by: Tibor Vass <tibor@docker.com>
Gbp-Pq: Name cve-2021-21284-2.patch

engine/daemon/daemon.go

index c2887ce0d82b7a2abc21cfb18c3d20e4a0b0f4ed..be4e8d5d10cd70f7bd500a5294e4cfb03d32a6ca 100644 (file)
@@ -676,7 +676,7 @@ func NewDaemon(ctx context.Context, config *config.Config, pluginStore *plugin.S
        }
 
        // set up the tmpDir to use a canonical path
-       tmp, err := prepareTempDir(config.Root, rootIDs)
+       tmp, err := prepareTempDir(config.Root)
        if err != nil {
                return nil, fmt.Errorf("Unable to get the TempDir under %s: %s", config.Root, err)
        }
@@ -1209,7 +1209,7 @@ func (daemon *Daemon) Subnets() ([]net.IPNet, []net.IPNet) {
 // prepareTempDir prepares and returns the default directory to use
 // for temporary files.
 // If it doesn't exist, it is created. If it exists, its content is removed.
-func prepareTempDir(rootDir string, rootIdentity idtools.Identity) (string, error) {
+func prepareTempDir(rootDir string) (string, error) {
        var tmpDir string
        if tmpDir = os.Getenv("DOCKER_TMPDIR"); tmpDir == "" {
                tmpDir = filepath.Join(rootDir, "tmp")
@@ -1227,9 +1227,7 @@ func prepareTempDir(rootDir string, rootIdentity idtools.Identity) (string, erro
                        }
                }
        }
-       // We don't remove the content of tmpdir if it's not the default,
-       // it may hold things that do not belong to us.
-       return tmpDir, idtools.MkdirAllAndChown(tmpDir, 0700, rootIdentity)
+       return tmpDir, idtools.MkdirAllAndChown(tmpDir, 0700, idtools.CurrentIdentity())
 }
 
 func (daemon *Daemon) setGenericResources(conf *config.Config) error {