CVE-2026-105221 в Ubuntu: отключенная проверка TLS-сертификатов в пакете gist и защита OAuth-токенов

CVE: CVE-2026-105221
Продукт: Ubuntu
Дата публикации: 05.10.2026
Критичность: CRITICAL
CVSS: 9.1 (4.0)
EPSS: 0,18%; процентиль 6,74%
CISA KEV: нет подтверждения в каталоге CISA KEV

Краткое описание​


В RubyGem gist до версии 6.1.0 функция http_connection в файле lib/gist.rb задает режим VERIFY_NONE и полностью отключает проверку TLS-сертификата сервера. Атакующий на пути трафика (on-path) может предъявить любой сертификат, перехватить HTTPS-соединение с GitHub API и получить OAuth-токен и учетные данные жертвы, а затем читать и изменять её gists.

В Ubuntu уязвимый пакет gist присутствует в релизах от 16.04 LTS до 26.04 LTS. Ubuntu оценивает проблему как medium, тогда как CVSS v4.0 от VulnCheck даёт 9.1 (CRITICAL) из-за высоких показателей конфиденциальности и целостности.

Основные характеристики​


Суть риска: утилита gist отправляет запросы к GitHub API по HTTPS, но не проверяет подлинность сервера. Тот, кто контролирует сетевой путь между машиной и GitHub — оператор Wi-Fi, скомпрометированный шлюз — может подставить сервер и забрать OAuth-токен жертвы.

Ключевые параметры:

  • Тип ошибки: CWE-295 (improper certificate validation); код явно задает VERIFY_NONE.
  • CVSS v4.0: 9.1, CRITICAL, вектор CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N — атака по сети, высокая сложность эксплуатации, полная компрометация конфиденциальности и целостности данных GitHub API.
  • Оценка Ubuntu: medium — вендор учитывает условия эксплуатации, прежде всего необходимость позиции на сетевом пути.
  • EPSS: 0,178% (0.00178), процентиль 0.06743 — текущая вероятность эксплуатации оценивается как низкая.
  • CISA KEV: в переданных данных отсутствует; включение в каталог не подтверждено.

Какие продукты и версии затронуты​


Уязвим RubyGem gist всех версий до 6.1.0 (диапазон «introduced: 0» — уязвимы все ранние версии). В Ubuntu по данным OSV-записи UBUNTU-CVE-2026-105221 затронут исходный пакет gist в следующих релизах:

  • Ubuntu 16.04 LTS (xenial): gist 4.5.0-2
  • Ubuntu 18.04 LTS (bionic): gist 4.6.1-1
  • Ubuntu 20.04 LTS (focal): gist 5.0.0-4ubuntu1
  • Ubuntu 22.04 LTS (jammy): gist 6.0.0-2
  • Ubuntu 24.04 LTS (noble): gist 6.0.0-3
  • Ubuntu 26.04 LTS (resolute): gist 6.0.0-3build1

Поле availability для всех записей не заполнено, поэтому наличие исправленных сборок в репозиториях конкретных релизов по переданным данным однозначно не подтверждено — статус обновлений следует проверять на странице Ubuntu Security.

Причина уязвимости​


Причина — отключенная проверка сертификата сервера. В версии 6.0.0 код в lib/gist.rb (строки 466–468) при создании HTTP-соединения задает VERIFY_NONE для http_connection. SSL/TLS-контекст при этом принимает любой предъявленный сертификат: цепочка доверия, срок действия и соответствие имени хоста не проверяются.

Проверка сертификата — базовая гарантия TLS: клиент обязан убедиться, что соединяется именно с github.com, а не с подставным сервером. Отключив её, gist превращает защищенный канал в канал, который любой on-path атакующий может перехватить и расшифровать. Ошибка классифицируется как CWE-295.

Исправление внесено коммитом 07ccc1a6d46e9d36f0e85d0b1c5d795890ae6bcf в версии 6.1.0; обсуждение проблемы велось в issue #373 репозитория defunkt/gist.

Как работает атака​


