Исследователь безопасности Max Justicz, известный выявлением уязвимостей в репозиториях Packagist, NPM и RubyGems, опубликовал (https://justi.cz/security/2018/09/13/alpine-apk-rce.html) информацию о новой критической уязвимости в пакетном менеджере APK, применяемом в дистрибутиве Alpine Linux (используется по умолчанию для контейнеров Docker). Уязвимость несколько дней назад уже устранена (https://git.alpinelinux.org/cgit/apk-tools/commit/?id=6484ed...) в APK, а проект Alpine Linux выпустил (https://alpinelinux.org/posts/Alpine-3.8.1-released.html) обновление 3.8.1, в который включено данное исправление.
Атакующие, имеющие возможность совершить MITM-атаку или изменить пакеты на зеркале, могли подменить загружаемый пользователем apk-пакет и инициировать выполнение своего кода в системе c правами root. В Alpine Linux при доступе к штатным репозиториям по умолчанию не применяется TLS-шифрование канала связи, а используется только верификация целостности и источника пакета по цифровой подписи. К сожалению подобной проверки оказалось недостаточно, так как приводящая к уязвимости ошибка проявляется на стадии распаковки пакета, которая выполняется до проверки цифровой подписи.
Суть проблемы в том, что через манипуляцию с путями внутри пакета атакующие могут добиться распаковки непроверенного файла в системный каталог. Пакет apk представляет собой архив tar, при распаковке которого файлы поочерёдно извлекаются в корень с добавлением к имени окончания ".apk-new". В случае несовпадения проверочного хэша распакованные файлы удаляются. Проблема проявляется из-за ошибки при обработке символических ссылок.
Атакующий может создать в пакете ссылку с именем "link", указывающую, допустим, на файл "/etc/apk/commit_hooks.d/x". Данная ссылка будет распакована с временным именем "link.apk-new", но продолжит указывать на "/etc/apk/commit_hooks.d/x". Кроме символической ссылки в пакет можно поместить обычный файл тем же именем "link". Пакетный менеджер попытается сохранить его как "link.apk-new", но с данным именем уже присутствует символическая ссылка, что приведёт к созданию адресуемого через ссылку файла "/etc/apk/commit_hooks.d/x". Когда apk обнаружит несоответствие пакета проверочному хэшу, он удалит link.apk-new, но файл "/etc/apk/commit_hooks.d/x" останется в системе.
В итоге, злоумышленник может переписать любой файл, в том числе разместить скрипт в каталог /etc/apk/commit_hooks.d/, скрипты из которого вызываются перед завершением работы apk, что приведёт к выполнению кода до завершения обработки текущего пакета. Подобная особенность может использоваться для скрытия атаки. Изменив на лету память процесса apk через /proc/pid/mem, атакующий может добиться завершения apk всегда с нулевым кодом возврата, что позволяет успешно довести до конца процесс обновления или сборки Docker-контейнера и не вызвать подозрений.URL: https://justi.cz/security/2018/09/13/alpine-apk-rce.html
Новость: https://www.opennet.me/opennews/art.shtml?num=49273
Пользуюсь voidlinux, но рад, что дружественный проект исправил уязвимость.
кстати про voidlinux и уязвимости. Они до сих пор не переехали с гитхаба?
Да что-то они не в тренде.
Выполнить любой код в Alpine? Ммм, значит дистр, ориентированный на безопасность. :)
интересно, как в этом плане обстоят дела у apt/dnf/zypper
У dnf/zypper в их родной среде должно быть меньше проблем, так как rpm это не матрёшка из tgz/txz, а специфичный формат, содержащий подпись в заголовке и, если я правильно понял, подписывающей cpio-payload, а не файлики внутри по одному.
И собственно инвалидность подписи проверяется ещё до начала транзакции
> У dnf/zypper в их родной среде должно быть меньше проблем, так как
> rpm это не матрёшка из tgz/txz, а специфичный формат, содержащий подпись
> в заголовке и, если я правильно понял, подписывающей cpio-payload, а не
> файлики внутри по одному.Ещё бы тебе уяснить, что на подписи отдельных пакетов, если таковые вообще имеются, никто и никогда не смотрит, потому что достаточно один раз проверить подпись репозитория, а дальше уже просто сверять хеш пакета с проверенным. И это общий подход для дистров, что для deb, что для rpm.
Лучше. За годы развития их все-таки в целом отучили от детских болезней. Тот же apt+dpkg вообще ничего распаковывать не будет если подпись или хэш кривые. До этого дело просто не дойдет.
>интересно, как в этом плане обстоят дела у apt/dnf/zypperпредсказуемо хуже. Поиск по базе CVE в помощь.
> используется по умолчанию для контейнеров DockerКем используется?
Всеми используется
Есть статистика или лишь перднуть?
Перднуть. А разве не так?
в след раз почитай про сабж прежде, чем начнешь быковать.
Очень интересует, что употребляют люди, которые придумывают такие атаки, и можно ли эти вещества где-то купить без рецепта?
Ничего они не употребляют. Просто используют метод научного тыка, курят мануалы и комбинируют мелкие уязвимости в большие. Просто чуваки оч умные.
А говоришь - не употребляют. И тут же - курят... маны. )
> проект Alpine Linux выпустил обновление 3.8.1, в который включено данное исправление....которое загружается тем самым пакетным менеджером?
rm -rf /* init скрипт запихнуть.
Хорошая атака ничего не ломает и никак себя не выдает.
>> ошибка проявляется на стадии распаковки пакета, которая выполняется до проверки цифровой подписиЛ - логика. Распаковать и только потом проверять.
Это значит, что пакетные менеджеры следует разбивать на часть, которая принимает, распаковывает, проверяет КС и часть, которая на самом последнем этапе помещает прошедшие проверку файлы в ФС ОС. Первая часть должна перед началом работы сменить владельца процесса на какого-нибудь совсем бесправного пользователя.
> Это значит, что пакетные менеджеры следует разбивать на часть, которая принимает, распаковывает,
> проверяет КС и часть, которая на самом последнем этапе помещает прошедшие
> проверку файлы в ФС ОС. Первая часть должна перед началом работы
> сменить владельца процесса на какого-нибудь совсем бесправного пользователя.А почему нельзя сделать, чтобы системное дерево и файлы принадлежало пользователю типа rootfs?
Чтобы никто кроме rootfs и root не мог изменить файлы.
они и так руту принадлежат
...стукнули буквы с квэрти, это самая ужасная новость за пол ночи...