В Банке данных угроз безопасности информации (BDU) появилась запись о новой критической ошибке в эталонной реализации языка Python - CPython. Уязвимость получила идентификаторы BDU:2026-05838 и CVE-2026-6100. Она связана с опасным поведением встроенной функции bytes.decode(). По шкале CVSS 4.0 ей присвоена оценка 9,1 - критический уровень опасности. Это означает, что злоумышленник, действующий удалённо, может вызвать отказ в обслуживании или, в худшем сценарии, получить доступ к конфиденциальным данным и нарушить их целостность.
Детали уязвимости
Python уже много лет остаётся одним из самых популярных языков программирования. Его применяют в веб-разработке, автоматизации, аналитике данных, машинном обучении и, конечно, в инфраструктурных решениях. CPython - основная реализация языка, которая используется по умолчанию в большинстве дистрибутивов Linux, на серверах и в облачных средах. Уязвимость в такой фундаментальной библиотеке, как bytes.decode(), затрагивает миллионы приложений. Поэтому за новостью стоит внимательно следить любому специалисту, отвечающему за защиту информационных систем.
Согласно данным BDU, проблема обнаружена в функциях bytes.decode(), отвечающей за преобразование байтовых строк в текстовые представления. Ошибка относится сразу к двум категориям: CWE-416 (использование памяти после её освобождения) и CWE-787 (запись за границами буфера). Проще говоря, при обработке определённых входных данных интерпретатор может обратиться к участку памяти, который уже был освобождён, или записать данные туда, куда не следовало.
Уязвимость подтверждена производителем, то есть разработчиками Python Software Foundation. Она затрагивает версии CPython 3.10, 3.11, 3.12, 3.13 и 3.14. При этом для атаки не требуется аутентификация или взаимодействие с пользователем. Достаточно, чтобы целевая система обрабатывала специально сформированные данные через вызов bytes.decode(). Вектор атаки - удалённый, то есть злоумышленник может отправить вредоносный пакет данных на сервер, и уязвимость будет эксплуатироваться автоматически.
По шкале CVSS 2.0 базовая оценка составила 7,1 (высокий уровень), по CVSS 3.1 - 8,7 (высокий), а по свежей версии CVSS 4.0 - 9,1 (критический). Такая разница объясняется тем, что четвёртая версия более строго оценивает ущерб для конфиденциальности и целостности. Оценка доступности (VA) в векторе CVSS 4.0 указана как "недоступен" - это значит, что атака не только нарушает работу сервиса, но и может привести к искажению или утечке данных.
Функция bytes.decode() - один из самых частых инструментов при работе с текстовыми данными в Python. Когда программа получает байтовую строку (например, из сети или из файла), она преобразует её в обычную строку, используя указанную кодировку. Ошибка в CPython возникает на этапе управления памятью. Из-за неправильного освобождения буфера злоумышленник может подставить такой набор байтов, который заставит интерпретатор обратиться к уже освобождённому участку памяти. Эта ситуация называется "использование после освобождения".
В первую очередь под ударом оказываются веб-серверы, которые обрабатывают запросы пользователей. Любое API, написанное на Python и принимающее данные в байтовом формате, может быть уязвимо. Также опасность грозит системам аналитики, роботам автоматизации, инструментам для работы с протоколами (HTTP, FTP, SMTP). Не стоит сбрасывать со счетов и контейнерные среды: образы Docker, в которых используется версия CPython без исправления, также уязвимы.
Особенно тревожно, что оценка CVSS 4.0 подчёркивает возможность полной потери конфиденциальности и целостности. Это значит, что в случае успешной атаки злоумышленник может не только вывести систему из строя, но и украсть или изменить критически важные данные. Для организаций, обрабатывающих персональные данные или платёжную информацию, такой сценарий может обернуться серьёзными финансовыми и репутационными потерями.
Разработчики CPython оперативно выпустили исправления. В открытом репозитории github.com/python/cpython опубликованы пять коммитов, закрывающих уязвимость. Патчи затронули все уязвимые версии: 3.10, 3.11, 3.12, 3.13 и 3.14. Рекомендуемый способ устранения - обновление до последних стабильных выпусков, в которых ошибка уже не воспроизводится.
Для специалистов по информационной безопасности и администраторов систем первоочередная задача - провести инвентаризацию всех сред, использующих CPython. Важно проверить версии интерпретатора как на физических серверах, так и в контейнерных образах. Если ваш проект зависит от сторонних библиотек, которые могут вызывать bytes.decode() с внешними данными, необходимо удостовериться, что все зависимости тоже обновлены. Кроме того, стоит обратить внимание на системы непрерывной интеграции и развёртывания (CI/CD) - они часто используют Python для автоматизации и могут быть атакованы через входящие артефакты.
В условиях, когда эксплойт пока не опубликован, у администраторов есть небольшой запас времени, чтобы установить патчи раньше, чем их начнут использовать злоумышленники. Пренебрегать этой возможностью не стоит: история показывает, что критические уязвимости в популярных интерпретаторах быстро становятся мишенью для массовых атак.
Уязвимость в функции bytes.decode() CPython - серьёзный сигнал для всего сообщества разработчиков и защитников. Даже при отсутствии готовых эксплойтов высокая оценка CVSS и простота удалённой эксплуатации делают её приоритетной для закрытия. Каждый, кто использует Python в своей инфраструктуре, должен в ближайшее время обновить интерпретатор до исправленной версии. Это единственный способ избежать последствий - от отказа в обслуживании до утечки конфиденциальных данных. Промедление в данном случае может стоить бизнесу не только простоев, но и доверия клиентов.
Ссылки
- https://bdu.fstec.ru/vul/2026-05838
- https://www.cve.org/CVERecord?id=CVE-2026-6100
- https://github.com/python/cpython/issues/148395
- https://github.com/python/cpython/commit/47128e64f98c3a20271138a98c2922bea2a3ee0e
- https://github.com/python/cpython/commit/6a5f79c8d7bbf22b083b240910c7a8781a59437d
- https://github.com/python/cpython/commit/8fc66aef6d7b3ae58f43f5c66f9366cc8cbbfcd2
- https://github.com/python/cpython/commit/c3cf71c3366fe49acb776a639405c0eea6169c20
- https://github.com/python/cpython/commit/e20c6c9667c99ecaab96e1a2b3767082841ffc8b