Путь данных выглядит так: утилита gist формирует запросы к GitHub API (создание и чтение gists, аутентификация) и отправляет их по HTTPS. Внутри lib/gist.rb функция http_connection создает TLS-соединение с параметром VERIFY_NONE — клиентская сторона не проверяет сертификат сервера.

Атакующий, расположенный на сетевом пути (ARP-спуфинг в локальной сети, контроль точки доступа, компрометация прокси или шлюза), перехватывает исходящее соединение. Поскольку проверка отключена, он предъявляет жертве любой, в том числе самоподписанный, сертификат — клиент примет его без предупреждений. Соединение терминируется на стороне атакующего, и трафик становится виден ему в открытом виде.

Результат: через канал проходят OAuth-токен и учетные данные GitHub API. Атакующий может читать их, а также модифицировать запросы и ответы — например, подменять содержимое gists, которые создает или читает жертва. Доступность GitHub API при этом не нарушается (VA:N в векторе), ущерб концентрируется на конфиденциальности и целостности данных жертвы.

Условия успешной эксплуатации​


По описанию уязвимости для успешной эксплуатации необходимы:

  • Позиция на сетевом пути: возможность перехватывать трафик между машиной жертвы и GitHub (MITM-позиция). Это отражено в метрике AC:H — условие нетривиальное.
  • Уязвимая версия gist: RubyGem gist до 6.1.0, в котором http_connection задает VERIFY_NONE.
  • Использование утилиты в момент атаки: трафик с токеном и учетными данными должен фактически пройти через контролируемую точку.

Права в системе жертвы, предварительная аутентификация и взаимодействие пользователя не требуются (PR:N, UI:N). Требование AT:P дополнительно указывает на необходимость устойчивого удержания позиции перехвата.

Возможный сценарий атаки​


Защитный сценарий на основе описанной механики (не зафиксированный инцидент): атакующий в той же сети — например, в офисной Wi-Fi-сети или через скомпрометированный роутер — переводит трафик жертвы через себя. Пользователь запускает gist для публикации или чтения заметки на GitHub.

Клиент устанавливает HTTPS-соединение, но принимает подставной сертификат атакующего без предупреждений. Атакующий расшифровывает запрос, извлекает OAuth-токен и учетные данные GitHub, после чего может от имени жертвы читать и изменять её gists.

Токен GitHub может давать доступ и к другим ресурсам аккаунта, однако конкретный scope токена в переданных источниках не раскрыт — расширять вывод о последствиях за пределы gists оснований нет.

Есть ли публичный эксплойт​


В переданном пакете доказательств сведений о публичном PoC, готовом эксплойте или подтвержденной эксплуатации в реальных атаках нет. Advisory VulnCheck и записи NVD/Ubuntu описывают только техническую суть ошибки и уязвимый код.

Отсутствие данных об эксплойте не означает его отсутствия: механика MITM с отключенной проверкой сертификата хорошо известна, поэтому риск следует оценивать по условиям эксплуатации, а не по наличию публичного кода. CISA KEV в переданных данных отсутствует.

Признаки эксплуатации​


Специфичные IOC для этой уязвимости в переданных источниках не опубликованы: атака происходит на сетевом уровне и не оставляет следов в самой системе. Практически полезны только неспецифичные точки контроля:

  • журналы сетевого оборудования и прокси на предмет перехвата TLS-соединений к api.github.com;
  • предупреждения о смене сертификата или цепочки доверия для github.com в инфраструктуре;
  • нетипичная активность OAuth-токенов GitHub (неожиданные изменения gists, обращения с незнакомых адресов) — косвенный признак уже свершившейся компрометации токена, а не самой уязвимости.

Как обнаружить атаку​


Обнаружить уязвимую конфигурацию проще, чем саму атаку. На уровне хоста проверяется версия пакета gist (см. раздел проверки версии) и, при наличии исходников gem, факт VERIFY_NONE в lib/gist.rb.

На сетевом уровне контролируйте исходящие TLS-соединения к GitHub API: egress-фильтрация, обязательный выход через корпоративный прокси с проверкой, мониторинг аномалий сертификатов. Эти меры неспецифичны для CVE-2026-105221, но позволяют выявить MITM-условия, при которых уязвимость реализуема.

