Найти в Дзене

Опасные зависимости: какие библиотеки в Python могут вас подставить?

Оглавление

В экосистеме Python, как и в любом другом языке программирования, время от времени обнаруживаются уязвимости в различных библиотеках. Некоторые из них могут представлять серьёзную угрозу безопасности, особенно если используются в веб-приложениях, криптографии или обработке пользовательских данных.

Подписывайтесь на мой канал в Телеграмм, чтобы ничего не пропустить.

Ну или на канал в VK, если хотите видеть новые статьи у себя в ленте.

Предвосхищая вопрос "что за CVE?", пишу:
CVE (Common Vulnerabilities and Exposures) — это база данных известных уязвимостей в программном обеспечении. Каждой уязвимости присваивается уникальный идентификатор в формате CVE-ГОД-Номер (например, CVE-2023-12345).

Эта база данных используется специалистами по кибербезопасности и разработчиками для отслеживания и исправления уязвимостей. Информацию о CVE можно найти в National Vulnerability Database (NVD) или на CVE Details.

Примеры уязвимых библиотек в Python:

1. PyYAML

  • Уязвимость: Позволяет выполнение произвольного кода при загрузке небезопасных YAML-файлов с помощью yaml.load() вместо yaml.safe_load().
  • Решение: Использовать safe_load() вместо load().

2. requests (устаревшие версии)

  • Уязвимость: Проблемы с обработкой SSL-сертификатов, возможны атаки типа "Man-in-the-Middle".
  • Решение: Обновить до последней версии.

3. Django (устаревшие версии)

  • Уязвимость: Различные уязвимости, включая XSS, SQL-инъекции и CSRF-атаки.
  • Решение: Всегда использовать актуальные версии Django.

4. Flask (устаревшие версии)

  • Уязвимость: Возможны проблемы с обработкой cookies и CSRF-защиты.
  • Решение: Обновить до последней версии.

5. cryptography (устаревшие версии)

  • Уязвимость: Ошибки в реализации криптографических алгоритмов могут привести к компрометации данных.
  • Решение: Использовать актуальные версии.

6. NumPy (устаревшие версии)

  • Уязвимость: Ошибки в обработке буферов могут привести к утечке данных или переполнению буфера.
  • Решение: Обновлять до последних версий.

7. pickle (встроенный модуль Python)

  • Уязвимость: Позволяет выполнение произвольного кода при загрузке небезопасных данных.

На данный момент у pickle (встроенного модуля Python) нет зарегистрированных CVE, потому что это не уязвимость самой библиотеки, а особенность её работы.

Однако pickle опасен, потому что он позволяет выполнять произвольный код при десериализации данных. Это значит, что если злоумышленник передаст вам вредоносный pickle-файл, он сможет выполнить любой код на вашей машине.

Почему pickle опасен?

Вот простой пример атаки:

-2

Если злоумышленник передаст вам pickle-файл, содержащий вредоносный объект, он сможет выполнять команды на сервере.

  • Решение:

1) Не использовать pickle для загрузки данных, если источник ненадёжный.

2) Если нужно сериализовать/десериализовать данные, лучше использовать безопасные альтернативы:

json (если данные простые)

marshal (если не требуется совместимость между версиями Python)

msgpack или protobuf для структурированных данных

8. Jinja2 (шаблонизатор для Flask/Django)

  • Уязвимость: Возможность выполнения произвольного кода при некорректной фильтрации пользовательского ввода.
  • Решение: Использовать актуальные версии и избегать небезопасных конструкций в шаблонах.

9. Pillow (обработка изображений)

  • Уязвимость: Переполнение буфера, возможность выполнения кода при обработке специально подготовленных изображений.
  • Решение: Обновлять до последних версий.

10. Paramiko (SSH для Python)

  • Уязвимость: Возможность атаки "Man-in-the-Middle" из-за слабой проверки хост-ключей.
  • Решение: Явно указывать проверку хост-ключей.

11. TensorFlow (машинное обучение)

  • Уязвимость: Ошибки в обработке входных данных, которые могут привести к отказу в обслуживании (DoS).
  • Решение: Обновлять TensorFlow и проверять входные данные.

12. PyJWT (работа с JSON Web Tokens)

  • Уязвимость: Ошибки в проверке подписей JWT-токенов, что может привести к подделке токена.
  • Решение: Использовать безопасные алгоритмы подписей и актуальные версии.

13. Twisted (асинхронные сети)

  • Уязвимость: Возможность удалённого выполнения кода при обработке специально подготовленных данных.
  • Решение: Обновлять Twisted и ограничивать доступ к сервисам.

Как проверить уязвимости в установленных библиотеках?

Можно использовать pip-audit, который автоматически анализирует зависимости и сообщает о найденных уязвимостях:

pip install pip-audit
pip-audit

Также полезно:

pip list --outdated

и обновлять пакеты с помощью:

pip install --upgrade <название_пакета>

Предвосхищаю боль разработчиков/тестировщиков касаемо несовместимости разных версий библиотек. (Я имею ввиду, что если вы возьмете и "бездумно" обновите все используемые библиотеки в вашем проекте, то скорее всего ваше приложение перестанет запускаться.) Ну да. Это ваша/наша боль.

Простая задачка по криптографии

Добавил новый раздел в статьи, чтобы было чуть интереснее.

Предлагаю расшифровать цитату Леонарда Эйлера

ма-зиатэыртиткоекопдмаяры

Пишите решение (цитату) в комментариях.

Подсказка:

-3

Вывод

Любая библиотека может содержать уязвимости, особенно если она не обновляется. Чтобы минимизировать риски:

  • Всегда используйте актуальные версии зависимостей.
  • Проверяйте пакеты на уязвимости (pip-audit, safety).
  • Не загружайте и не выполняйте данные из ненадёжных источников.

Если у вас есть конкретные библиотеки, которые вызывают подозрения, можно проверить их на сайте CVE Details или National Vulnerability Database (NVD).

Поддержать блог можно лайком и комментарием. А если хочется сделать больше, можно кинуть монетку на кофе.

Раз вы прочитали эту статью, скорее всего вам будет интересен весь раздел про Анонимность в сети, а также Инструменты хакера / пентестера

Если Вам интересно, что еще можно найти на канале QA Helper, прочитайте статью: Вместо оглавления. Что вы найдете на канале QA Helper - справочник тестировщика?

Не забудьте подписаться на канал, чтобы не пропустить полезную информацию: QA Helper - справочник тестировщика

Пишите в комментариях что еще было бы интересно рассмотреть более подробно.

-4