Рекомендуем
VeoSeeBot — нейросети прямо в Telegram Создавайте изображения, видео и тексты с помощью ИИ. Популярные нейросети в одном Telegram-боте.
Открыть бот

3proxy 1.0.3 устранил переполнения памяти в RADIUS и обратном DNS

7 ноября 2026 года вышел 3proxy 1.0.3 с исправлениями ошибок, которые затрагивали проверку ответов RADIUS и обработку обратных DNS-записей. Обновление также устраняет сбои при одновременной проверке правил PCRE, улучшает работу TLS-соединений и вводит отдельный параметр -B для разделения TLS ClientHello по полю SNI.

3proxy 1.0.3
3proxy 1.0.3

Ответ RADIUS мог повредить память ещё до проверки подлинности

В 3proxy обнаружили ошибку при обработке ответов сервера RADIUS — системы, которую администраторы могут использовать для централизованной проверки доступа к прокси. Прежде программа вычисляла контрольное значение ответа, дописывая общий секрет RADIUS непосредственно после полученных данных. Если ответ занимал 4100 байт, а длина секрета составляла не менее 17 символов, операция могла записать до 47 байт за пределами буфера в стеке процесса.

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

В 1.0.3 контрольное значение вычисляется без записи секрета за границами полученного ответа. Разработчики одновременно ужесточили проверку пакета: теперь учитываются IP-адрес и порт RADIUS-сервера, которому направлялся запрос, а также идентификатор и длина ответа. Раньше эти параметры проверялись неполностью.

Таким образом, исправление касается как работы с памятью, так и сопоставления ответа с исходным запросом на авторизацию. Для конфигураций с RADIUS это два отдельных аспекта одной проблемы.

Обратный DNS допускал выход за границы буфера при разборе PTR

Второе исправление безопасности связано с PTR-записями DNS. Они позволяют определить имя хоста по IP-адресу и могут использоваться, в частности, при аутентификации по обратному DNS.

При разборе ответа 3proxy раньше проходил по меткам имени до конца всего DNS-сообщения, хотя должен был ограничиваться данными конкретной записи. Из-за этого программа могла ошибочно принять указатель DNS-сжатия за длину метки. По описанию разработчиков, ответ размером от 3841 байта мог привести к выходу за пределы буфера в стеке.

В новой версии разбор останавливается на границе данных PTR-записи. Сжатые, пустые и усечённые имена в этом сценарии отклоняются. Изменение затрагивает обработку DNS-ответов при обратном определении имени, поэтому его следует отличать от исправления службы dnspr в версии 1.0.2: тогда разработчики усилили проверку источника, идентификатора и вопроса в пересылаемых DNS-ответах.

Одновременные проверки PCRE больше не используют общий изменяемый буфер

Правила доступа с префиксами pcre: и regex: позволяют сопоставлять имена хостов с регулярными выражениями. До 1.0.3 несколько соединений могли одновременно обращаться к одному блоку данных сопоставления, в который функция pcre2_match() записывает результат.

Когда проверки выполнялись параллельно, возникала гонка между потоками: они изменяли одни и те же данные, что могло повредить память и завершить процесс 3proxy под нагрузкой. Теперь каждое соединение получает собственный блок данных для проверки выражения. Исправление особенно относится к конфигурациям, в которых фильтрация обращений построена на PCRE-правилах и одновременно обслуживается много клиентов.

Ошибки работы с соединениями затронули и TLS. Прежде ситуация, когда чтение из TLS-сокета требовало предварительной записи или запись зависела от чтения, могла ошибочно завершать соединение. Один из приведённых разработчиками примеров — обновление ключей TLS 1.3 при временно недоступной записи в сокет. В 1.0.3 TLS-соединение сохраняет информацию о том, какого действия ожидает текущая операция, а механизм ожидания учитывает это состояние. В Windows дополнительно исправлено распознавание сетевых ошибок при повторных попытках чтения и записи.

Параметр -B исправил конфликт между разделением SNI и splice в Linux

