diff --git a/.gitignore b/.gitignore index 6581395..5625b9a 100644 --- a/.gitignore +++ b/.gitignore @@ -272,3 +272,4 @@ bin/3proxy_tlspr bin/3proxy_udppm build*/* testcerts/ +/.claude diff --git a/CHANGELOG b/CHANGELOG index ad99846..1c976e2 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,25 +1,28 @@ -3proxy-0.9.7 Released July, 4 2026 +3proxy-0.9.8 Released August, 7 2026 -+ PCRE2 and SSL/TLS code moved from plugins into main 3proxy binary; dynamic linking with ssl/pcre by default, STATIC/LIBSTATIC options for static linking -+ Unix sockets support for parent proxies, tcppm, internal listeners and -i option; abstract (fileless) unix sockets on Linux -+ ssl_client_mode = 3 to use 'secure' parent types: https, tcps, socks5s, connect+s, etc. -+ New authcache types: cacheacl, dstaddr, dstport, dsthost, dstoper, srvaddr, srvport; authcache is now configurable per service -+ Hashtables for password lists and authcache, faster password lookups -+ 3proxy_crypt: new internal password hashing replacing mycrypt -+ udppm switched to hashtables and supports multiple connections -+ SOCKSv5 UDP parent support; -Ne/-Ni NAT options -+ Docker images for more platforms, signed; DLLs signed; public cert added to build -+ Grace sleep and linger on connection close; correctly process half-closed connections -+ Allow setting internal/external network namespaces on Linux -- icqpr/OSCAR code removed -! Fix: invalid error in SSL server handshake could break service state -! Fix: invalid offset in datafilters -! Fix: invalid socket in poll() could break sockmap() on Windows -! Fix: deadlock in ftppr -! Fix: crash on standalone services -! Fix: non-initialized mutex crash under Windows -! Fix: socks v5 parent with no auth -! Fix: hanging connections in sockmap; unneeded poll in sockmap -! Fix: symbols collision with OpenSSL could lead to crash -! Fix: compatibility with older SSL versions and older Windows (7 and below) +!! Fix: use-after-free on the ftp:// request path in HTTP proxy, a request buffer reallocation left a stale pointer; heap corruption, requires authenticated access +!! Fix: buffer overflow in radsend() with an oversized request hostname; RADIUS is experimental, log radius or auth radius with fakeresolve is required to reach it +!! Fix: buffer overflow in smtpp when relaying AUTH LOGIN credentials to a server which offers AUTH PLAIN only; requires authorised access to smtpp +!! Fix: out-of-bounds read in tlspr on a malformed TLS ClientHello +!! Fix: LDAP injection and unsafe counter file names in LdapPlugin; the plugin is unsupported and is not built with 3proxy +!! Fix: password and hash comparison in strong authentication is constant-time now +!! Fix: bounds validation and match/depth limits in pcre filters ++ imapp: IMAPv4 proxy added, supports LOGIN command, AUTH PLAIN and AUTH LOGIN ++ STARTTLS support for smtpp, pop3p, imapp and tlspr, on both client and server side; -x option to disable ++ wolfSSL is supported as an alternative TLS backend, WOLFSSL_CHECK=true selects it (wolfSSL must be built with --enable-opensslextra) ++ Chunked Transfer-Encoding from client is supported by HTTP proxy ++ dnspr: -F option added, fake resolve to redirect traffic ++ ucrt64 build support; static libraries support in Makefile.win ++ minimal and busybox Docker images switched to musl + wolfSSL +- splice() support is not built by default anymore, it is slower than the read/write path for most traffic; add -DWITHSPLICE to build it +! Fix: hashtable item was added with wrong index on table grow; with large username/password tables it could cause a single record to be missing +! Fix: race conditions; stack overflow on FreeBSD +! Fix: generated certificates are X.509 v3 with basicConstraints CA:FALSE and extendedKeyUsage serverAuth, required by Apple TLS stack and by Chrome on macOS/iOS +! Fix: dnspr was broken since udppm rewrite +! Fix: short cleartext passwords failed authentication +! Fix: parent negotiation after sending PROXY protocol header +! Fix: maxchild dropped to 100 on config reload if not set explicitly +! Fix: getrandom() is not used with glibc below 2.25 +! Fix: IPV6_BOUND_IF definition for legacy MacOS +! Fix: cmake build, arm64 Docker build, Makefile.win with UCRT ! Multiple minor bugfixes and code cleanup diff --git a/CHANGELOG.rus b/CHANGELOG.rus index c01e782..64df875 100644 --- a/CHANGELOG.rus +++ b/CHANGELOG.rus @@ -1,25 +1,28 @@ -3proxy-0.9.7 Вышел 4 Июля 2026 +3proxy-0.9.8 Вышел 7 Августа 2026 -+ Код PCRE2 и SSL/TLS перенесён из плагинов в основной бинарный файл 3proxy; по умолчанию динамическое связывание с ssl/pcre, опции STATIC/LIBSTATIC для статического связывания -+ Поддержка unix-сокетов для родительских прокси, tcppm, внутренних слушателей и опции -i; абстрактные (безфайловые) unix-сокеты в Linux -+ ssl_client_mode = 3 для использования «безопасных» типов родителя: https, tcps, socks5s, connect+s и т.д. -+ Новые типы authcache: cacheacl, dstaddr, dstport, dsthost, dstoper, srvaddr, srvport; authcache настраивается для каждого сервиса -+ Хеш-таблицы для списков паролей и authcache, более быстрый поиск паролей -+ 3proxy_crypt: новое внутреннее хеширование паролей, заменяющее mycrypt -+ udppm переведён на хеш-таблицы и поддерживает множество соединений -+ Поддержка UDP-родителя для SOCKSv5; опции NAT -Ne/-Ni -+ Docker-образы для большего числа платформ, подписанные; подписанные DLL; публичный сертификат добавлен в сборку -+ Grace sleep и linger при закрытии соединения; корректная обработка полузакрытых соединений -+ Разрешено задавать внутренние/внешние сетевые пространства имён (network namespaces) в Linux -- Код icqpr/OSCAR удалён -! Исправление: некорректная ошибка в SSL server handshake могла ломать состояние сервиса -! Исправление: некорректное смещение в datafilters -! Исправление: некорректный сокет в poll() мог ломать sockmap() в Windows -! Исправление: взаимоблокировка (deadlock) в ftppr -! Исправление: падение на standalone-сервисах -! Исправление: падение из-за неинициализированного mutex в Windows -! Исправление: родитель socks v5 без аутентификации -! Исправление: зависающие соединения в sockmap; лишний poll в sockmap -! Исправление: конфликт символов с OpenSSL мог приводить к падению -! Исправление: совместимость со старыми версиями SSL и старыми версиями Windows (7 и ниже) +!! Исправление: use-after-free на пути обработки запроса ftp:// в HTTP-прокси, перевыделение буфера запроса оставляло устаревший указатель; повреждение кучи, требуется аутентифицированный доступ +!! Исправление: переполнение буфера в radsend() при слишком длинном имени хоста в запросе; RADIUS является экспериментальным, для достижения кода необходимы log radius или auth radius в сочетании с fakeresolve +!! Исправление: переполнение буфера в smtpp при передаче учётных данных AUTH LOGIN серверу, поддерживающему только AUTH PLAIN; требуется авторизованный доступ к smtpp +!! Исправление: чтение за границами буфера в tlspr при некорректном TLS ClientHello +!! Исправление: LDAP-инъекция и небезопасные имена файлов счётчиков в LdapPlugin; плагин не поддерживается и не собирается вместе с 3proxy +!! Исправление: сравнение паролей и хешей в strong-аутентификации теперь выполняется за постоянное время +!! Исправление: проверка границ и ограничения match/depth в pcre-фильтрах ++ imapp: добавлен IMAPv4-прокси, поддерживаются команда LOGIN, AUTH PLAIN и AUTH LOGIN ++ Поддержка STARTTLS для smtpp, pop3p, imapp и tlspr, как со стороны клиента, так и со стороны сервера; опция -x для отключения ++ wolfSSL поддерживается как альтернативный TLS-бэкенд, выбирается через WOLFSSL_CHECK=true (wolfSSL должен быть собран с --enable-opensslextra) ++ HTTP-прокси поддерживает Transfer-Encoding: chunked от клиента ++ dnspr: добавлена опция -F, фиктивное разрешение имён для перенаправления трафика ++ Поддержка сборки ucrt64; поддержка статических библиотек в Makefile.win ++ Docker-образы minimal и busybox переведены на musl + wolfSSL +- Поддержка splice() больше не собирается по умолчанию, она медленнее пути read/write для большинства видов трафика; для сборки добавьте -DWITHSPLICE +! Исправление: элемент хеш-таблицы добавлялся с неверным индексом при росте таблицы; на больших таблицах пользователей/паролей это могло приводить к отсутствию одной записи +! Исправление: состояния гонки; переполнение стека во FreeBSD +! Исправление: генерируемые сертификаты имеют формат X.509 v3 с basicConstraints CA:FALSE и extendedKeyUsage serverAuth, что требуется TLS-стеком Apple и Chrome в macOS/iOS +! Исправление: dnspr был сломан со времён переписывания udppm +! Исправление: короткие пароли в открытом виде не проходили аутентификацию +! Исправление: согласование с родителем после отправки заголовка PROXY protocol +! Исправление: maxchild сбрасывался в 100 при перезагрузке конфигурации, если не задан явно +! Исправление: getrandom() не используется с glibc ниже 2.25 +! Исправление: определение IPV6_BOUND_IF для устаревших версий MacOS +! Исправление: сборка cmake, сборка Docker для arm64, Makefile.win с UCRT ! Множество мелких исправлений и очистка кода diff --git a/RELEASE b/RELEASE index bae256f..b5d0ec5 100644 --- a/RELEASE +++ b/RELEASE @@ -1 +1 @@ -0.9.7 \ No newline at end of file +0.9.8 \ No newline at end of file diff --git a/debian/changelog b/debian/changelog index 46dcbd6..9ef7cf9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +3proxy (0.9.8-1) buster; urgency=medium + + *3proxy 0.9.8 initial build + + -- z3APA3A <3apa3a@3proxy.org> Fri, 07 Aug 2026 17:44:30 +0300 + 3proxy (0.9.7-1) buster; urgency=medium *3proxy 0.9.7 initial build diff --git a/doc/changelog/0/9/8 b/doc/changelog/0/9/8 new file mode 100644 index 0000000..8ade2e2 --- /dev/null +++ b/doc/changelog/0/9/8 @@ -0,0 +1,26 @@ +!! Fix: use-after-free on the ftp:// request path in HTTP proxy, a request buffer reallocation left a stale pointer; heap corruption, requires authenticated access +!! Fix: buffer overflow in radsend() with an oversized request hostname; RADIUS is experimental, log radius or auth radius with fakeresolve is required to reach it +!! Fix: buffer overflow in smtpp when relaying AUTH LOGIN credentials to a server which offers AUTH PLAIN only; requires authorised access to smtpp +!! Fix: out-of-bounds read in tlspr on a malformed TLS ClientHello +!! Fix: LDAP injection and unsafe counter file names in LdapPlugin; the plugin is unsupported and is not built with 3proxy +!! Fix: password and hash comparison in strong authentication is constant-time now +!! Fix: bounds validation and match/depth limits in pcre filters ++ imapp: IMAPv4 proxy added, supports LOGIN command, AUTH PLAIN and AUTH LOGIN ++ STARTTLS support for smtpp, pop3p, imapp and tlspr, on both client and server side; -x option to disable ++ wolfSSL is supported as an alternative TLS backend, WOLFSSL_CHECK=true selects it (wolfSSL must be built with --enable-opensslextra) ++ Chunked Transfer-Encoding from client is supported by HTTP proxy ++ dnspr: -F option added, fake resolve to redirect traffic ++ ucrt64 build support; static libraries support in Makefile.win ++ minimal and busybox Docker images switched to musl + wolfSSL +- splice() support is not built by default anymore, it is slower than the read/write path for most traffic; add -DWITHSPLICE to build it +! Fix: hashtable item was added with wrong index on table grow; with large username/password tables it could cause a single record to be missing +! Fix: race conditions; stack overflow on FreeBSD +! Fix: generated certificates are X.509 v3 with basicConstraints CA:FALSE and extendedKeyUsage serverAuth, required by Apple TLS stack and by Chrome on macOS/iOS +! Fix: dnspr was broken since udppm rewrite +! Fix: short cleartext passwords failed authentication +! Fix: parent negotiation after sending PROXY protocol header +! Fix: maxchild dropped to 100 on config reload if not set explicitly +! Fix: getrandom() is not used with glibc below 2.25 +! Fix: IPV6_BOUND_IF definition for legacy MacOS +! Fix: cmake build, arm64 Docker build, Makefile.win with UCRT +! Multiple minor bugfixes and code cleanup diff --git a/scripts/rh/3proxy.spec b/scripts/rh/3proxy.spec index aa4ba22..386418f 100644 --- a/scripts/rh/3proxy.spec +++ b/scripts/rh/3proxy.spec @@ -1,5 +1,5 @@ Name: 3proxy -Version: 0.9.7 +Version: 0.9.8 Release: 1%{?dist} Summary: 3proxy tiny proxy server License: GPL/LGPL/Apache/BSD diff --git a/src/version.h b/src/version.h index b71d3f9..e3d5f0a 100644 --- a/src/version.h +++ b/src/version.h @@ -1,14 +1,14 @@ #ifndef VERSION -#define VERSION "3proxy-0.9.7" +#define VERSION "3proxy-0.9.8" #endif #ifndef BUILDDATE #define BUILDDATE "" #endif #define MAJOR3PROXY 0 #define SUBMAJOR3PROXY 9 -#define MINOR3PROXY 7 +#define MINOR3PROXY 8 #define SUBMINOR3PROXY 0 -#define RELEASE3PROXY "3proxy-0.9.7(" BUILDDATE ")\0" +#define RELEASE3PROXY "3proxy-0.9.8(" BUILDDATE ")\0" #ifndef YEAR3PROXY #define YEAR3PROXY "2026" #endif