В сфере информационной безопасности фундаментальные компоненты инфраструктуры всегда находятся под пристальным вниманием исследователей. Когда речь заходит о языке программирования Python, используемом в веб-разработке, автоматизации, анализе данных и машинном обучении, обнаруженные в нём уязвимости приобретают критическую важность для миллионов разработчиков и компаний по всему миру. Недавно Python Software Foundation (PSF) опубликовала информацию о двух новых уязвимостях в эталонной реализации языка - CPython. Эти недостатки, хотя и получили средние баллы по шкале CVSS, затрагивают механизмы, которые могут быть использованы для обхода политик безопасности или нестандартной обработки данных, что в определённых сценариях создаёт существенные риски.
Детали уязвимостей
Первая уязвимость, получившая идентификатор CVE-2026-1502, была обнаружена в HTTP-клиенте стандартной библиотеки. Проблема заключается в том, что заголовки или хост, используемые при установке туннеля через HTTP-прокси, не проверялись на наличие специальных управляющих символов CR (возврат каретки) и LF (перевод строки). На техническом уровне это классический пример инъекции, когда злоумышленник может внедрить в заголовки HTTP эти символы, чтобы изменить логику обработки запроса на стороне сервера или самого прокси-сервера. Такая атака известна как "HTTP Request/Response Smuggling" (подмена HTTP-запросов или ответов) и может привести к обходу политик безопасности, кешированию конфиденциальных данных на промежуточных прокси или даже к компрометации внутренних систем, которые считаются защищёнными. Уязвимость затрагивает все версии CPython, выпущенные до версии 3.15.0.
Вторая проблема, CVE-2026-3446, связана с модулем "base64", отвечающим за кодирование и декодирование данных в формате Base64. По умолчанию функция "base64.b64decode()" и связанные с ней функции прекращают декодирование сразу после обработки первого завершённого блока данных (так называемого "padded quad"), игнорируя возможные последующие данные. Это поведение отклоняется от строгой спецификации RFC и может привести к тому, что вредоносные или специально сформированные данные будут обработаны некорректно. Если одна система (например, написанная на Python) принимает такие "обрезанные" данные, а другая (использующая иную библиотеку) обрабатывает их полностью, возникает рассинхронизация. Это может быть использовано для создания условий, при которых данные интерпретируются по-разному, что является основой для атак, направленных на логику приложения. Уязвимость затрагивает версии CPython до 3.13.13, с 3.14.0 до 3.14.4, а также альфа-версии 3.15.0 до 3.15.0a8.
С точки зрения экспертизы, обе уязвимости являются следствием недостаточно строгой валидации входящих данных - принципа, который лежит в основе большинства современных уязвимостей. Проблема с HTTP-клиентом демонстрирует, как даже в зрелых и широко используемых библиотеках могут оставаться классические векторы атак, связанные с неправильной обработкой границ и управляющих символов. Между тем уязвимость в Base64 подчёркивает важность строгого соответствия стандартам в межсистемном взаимодействии. Разработчики Python Software Foundation уже предоставили простое решение для второй проблемы: использование параметра "validate=True" в функции "base64.b64decode()" включает более строгий режим обработки, который отклоняет некорректные данные.
Последствия эксплуатации этих уязвимостей сильно зависят от контекста использования Python. В сценариях, где приложение активно взаимодействует с внешними HTTP-прокси или обрабатывает данные Base64 из ненадёжных источников (например, загружаемые пользователями файлы, токены аутентификации, данные API), риски возрастают. Атака на HTTP-клиент может позволить злоумышленнику, контролирующему трафик или способному внедрить данные в запрос, обойти межсетевые экраны или системы контроля доступа (WAF), построенные на анализе HTTP-заголовков. Уязвимость в Base64 может быть использована в сложных цепочках атак, например, для подмены токенов сессии или манипуляции данными конфигурации, если несколько систем в инфраструктуре по-разному их интерпретируют.
В качестве рекомендаций, прежде всего, необходимо обновить CPython до исправленных версий: 3.15.0 или новее для устранения CVE-2026-1502 и версий 3.13.13, 3.14.4 или новее для устранения CVE-2026-3446. Для систем, где немедленное обновление невозможно, следует рассмотреть применение временных мер. В случае с HTTP-клиентом это может быть дополнительная проверка и санация (очистка) URL и заголовков прокси перед их использованием. Для работы с Base64 критически важно пересмотреть код и везде, где это допустимо по логике приложения, добавить параметр "validate=True" при вызове функций декодирования. Кроме того, специалистам по безопасности стоит обратить внимание на события в системах мониторинга (SIEM), которые могут указывать на попытки инъекции CR/LF в HTTP-заголовки или аномалии в обработке данных Base64. Данный инцидент ещё раз напоминает, что даже самые надёжные и проверенные временем компоненты требуют постоянного внимания и своевременного применения обновлений безопасности.
Ссылки
- https://www.cve.org/CVERecord?id=CVE-2026-3446
- https://www.cve.org/CVERecord?id=CVE-2026-1502
- https://mail.python.org/archives/list/security-announce@python.org/thread/2IVPAEQWUJBCTQZEJEVTYCIKSMQPGRZ3/
- https://mail.python.org/archives/list/security-announce@python.org/thread/F5ZT5ICGJ6CKXVUJ34YBVY7WOZ5SHG53/
- https://github.com/python/cpython/pull/146212
- https://github.com/python/cpython/pull/145267
- https://github.com/python/cpython/issues/146211
- https://github.com/python/cpython/issues/145264