В экосистеме 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 опасен?
Вот простой пример атаки:
Если злоумышленник передаст вам 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 <название_пакета>
Предвосхищаю боль разработчиков/тестировщиков касаемо несовместимости разных версий библиотек. (Я имею ввиду, что если вы возьмете и "бездумно" обновите все используемые библиотеки в вашем проекте, то скорее всего ваше приложение перестанет запускаться.) Ну да. Это ваша/наша боль.
Простая задачка по криптографии
Добавил новый раздел в статьи, чтобы было чуть интереснее.
Предлагаю расшифровать цитату Леонарда Эйлера
ма-зиатэыртиткоекопдмаяры
Пишите решение (цитату) в комментариях.
Подсказка:
Вывод
Любая библиотека может содержать уязвимости, особенно если она не обновляется. Чтобы минимизировать риски:
- Всегда используйте актуальные версии зависимостей.
- Проверяйте пакеты на уязвимости (pip-audit, safety).
- Не загружайте и не выполняйте данные из ненадёжных источников.
Если у вас есть конкретные библиотеки, которые вызывают подозрения, можно проверить их на сайте CVE Details или National Vulnerability Database (NVD).
Поддержать блог можно лайком и комментарием. А если хочется сделать больше, можно кинуть монетку на кофе.
Раз вы прочитали эту статью, скорее всего вам будет интересен весь раздел про Анонимность в сети, а также Инструменты хакера / пентестера
Если Вам интересно, что еще можно найти на канале QA Helper, прочитайте статью: Вместо оглавления. Что вы найдете на канале QA Helper - справочник тестировщика?
Не забудьте подписаться на канал, чтобы не пропустить полезную информацию: QA Helper - справочник тестировщика
Пишите в комментариях что еще было бы интересно рассмотреть более подробно.