
В этом документе подробно рассматривается уязвимость Pipenv (CVE-2022-21668). В следующих разделах описан ошибочный код в файле pipenv/utils.py, который открывает двери для различных RCE-атак, а также недавнее исправление, которое проверяет SSL/TLS-соединение и сверяет имя хоста со списком доверенных хостов.
Pipenv Pipenv — это инструмент, который автоматически создаёт и управляет виртуальным окружением (virtualenv) для ваших проектов, а также добавляет/удаляет пакеты в вашем Pipfile при установке или удалении пакетов.
Более подробную информацию см. здесь
Файл requirements.txt необходим при работе со сложными системами. Этот текстовый файл также полезен, когда нужно перенести приложение в другое окружение. В нём перечислены все пакеты/зависимости, необходимые для успешного запуска приложения, вместе с их номерами версий.
Пример файла requirements.txt:
Источник изображения: https://www.idkrtm.com/what-is-the-python-requirements-txt/
Если у нас нет файла requirements.txt, то перенести приложение в другую систему может быть невозможно, так как могут возникнуть проблемы совместимости между версиями пакетов.
Начиная с версии Pipenv 2018.10.9 и до версии 2022.1.8 ошибка в разборе pipenv файлов requirements позволяет атакующему вставить специально сформированную строку в комментарий в любом месте файла requirements.txt, из-за чего жертвы, использующие pipenv для установки файла requirements, будут загружать зависимости с сервера индекса пакетов, контролируемого атакующим. RCE-атака вполне осуществима против таких крайне уязвимых систем.
cvedetails оценивает эту уязвимость как критическую / серьёзную.
CVSS-оценка от cvedetails:
(Источник: https://www.cvedetails.com/cve/CVE-2022-21668/)
Эта функция вызывается итеративно для каждой строки файла requirements и использует модуль argparse для поиска и обработки опций --index-url, --extra-index-url и --trusted-host.
Однако она не игнорирует эти опции, когда они встречаются в комментариях. Проблема кода в том, что он разбирает строки, начинающиеся с "--index-url, --extra-index-url и --trusted-host", в любом месте файла. Это делает его более уязвимым.
Для получения дополнительной информации нажмите здесь
Атаки с удалённым выполнением кода (RCE) позволяют атакующему удалённо выполнять вредоносный код на компьютере. Последствия уязвимости RCE могут варьироваться от выполнения вредоносного ПО до получения атакующим полного контроля над скомпрометированной машиной.
Если атакующему удастся скрыть вредоносную опцию --index-url в файле requirements, который жертва устанавливает с помощью pipenv, он сможет встроить произвольный вредоносный код в пакеты, обслуживаемые его вредоносным индексным сервером. Этот код будет выполнен на хосте жертвы во время установки (удалённое выполнение кода/RCE). Эксплуатация с помощью этой техники была бы относительно простой для атакующего с базовыми знаниями Python: он может просто собрать дистрибутив исходного кода для любого из пакетов, указанных в файле requirements, и встроить произвольный вредоносный код в файл setup.py. Когда pip устанавливает из дистрибутива исходного кода, любой код в setup.py выполняется процессом установки.
Более подробно нажмите здесь
Начиная с версии 2022.1.8 эта проблема исправлена. В файл pipenv/utils.py добавлена новая функция “get_host_and_port(url)”. Эта функция получает хост и порт URL-адреса, указанного в файле requirements.txt. Полученный адрес хоста разбирается с помощью urllib3, который внутренне проверяет SSL/TLS-соединение. Адрес хоста также сверяется со списком доверенных адресов хостов.
Дополнительная информация здесь
Базовые атаки могут использовать первоначальное RCE, срабатывающее при установке жертвой вредоносного пакета атакующего, чтобы похитить учётные данные с хоста жертвы, использовать ресурсы хоста для майнинга криптовалюты или установить эксплойт-киты и другие вредоносные программы. Более искушённые атакующие могут применять более продвинутые методы для сохранения доступа к хосту жертвы, скрытия или удаления следов атаки путём удаления ссылок на вредоносный индексный сервер в Pipfile и Pipfile.lock, созданных pipenv, а также других потенциальных индикаторов компрометации. Высококвалифицированные атакующие могут попытаться переключиться на дополнительные цели с первоначально скомпрометированного хоста и могут использовать раскрытые учётные данные в среде скомпрометированного хоста или неявные разрешения, предоставленные хосту, для получения привилегированного доступа к другим системам или ресурсам, таким как репозитории исходного кода или реестры пакетов. (Источник: https://github.com/pypa/pipenv/security/advisories/GHSA-qc9x-gjcv-465w)
Ошибка разбора, из-за которой комментарии обрабатываются неправильно, привела к критической уязвимости.
Пункт списка При наличии такой уязвимости даже настройка вредоносного индексного сервера для обслуживания скомпрометированных версий пакетов относительно проста, даже для неискушённого атакующего.