В 3proxy 1.0.3 появилась отдельная опция -B для TCP-служб. Она разделяет передаваемое через tlspr начальное сообщение TLS ClientHello внутри имени сервера SNI — поля, по которому некоторые системы глубокой проверки трафика (DPI) определяют запрашиваемый домен. Механизм рассчитан на DPI-системы, которые не собирают разделённые части TCP-потока обратно перед анализом. Универсального обхода DPI он не гарантирует.

Раньше для похожего поведения использовался параметр -s, но на Linux возник конфликт с функцией splice(), предназначенной для передачи данных между сокетами. В issue #1283 пользователь показал, что в сборке 1.0.2 с WITHSPLICE параметр -s включал режим splice, а разделение ClientHello фактически не происходило. В тесте первые порции данных при 12 подключениях имели одинаковый размер — 1569 байт, как и без этой опции.

Теперь для разделения ClientHello предусмотрено отдельное обозначение -B; прежний -s сохраняет такой эффект в сборках, где он не занят функцией splice. Разработчики отдельно указали, что включённый TCP_NODELAY нужен для сохранения разделения: иначе ядро может снова объединить отправляемые сегменты. В актуальной ветке 1.0 TCP_NODELAY включён по умолчанию.

Исходящие подключения Linux и вспомогательные службы получили исправления

При большом числе исходящих соединений с явно выбранного внешнего IP-адреса 3proxy мог тратить время на поиск свободного локального порта или получать ошибку привязки. Начиная с Linux 4.2 новая версия использует IP_BIND_ADDRESS_NO_PORT: конкретный порт назначается при connect() с учётом адреса назначения. Это позволяет эффективнее использовать диапазон временных портов, когда соединения к разным серверам работают одновременно или прежние подключения находятся в состоянии TIME_WAIT.

Исправлена и служба обратных подключений connect back (-R). Раньше один клиент мог застрять в ожидании соединения, которое уже принял другой клиент той же службы, причём ожидание продолжалось даже после истечения тайм-аута или перезагрузки конфигурации. Теперь соответствующий сокет работает в неблокирующем режиме.

В ftppr устранено зависание при входе на FTP-серверы, которые подтверждают авторизацию ответом 230 сразу после команды USER, без необходимости в PASS. Ответ сервера ранее не доходил до клиента, из-за чего тот ждал завершения входа до тайм-аута. Сценарий описан в issue #1284. Отдельные исправления затронули работу плагинов StringsPlugin и FilePlugin с буферами и параметрами TLS-соединения.

3proxy 1.0.3 доступен для Windows, Linux и OpenWrt вместе с обновлением LTS

Для 3proxy 1.0.3 опубликованы ZIP-сборки под Windows, пакеты DEB и RPM для Linux, варианты для OpenWrt 24.10 и подписанный архив исходного кода. Официальные каналы current и lts предусмотрены в репозиториях APT и DNF. Файлы выпуска сопровождаются контрольными суммами SHA-256 и подписями OpenPGP.

В тот же день разработчики выпустили 3proxy 0.9.9.3 LTS с исправлениями безопасности RADIUS и PTR, гонки при проверке PCRE, ошибок соединений и поддержкой -B. Таким образом, описанные проблемы затронуты в обеих поддерживаемых линиях: актуальной 1.0 и длительно поддерживаемой 0.9.

В версии 1.0.3 команда 3proxy --help также показывает, с какими возможностями собран конкретный исполняемый файл, включая TLS и его реализацию, RADIUS, PCRE, IPv6, Unix-сокеты и дополнительные службы. Это позволяет отличить отсутствие функции в конкретной сборке от ошибки конфигурации.

Исправления 3proxy затрагивают безопасность авторизации и работу под нагрузкой

Выпуск 1.0.3 закрывает ошибки обработки внешних ответов RADIUS и PTR, устраняет гонку памяти при параллельном применении PCRE-правил и корректирует работу нескольких типов соединений. Отдельный параметр -B решает ранее задокументированный конфликт настроек в Linux. В опубликованных материалах разработчики описали условия возникновения ошибок, но не привели статистику их распространённости или подтверждённых атак.

Источники

При использовании материалов сайта необходимо указывать ссылку на TGLand.ru. Если вы копируете фрагменты текста в интернете, прямая гиперссылка, доступная для индексации поисковыми системами, должна быть размещена в начале материала.

Вам также может понравиться