
Доказательство концепции для CVE-2020-15257 в containerd.
Этот репозиторий содержит код эксплойта для CVE-2020-15257, как описано в нашем блоге. Хотя он написан для containerd 1.2.x и 1.3.x, он должен работать на версиях containerd 1.4.x до применения патча.
$ go build
$ docker build -t abstractshimmer .
$ docker run --rm -d --network host abstractshimmer | xargs docker logs -f
$ cat /tmp/shimmer.out
$ cat /tmp/shimmer.binary
$ # or, for containerd 1.2.x
$ cat /etc/crontab
Примечание: Этот эксплойт оставит Docker/containerd в несколько нерабочем состоянии. После его выполнения останется зависший containerd-shim и контейнер Docker, которые необходимо будет убить и принудительно удалить соответственно (docker rm --force) для полной очистки. В каталогах /var/lib/containerd/io.containerd.runtime.v1.linux/moby/ и /run/containerd/io.containerd.runtime.v1.linux/moby/ также останутся некоторые остатки. Кроме того, данный эксплойт не пытается согласовать файлы address containerd. Это может привести к проблемам: при попытке обновить уязвимую систему после эксплуатации эксплойта Docker/containerd могут не перезапуститься чисто и/или не видеть существующие контейнеры. Если вы наблюдаете это при обновлении пакета containerd, это может быть индикатором того, что система была ранее скомпрометирована какой-либо вариацией этого эксплойта.