Безопасность и выполнение произвольного кода внутри файлов `.pth` - PullRequest
0 голосов
/ 16 октября 2018

Глубоко читая документацию Python site.py , я обнаружил это в отношении .pth файлов:

Пустые строки и строки, начинающиеся с #, пропускаются.Строки, начинающиеся с импорта (после пробела или табуляции), выполняются.

Эти два предложения легко пропустить.Они находятся в конце длинного абзаца, означающего, что сканирующие глаза легко пропустят их.Я скучал по ним даже тогда, когда активно искал их.

Пример выполнения кода взят из python3.6/site-packages/virtualenvwrapper-4.8.2-py2.7-nspkg.pth:

import sys, types, os;has_mfs = sys.version_info > (3, 5);p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('virtualenvwrapper',));importlib = has_mfs and __import__('importlib.util');has_mfs and __import__('importlib.machinery');m = has_mfs and sys.modules.setdefault('virtualenvwrapper', importlib.util.module_from_spec(importlib.machinery.PathFinder.find_spec('virtualenvwrapper', [os.path.dirname(p)])));m = m or sys.modules.setdefault('virtualenvwrapper', types.ModuleType('virtualenvwrapper'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p)

Какова цель разрешенияВыполнение произвольного кода внутри .pth файлов?

Каковы наилучшие методы проверки или защиты файлов .pth, учитывая, что выполнение произвольного кода может иметь широкий отрицательный эффект?

1 Ответ

0 голосов
/ 16 октября 2018

Какова цель разрешения произвольного выполнения кода внутри .pth файлов?

Это позволяет пакетам конфигурировать sys.path с использованием кода.Это может быть использовано для условного ветвления, например, настройки для конкретной платформы.

Каковы наилучшие методы проверки или защиты файлов .pth, учитывая, что выполнение произвольного кода может иметь широкий отрицательный эффект?

Так же, как всегда - знайте, что вы устанавливаете.Использование pip install somepackage уже разрешает выполнение произвольного кода, setup.py выполняется как код.Таким образом, в действительности нет никакой дополнительной уязвимости или возможности скрыть код внутри файла .pth.

В последнее время обсуждалась возможность отмены и удаления .pth хаков в будущем (Python 3.8+),подробнее см. Issue33944 .

...