Код:
[decompress] -> [tarsum] -> [unpack]
Это производительное, но небезопасное решение. Ненадёжный ввод не должен обрабатываться пока не пройдёт проверка контрольной суммы, здесь же обработка происходит трижды. Docker поддерживает три алгоритма: gzip, bzip2 и xz. Первые два — стандартные реализации Go и защищены от доступа к памяти. Максимум, что возможно — это DoS-атака. Для декомпрессии xz вызывается внешняя библиотека из состава XZ Utils. Она написана на C и не обеспечивает безопасного доступа к памяти, при этом Docker выполняет xz от root. Поэтому здесь можно ожидать выполнение произвольного кода и даже компрометации всей системы. На втором шаге потенциальные угрозы могут привести к отказу обслуживания (DoS) и логическим ошибкам, что позволит вмешиваться в файлы, изменять их, пропускать, обрабатывать по-разному и всё это без изменения контрольной суммы. На последнем этапе уже выявлены две уязвимости: CVE-2014-6407 и CVE-2014-9357. Более подробный разбор и анализ потенциальных угроз, связанных с платформой Docker опубликован в блоге Джонатана Руденберга.
оригинал на www.nixp.ru