В APT найдена уязвимость, позволяющая подменить пакеты при загрузке по HTTP. Обычно APT проверяет хеши пакетов и их размер по базе метаданных доверенных пакетов, заверенных цифровой подписью. Однако, как оказалось, данную проверку можно обойти. Конечно, у взломщика должен быть доступ к потоку HTTP-трафика.
Для загрузки данных из репозитория APT запускает дочерний процесс. Взаимодействие между родительским и дочерним процессом происходит с помощью обмена текстовыми командами и данными. Когда загрузка завершена, дочерний процесс отправляет сообщение с уже посчитанными хешами и размером пакета подобное такому: 201 URI Done URI: http://deb.debian.org/debian/pool/main/c/cowsay/cowsay3.03+dfsg2-3all.deb Filename: /var/cache/apt/archives/partial/cowsay3.03+dfsg2-3all.deb Size: 20070 Last-Modified: Tue, 17 Jan 2017 18:05:21 +0000 MD5-Hash: 27967ddb76b2c394a0714480b7072ab3 MD5Sum-Hash: 27967ddb76b2c394a0714480b7072ab3 SHA256-Hash: 858d5116a60ba2acef9f30e08c057ab18b1bd6df5ca61c233b6b7492fbf6b831 Checksum-FileSize-Hash: 20070
И значение New-URI тут берется из заголовка Location редиректа HTTP. В нем то и присутствует уязвимость - в него можно включать переносы строк, что позволяет полностью подделать сообщение об успешной загрузке и все хеши в нем. Родительский процесс будет полагаться на эти значения хешей и размера пакета при проверке, хотя по факту был загружен совсем другой пакет.
Проблема получила идентификатор CVE-2019-3462 и исправлена в версии 1.4.9 APT. Обновленная версия уже доступна в репозиториях Ubuntu и Debian.