Как защититься от Dependency Confusion в PHP
На прошлой неделе была нашумевшая статья «Dependency Confusion: How I Hacked Into Apple, Microsoft and Dozens of Other Companies», в которой автор рассказал, как использовал npm (Javascript), pip (Python) и gem (Ruby), чтобы заставить компании установить и запустить в своей инфраструктуре зловредный код.
Проблема сводится к тому, что компании ссылаются на внутренние пакеты по имени, например my-internal-package
, а злоумышленник публикует в центральном реестре/репозитории пакетов языка (для PHP это packagist.org) пакет с таким же названием my-internal-package
, имеющий более высокую версию.
После этого компании устанавливали и выполняли эти зловредные пакеты вместо своих внутренних пакетов, потому что их диспетчер пакетов выбирал версию с более высоким номером из стандартного репозитория пакетов вместо внутреннего репозитория.
Авторы Composer, Джорди и Нильс, написали о том, как защититься от подобного.
Также есть утилитка Confused, которая проверяет безопасны ли имена внутренних пакетов или любой желающий может зарегистрировать их.