
Исправление ядра OpenVPN от upstream для CVE-2026-74727, протестированное на ядре Ubuntu 7.0.0-38.38. Включает инструкции по сборке и результаты функциональных тестов.
Документация локальной сборки, функциональных тестов, целевого обзора исходного кода и детерминированных регрессионных тестов инвариантов повторного хеширования VPN-IP и транспортных эндпоинтов для исправления из upstream, связанного с CVE-2026-74727, применительно к исходному пакету ядра Ubuntu linux 7.0.0-38.38 на x86_64. Тесты транспортных эндпоинтов также были пересобраны и запущены на локально собранном ядре Generic KASAN.
Это обзор бэкпорта существующего исправления из upstream, а не вновь обнаруженная уязвимость и не оригинальное исправление безопасности. Записанный автор upstream — Antonio Quartulli. Записанный коммит — 33ec10567fe14456063daf549fdf1a4f53448e4c.
Патч upstream: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/patch/?id=33ec10567fe14456063daf549fdf1a4f53448e4c
Изменение в drivers/net/ovpn/peer.c предотвращает повторное хеширование пира, который уже был удалён из хеш-таблицы идентификаторов пиров. При распространении сохраняйте оригинальные заголовки патча, авторство и лицензирование. Данная документация не меняет лицензию патча ядра.
Оригинальный патч upstream включён побайтово. Его SHA-256 совпадает с артефактом, использованным в записанной тестовой сессии. Его автор, сообщение коммита и изменения кода были сверены с публичным коммитом upstream на GitHub. Бинарные файлы не включены.
Контрольная сумма патча была независимо сверена с включённым файлом. Контрольная сумма модуля была записана во время тестовой сессии оператора; бинарный файл здесь не распространяется.
| Артефакт | SHA-256 |
|---|---|
CVE-2026-74727-upstream.patch | baf0962c60b182776a86e040d2ec5b35eea2737c2e2eb6f17f87eb7d2fe47b24 |
Протестированный ovpn.ko | 0853fdce14ce1c4d64857871dc873bf98a1b8fe8243bf042ad6daffc906e6d27 |
Используйте отдельную извлечённую копию точного исходного пакета Ubuntu linux 7.0.0-38.38. Сначала установите соответствующие заголовки ядра и инструментарий сборки. Записанный компилятор — Ubuntu GCC 15.2.0-16ubuntu1, соответствующий компилятору работающего ядра.
Из корня исходного кода, при размещении патча в родительском каталоге:
patch --dry-run --batch --forward --fuzz=0 -p1 < ../CVE-2026-74727-upstream.patch
patch --batch --forward --fuzz=0 -p1 < ../CVE-2026-74727-upstream.patch
make -C /lib/modules/7.0.0-38-generic/build \
M="$PWD/drivers/net/ovpn" CONFIG_OVPN=m \
CC=x86_64-linux-gnu-gcc -j1 modules
Записанное применение патча использовало нулевой fuzz со смещениями строк -6 и -5. Сборка вернула код выхода 0. Генерация BTF была пропущена, поскольку vmlinux был недоступен. Vermagic модуля совпал с 7.0.0-38-generic SMP preempt mod_unload modversions.
Совпадение vermagic и успешная сборка не доказывают, что модуль безопасен или что уязвимость полностью подтверждена.
Тесты выполнялись вручную на виртуальной машине Ubuntu в Hyper-V с ядром 7.0.0-38-generic и отключённой Secure Boot. Результаты основаны на выводе терминала, предоставленном оператором:
192.0.2.2 на 192.0.2.3; возвращённое состояние пира подтвердило изменение. Это было ограничено временным тестовым пространством имён и не изменило рабочий VPN-адрес.6 октября 2026 года два автономных тестовых модуля выполнили фактическую функцию ovpn_peer_hash_vpn_ip(), извлечённую из непатченной резервной копии и патченного исходного кода. Приватные синтетические объекты оставались выделенными на протяжении всего времени. После имитации завершённого удаления из хеш-таблиц тест вызвал функцию снова под ovpn->lock.
| Свойство | До патча | После патча |
|---|---|---|
| Активный пир внесён в таблицы IPv4 и IPv6 | PASS | PASS |
| Удалённый пир остаётся вне таблиц IPv4 и IPv6 | FAIL | PASS |
| Занятые корзины IPv4 / IPv6 после перехеширования удалённого пира | 1 / 1 | 0 / 0 |
Это проверка во время выполнения конкретного инварианта после удаления, а не воспроизведение гонки при конкурентном удалении или use-after-free. Нарушение инварианта в базовой версии ожидаемо и демонстрирует, что тест различает две версии функции. Оба модуля впоследствии были выгружены. Рабочий VPN оставался активным, его адрес не изменился. Проверенный интервал журнала содержал результаты тестов и не содержал совпадающих сообщений BUG, Oops, general protection fault или soft lockup.
См. TESTING.md для записанного вывода, инструкций по воспроизведению и ограничений. Генератор находится в tests/prepare-ovpn-rehash-regtest.py.
6 октября 2026 года автономные тестовые модули также выполнили фактическую функцию ovpn_peer_endpoints_update(), извлечённую из непатченных и патченных исходников, с производственными вспомогательными функциями привязки. Как для IPv4, так и для IPv6 приватные синтетические заголовки пакетов заставили активный пир выполнить float, а затем вызвали ещё одно обновление конечной точки после удаления его записей из хеш-таблиц, при этом его хранилище оставалось выделенным.
| Свойство, как для IPv4, так и для IPv6 | До патча | После патча |
|---|---|---|
| Активный пир выполняет float и остаётся в транспортной таблице | PASS | PASS |
| Обновление конечной точки достигается после смоделированного удаления | PASS | PASS |
| Удалённый пир остаётся вне транспортной таблицы | FAIL | PASS |
| Занятые транспортные корзины после обновления удалённого пира | 1 | 0 |
Пакеты не передавались, реальные интерфейсы, VPN-пиры или адреса не изменялись. Оба тестовых модуля были впоследствии выгружены; рабочий VPN оставался активным, его адрес не изменился. Проверенный интервал журнала содержал четыре результата тестов и не содержал совпадающих строк BUG, Oops, general protection fault или soft lockup.
См. FLOAT-TESTING.md и tests/prepare-ovpn-float-regtest.py для описания области охвата, инструкций по воспроизведению и записанных результатов.
06.10.2026 проверенный исходный код Ubuntu был собран как полное ядро с CONFIG_KASAN=y, CONFIG_KASAN_GENERIC=y, CONFIG_KASAN_OUTLINE=y и CONFIG_STACKTRACE=y. Строка релиза — 7.0.14-ovpn-kasan. Сборка ядра и модулей завершилась с кодом возврата 0. Виртуальная машина загрузилась с этим ядром, и её административная служба VPN была активна.