Для выявления последствий проверяйте журналы безопасности GitHub: обращения к аккаунту с незнакомых IP, изменения gists, которые не инициировал владелец. Если токен мог пройти через недоверенную сеть, его стоит отозвать превентивно.

Как проверить свою версию​


Проверьте релиз Ubuntu и версию установленного пакета gist:

bash
cat /etc/os-release
uname -r
apt-cache policy gist
ubuntu-security-status

Вывод apt-cache policy gist покажет установленную версию и доступную в репозитории. Сверьте её со списком затронутых версий: например, в Ubuntu 22.04 LTS уязвима 6.0.0-2, в 24.04 LTS — 6.0.0-3.

Утилита ubuntu-security-status дополнительно покажет статус поддержки пакета с точки зрения безопасности.

Исправление​


Полное устранение — обновление gist до версии 6.1.0 или выше, где проверка сертификата восстановлена (коммит 07ccc1a6d46e9d36f0e85d0b1c5d795890ae6bcf). В Ubuntu порядок действий:

  • обновите индекс пакетов: sudo apt update;
  • обновите пакет: sudo apt upgrade gist (или sudo apt install --only-upgrade gist);
  • если исправленная сборка для вашего релиза еще не опубликована, отслеживайте статус на странице Ubuntu Security — поле availability в переданных данных не подтверждает наличие исправлений для перечисленных релизов;
  • если пакет установлен как RubyGem вне apt, обновите его средствами gem до версии не ниже 6.1.0.

После обновления отзовите и перевыпустите OAuth-токены GitHub, которые могли использоваться через уязвимую версию, — они могли быть перехвачены ранее.

Временные меры защиты​


Если обновление пока недоступно, снизить риск можно организационными и сетевыми мерами (это защитные выводы, а не подтвержденные рекомендации вендора):

  • не использовать gist из недоверенных сетей — публичный Wi-Fi, гостевые сегменты, сети с неизвестным контролем пути;
  • выпускать трафик к GitHub только через доверенный контролируемый прокси или VPN-туннель, где MITM маловероятен;
  • ограничить scope OAuth-токенов, используемых утилитой, и хранить их так, чтобы перехват минимизировал ущерб;
  • временно удалить пакет, если функциональность не нужна: sudo apt remove gist.

Отключение проверки сертификата нельзя «смягчить» настройкой на стороне клиента — уязвимость в коде, поэтому сетевые ограничения остаются единственным временным барьером.

Как проверить устранение уязвимости​


После обновления убедитесь, что уязвимая версия ушла из системы:

bash
apt-cache policy gist

Установленная версия должна быть исправленной (6.1.0 или соответствующая сборка вашего релиза, если Ubuntu выпустила backport). Дополнительно:

  • проверьте ubuntu-security-status — пакет не должен числиться с известной уязвимостью;
  • при установке из gem выполните gem list gist и убедитесь, что активна версия не ниже 6.1.0;
  • зафиксируйте в журналах факт обновления и отзыва старых OAuth-токенов.

Вывод​


CVE-2026-105221 — пример того, как одна строка с VERIFY_NONE обесценивает весь TLS: формально трафик идет по HTTPS, фактически сервер не аутентифицирован. Для администратора Ubuntu практический вывод двоякий: проверить, установлен ли пакет gist и в какой версии, и оценить, проходит ли его трафик через доверенные сети.

Оценка Ubuntu «medium» отражает высокую сложность эксплуатации, но последствия — кража OAuth-токена GitHub — оправдывают приоритетное обновление до 6.1.0 или исправленной сборки дистрибутива и ротацию токенов, если уязвимая версия использовалась в недоверенных сетях.

Официальные источники​


  1. NVD — CVE-2026-105221
  2. Ubuntu OSV — CVE-2026-105221
  3. FIRST EPSS — CVE-2026-105221

История обновлений статьи​


  • 06.10.2026 — Опубликована первая версия материала.
  • 07.10.2026 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
 
Последнее редактирование:
Назад
Верх Низ