安全更新:openssl 4.0.2 RPM 和 DEB 软件包已发布

openssl 4.0.2 已新增到 CodeIT 仓库。这些软件包适用于 RHEL、CentOS、AlmaLinux、Rocky Linux 和 Oracle Linux 7、8、9 和 10,以及 Ubuntu 22.04 和 24.04。

本次更新修复了安全漏洞,建议尽快升级。

主要变更:

  • OpenSSL 4.0.2 是一个安全修补版本。此版本修复的最严重 CVE 为 Moderate。
  • 此版本包含以下错误修复与缓解措施:
  • 修复了在 CCM 密码套件模式下,对 AEAD 密码的空密文进行认证标记检查。

修复的漏洞:

  • 修复了 QUIC 服务器在处理 `INITIAL` 数据包时可能触发 double free 的问题。(CVE-2026-18798)
  • 修复了 CMS 密钥解包中的堆缓冲区溢出。(CVE-2026-63072)
  • 修复了通过精心构造的 `protectionAlg` 访问 CMP 服务器时出现的无效指针解引用。(CVE-2026-63076)
  • 修复了 QUIC 服务器入站通道队列中的内存无界增长。(CVE-2026-14456)
  • 修复了 RPK 服务器在选择签名算法时可能解引用缺失证书的问题。(CVE-2026-14457)
  • 修复了为未来纪元缓冲 DTLS 记录而导致的过度内存使用。(CVE-2026-54874)
  • 修复了在校验 OCSP 响应时客户端侧的内存泄漏。(CVE-2026-54876)
  • 修复了在校验 CMP 响应时使用不受信任的 Sender DN 作为格式字符串。(CVE-2026-63073)
  • 修复了 CMP 中 `extraCerts` 的缓存无期限增长问题。(CVE-2026-63074)
  • 修复了 QUIC 中仅 ACK 数据包的保留可能导致内存耗尽的问题。(CVE-2026-63075)
  • 修复了在使用 `EVP_Cipher()` 时,空密文下可能发生 AEAD 伪造的情况。(CVE-2026-75803)

带有 QUIC 支持的库仍作为单独的、不会冲突的 openssl-quic-libs 软件包提供,使用独立的 .so.81.4 后缀,以避免与官方 .so.X 冲突。

NGINX 1.31.4 Mainline RPM 和 DEB 软件包已发布,支持 HTTP/3、Brotli、TLS 1.3 和 OpenSSL 4.0.1,适用于 EL7/EL8/EL9/EL10, Ubuntu 22.04/24.04

nginx 1.31.4 Mainline 已新增到 CodeIT 仓库,支持 HTTP/3。http2 和 ngx_cache_purge 已内置,并且 OpenSSL 动态链接官方 OpenSSL 4.0.1,支持 QUIC。Google 的 Brotli 压缩模块和 ngx_http_geoip2 以动态模块形式提供,位于 nginx-module-brotli 和 nginx-module-geoip2 软件包中,nginx rpm 会自动安装它们(保留该依赖是为了让现有安装在升级时不丢失相关指令;几个月后我们会移除它,这两个模块将变为完全可选)。这些软件包适用于 RHEL、CentOS、AlmaLinux、Rocky Linux 和 Oracle Linux 7、8、9 和 10,以及 Ubuntu 22.04 和 24.04。

其余动态模块单独打包,可按需安装:nginx-module-lua(配合 lua-resty-core 和 lua-resty-lrucache)、nginx-module-acme(自动申请 ACMEv2 证书)、nginx-module-njs、nginx-module-perl、nginx-module-xslt 和 nginx-module-image-filter。每个软件包都会在 /etc/nginx/modules-enabled 中写入自己的 load_module 指令,安装后即可生效,无需手动修改 nginx.conf。Lua 和 ACME 为 EL9、EL10 和 Ubuntu 构建;EL7 改为提供 nginx-module-geoip,而 njs、Perl、XSLT 和 image-filter 仅有 rpm 版本。

同一版本也发布到 Docker Hub 的 codeitus/nginx:镜像基于 AlmaLinux 9,由这些软件包构建,并同时提供 amd64 和 arm64:

  • 最新镜像,来自最后发布的那个分支:docker pull codeitus/nginx
  • 最新的 Mainline 镜像:docker pull codeitus/nginx:mainline
  • 本次发布的确切版本:docker pull codeitus/nginx:1.31.4

HTTP/3 还需要发布 UDP 端口,而不只是 TCP 端口:docker run -d -p 80:80 -p 443:443 -p 443:443/udp codeitus/nginx

主要变更:

  • Feature: stream 和 mail 模块中的 “proxy_protocol” 指令现在支持 PROXY 协议版本 2。
  • Change: 现在对后端的 HTTP/2 和 gRPC 请求总是使用伪首部 “:authority” 发送,而对后端的 HTTP/1.1 请求则使用 “Host” 首部发送。
  • Bugfix: 如果使用了 “select” 方法,工作进程中可能会发生段错误。
  • Bugfix: 具有非零 “Content-Length” 首部行的、不完整的 gRPC 响应现在会被视为格式错误。
  • Bugfix: 修复了与使用脚本代码的第三方模块的二进制兼容性问题;该问题出现在 1.31.3 中。
  • Bugfix: 在 ngx_http_perl_module 中。
  • Bugfixes 于 HTTP/2、HTTP/3、ngx_http_image_filter_module 和 ngx_http_grpc_module。

安全更新:apr-util 1.6.5 RPM 和 DEB 软件包已发布

apr-util 1.6.5 已新增到 CodeIT 仓库。这些软件包适用于 RHEL、CentOS、AlmaLinux、Rocky Linux 和 Oracle Linux 7、8、9 和 10,以及 Ubuntu 22.04 和 24.04。

本次更新修复了安全漏洞,建议尽快升级。

主要变更:

  • 修复了在 1.6.4 中引入的 oracle DBD 编译错误。PR 70170。
  • apr_brigade: apr_brigade_split_line 不再分割最后的 LF,以避免生成空的 bucket。PR 64273
  • apr_brigade: apr_brigade_split_line、apr_brigade_flatten 和 apr_brigade_to_iovec 现在会忽略元数据 bucket,从而修复可能的未定义行为。PR 68278
  • apr_crypto_openssl: 与 OpenSSL 3 的兼容性。
  • apr_crypto_openssl: 使用 OPENSSL_init_crypto() 来在 1.1+ 版本上初始化 OpenSSL。
  • apr_memcache: 修复名称查找,使其同时支持 IPv6 和 IPv4。
  • configure: 使用强制严格 C99 兼容性的编译器修复了 Berkeley DB 的检测。PR 66396。

修复的漏洞:

  • SECURITY: CVE-2026-34502: APR memcached 客户端中的堆缓冲区溢出:Apache Portable Runtime Utility memcached 客户端中的基于堆的缓冲区溢出漏洞。该问题影响 Apache Portable Runtime Utility:从 1.3.0 到 1.6.3。
  • SECURITY: CVE-2026-34501: Apache Portable Runtime Utility:APR redis 客户端中的堆缓冲区溢出:Apache Portable Runtime Utility redis 客户端中的基于堆的缓冲区溢出漏洞。该问题影响 Apache Portable Runtime Utility:从 1.6.0 到 1.6.3。建议用户升级到 1.6.4 版本,该版本修复了该问题。
  • SECURITY: CVE-2026-34191: Apache Portable Runtime Utility:apr_dbd_oracle 中的 SQL 注入:通过 apr_dbd_oracle 提供程序的 Apache Portable Runtime Utility 漏洞中,使用于 SQL 命令(”SQL Injection”)的特殊元素的中和不当。该问题影响 Apache Portable Runtime Utility:从 1.6.0 到 1.6.3。建议用户升级到 1.6.4 版本,该版本修复了该问题。
  • SECURITY: CVE-2026-32327: Apache Portable Runtime Utility:apr-util XML 栈递归崩溃:APR-util 1.6.3 版本(以及更早版本)中的一个缺陷允许对任何解析来自不可信来源的 XML 且使用 apr_xml_quote_elem() 函数的库消费者发起栈递归攻击。建议用户升级到 1.6.4 版本,该版本修复了该问题。
  • SECURITY: CVE-2025-49506: apr_password_validate() 易受时序攻击影响:APR-util 1.6.3 版本(以及更早版本)中的 apr_password_validate() 函数在比较 hashes 或 passwords 时并非恒定时间,可能会通过时序攻击的侧信道泄露其内容,尤其是在没有 crypt() 的平台上,如 Windows、BeOS、NetWare 或 Android。建议用户升级到 1.6.4 版本,该版本修复了该问题。

sshoq 0.5.0 RPM 和 DEB 软件包已发布

sshoq 0.5.0 已新增到 CodeIT 仓库。这些软件包适用于 RHEL、CentOS、AlmaLinux、Rocky Linux 和 Oracle Linux 8、9 和 10,以及 Ubuntu 22.04 和 24.04。

主要变更:

  • SFTP 客户端中的 OpenSSH 风格路径引用与转义
  • feat:为 sftp/scp 操作显示传输进度(百分比和速度)
  • feat:新增了使用 Ctrl+C 取消 sftp/scp 传输的功能
  • feat:在 SFTP 客户端中支持 OpenSSH 风格的 cd 快捷方式
  • feat:新增了对在 SFTP 客户端中使用通配符匹配 put/get 源文件的支持
  • perf:对 SFTP 传输进行流水线处理,消除每个分块的往返瓶颈
  • fix:在所有 sftp 客户端/服务器错误消息中都包含文件路径
  • sftp:默认在客户端遵循符号链接,并新增 -no-follow-symlinks 选项
  • perf:将 SFTP 的 JSON 协议替换为更紧凑的二进制格式
  • 增大传输窗口
  • sftp:get -r 在遇到 permission-denied 文件后仍继续

sshoq 0.4.0 rpms released

sshoq 0.4.0 rpms released and added to all supported platforms.

Major changes since 0.3.0:

– fix(auth): return error on key load failure instead of panicking on nil key – fix: print error to stderr when sshoq-server fails to start – Feature/default ssh keys from dot ssh – wildcard for get -r – SFTP client: Add readline-style arrow keys support – feat: add -scp mode for non-interactive file transfer – feat: support multiple simultaneous local and remote port forwardings – fix: correct the port forwarding syntax error message – feat: add tab completion for file paths in the SFTP client – sftp client: add wildcard/glob support to ls – sftp client: add wildcard/glob support to get – fix: reassemble chunked SFTP messages across channel data messages – fix: linux-arm64 release build and drop windows client-only pipeline

sshoq 0.3.0 rpms released

sshoq 0.3.0 rpms released and added to all supported platforms.

Major changes:

– SFTP is enabled on the server by default, but can be disabled with `sshoq-server -disable-sftp` On the client, do `sshoq -sftp user@host` to enter sftp shell. Normal commands like `ls`, `cd`, `put`, `get` etc. are supported including recursive mode (e.g. `get -r path`). Tab completion and wildcards are not implemented yet for SFTP so exact paths must be used. – fix: two small problem by @nameearly – Add sftp support by @h4sh5 – Harden SFTP server with user-scoped permission checks and fd-relative no-follow filesystem ops by @h4sh5 with @Copilot – Reject disabled SFTP channels with SSH channel-open failure by @h4sh5 with @Copilot – Add recursive directory transfers to SFTP mode by @h4sh5 with @Copilot – Harden SFTP stat: enforce ancestor-execute permissions via Fstatat by @h4sh5 with @Copilot – SFTP handler: drop privileges to the logged-in user by @h4sh5 with @Copilot in – add ownership details (user and group) to sftp ls command by @h4sh5 – allow running integration tests locally by @h4sh5 – @nameearly made their first contribution – @h4sh5 with @Copilot made their first contribution

mod_http3 0.0.54 for Apache httpd 2.4.68 is available for testing

Experimental mod_http3 0.0.54 packages are now available in the CodeIT testing repository for EL7, EL8, EL9 and EL10.

The module requires our patched httpd 2.4.68-2 package, which includes MPM changes required for externally managed QUIC connections.

HTTP/3 support remains experimental. Use these packages on testing systems before considering production deployment.

Changes

– applies the core LimitRequestFields and LimitRequestFieldSize to HTTP/3 requests, which nothing did before, and advertises the bound as SETTINGS_MAX_FIELD_SECTION_SIZE instead of nghttp3’s (1<<62)-1 – bounds a response that makes no progress (H3StreamTimeout) so a client that stops reading cannot hold a worker thread, and closes a connection past H3MaxStreamErrors – advertises a QPACK dynamic table (H3QpackTableCapacity, H3QpackBlockedStreams); it was disabled, so HTTP/3 compressed request headers worse than HTTP/2 on the same server – exposes the request worker pool (H3MinWorkers, H3MaxWorkers, H3MaxWorkerIdleSeconds), previously hardcoded at 16/64 – resolves mod_logio once instead of once per request

Installation

For EL8, EL9 and EL10:

dnf module reset -y httpd
dnf module enable -y httpd:codeit
dnf config-manager --setopt=CodeIT-testing.module_hotfixes=1 --save

dnf --enablerepo=CodeIT-testing install -y \
    httpd mod_ssl mod_http2 mod_http3

For EL7:

yum --enablerepo=CodeIT-testing install -y \
    httpd mod_ssl mod_http2 mod_http3

Verify the installed versions:

rpm -q httpd mod_http3

Expected versions:

httpd-2.4.68-2...
mod_http3-0.0.54-1...

Configuration

Default example configuration file is /etc/httpd/vhosts.d/http3-vhost.conf (installed together with the package):

EnableMMAP Off

# Keep the existing Listen directive.
# Do not duplicate it if another configuration file already contains it:
# Listen 443 https

<VirtualHost *:443>
    ServerName example.com

    SSLEngine on
    SSLCertificateFile    /etc/pki/tls/certs/localhost.crt
    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

    Protocols h3 h2 http/1.1

    H3Port 443
    H3QuicEngine openssl
    H3CertificatePath    /etc/pki/tls/certs/localhost.crt
    H3CertificateKeyPath /etc/pki/tls/private/localhost.key

    DocumentRoot /var/www/html

    <Directory /var/www/html>
        Require all granted
    </Directory>
</VirtualHost>

Check the configuration and restart Apache:

httpd -t
httpd -M | grep -E 'http3|http2|ssl'
systemctl restart httpd

Firewall

HTTP/3 uses QUIC over UDP. Both TCP and UDP port 443 must be open:

firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-port=443/udp
firewall-cmd --reload

Check the listeners:

ss -lntup | grep ':443'

Testing HTTP/3

The CodeIT ngtcp2 package includes the osslclient QUIC test client. To test the local Apache instance while sending example.com as the target hostname, run:

dnf install ngtcp2
osslclient 127.0.0.1 443 https://example.com

This connects directly to UDP port 443 on localhost and performs an HTTP/3 request using example.com for TLS and HTTP hostname handling.

You can also use a curl build that lists HTTP3 in curl -V:

curl --http3-only -vkI https://example.com/

A successful response should contain:

HTTP/3 200

You can also test graceful restart behavior while an HTTP/3 connection is active:

apachectl graceful
journalctl -u httpd -f

The first browser request may use HTTP/2 while the browser discovers HTTP/3 through Alt-Svc. Reload the page and check the Protocol column in browser Developer Tools for h3.

Please report successful installations, crashes, compatibility issues and graceful-restart problems through comments.

mod_http3 0.0.53 for Apache httpd 2.4.68 is available for testing

Experimental mod_http3 0.0.53 packages are now available in the CodeIT testing repository for EL7, EL8, EL9 and EL10.

The module requires our patched httpd 2.4.68-2 package, which includes MPM changes required for externally managed QUIC connections.

HTTP/3 support remains experimental. Use these packages on testing systems before considering production deployment.

Changes

*) Rejected malformed HTTP/3 requests (missing or duplicate pseudo-header fields, connection-specific fields, content-length mismatch) with a stream error of type H3_MESSAGE_ERROR per RFC 9114 4.1.2. Previously one malformed request closed the whole QUIC connection, ending every other request in flight on it.
[Alexander Gerasimov]

*) Added support for building against httpd 2.4.52+. Without response buckets the module removes the core HTTP_HEADER filter from its requests and snapshots status and headers itself, mirroring mod_http2’s !AP_HAS_RESPONSE_BUCKETS path.
[Alexander Gerasimov]

*) Made the MPM connection-count notifications optional. Stock 2.4.x MPMs do not provide them; the module then runs in a degraded mode where a graceful child stop does not wait for active QUIC connections to drain. The patch in .patches/httpd-2.4.66-pr699.patch adds the notifications to httpd 2.4.x.
[Alexander Gerasimov]

*) Enforced H3IdleTimeout in the module’s own event loop. The QUIC stacks keep an otherwise idle connection alive by themselves — OpenSSL sends a keepalive PING at half the idle interval to hold NAT state open — which resets both endpoints’ idle timers, so the transport timeout never fired and a finished connection held its session pool and its H3MaxConnections slot until the client went away.
[Alexander Gerasimov]

*) Read queued datagrams in one batch with recvmmsg() where the platform has
it, and read the socket’s local address once per event-loop pass instead
of once per datagram, halving the syscalls the ngtcp2 engine spends on a
busy socket. The OpenSSL engine already batches inside its own datagram
BIO. Also dropped a per-pass walk of the connection list whose result was
never used.
[Alexander Gerasimov]

*) Added H3SocketBufferSize, which asks for the QUIC socket send and receive buffer size. A receive buffer left at the OS default overflows once a single connection runs at speed, and each dropped datagram costs a retransmit; the OS still caps what it grants, and a capped grant is logged rather than fatal.
[Alexander Gerasimov]

*) Added H3SessionTickets, which controls whether TLS 1.3 session tickets are issued so a returning client can resume instead of running a full handshake. Tickets stay on by default, as before, and each worker process keeps its own ticket keys, so a client resumes only when it returns to the process that issued its ticket.
[Alexander Gerasimov]

*) Added H3EarlyData, off by default, together with an engine capability bit saying whether 0-RTT can be accepted at all. The OpenSSL QUIC stack has no server-side 0-RTT, so turning early data on there now logs a warning that names the engine instead of silently doing nothing.
[Alexander Gerasimov]

*) Published the mod_ssl TLS environment for HTTP/3 requests: SSL_PROTOCOL, SSL_CIPHER, SSL_CIPHER_USEKEYSIZE, SSL_CIPHER_ALGKEYSIZE, SSL_CIPHER_EXPORT and SSL_SESSION_RESUMED, under the names mod_ssl uses. mod_ssl does not manage these connections, so scripts and rewrite conditions that read them saw nothing but HTTPS=on over HTTP/3. The values are read from the QUIC engine through a new conn.tls_info entry and formatted once per connection, not per request.
[Alexander Gerasimov]

Installation

For EL8, EL9 and EL10:

dnf module reset -y httpd
dnf module enable -y httpd:codeit
dnf config-manager --setopt=CodeIT-testing.module_hotfixes=1 --save

dnf --enablerepo=CodeIT-testing install -y \
    httpd mod_ssl mod_http2 mod_http3

For EL7:

yum --enablerepo=CodeIT-testing install -y \
    httpd mod_ssl mod_http2 mod_http3

Verify the installed versions:

rpm -q httpd mod_http3

Expected versions:

httpd-2.4.68-2...
mod_http3-0.0.53-1...

Configuration

Default example configuration file is /etc/httpd/vhosts.d/http3-vhost.conf (installed together with the package):

EnableMMAP Off

# Keep the existing Listen directive.
# Do not duplicate it if another configuration file already contains it:
# Listen 443 https

<VirtualHost *:443>
    ServerName example.com

    SSLEngine on
    SSLCertificateFile    /etc/pki/tls/certs/localhost.crt
    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

    Protocols h3 h2 http/1.1

    H3Port 443
    H3QuicEngine openssl
    H3CertificatePath    /etc/pki/tls/certs/localhost.crt
    H3CertificateKeyPath /etc/pki/tls/private/localhost.key

    DocumentRoot /var/www/html

    <Directory /var/www/html>
        Require all granted
    </Directory>
</VirtualHost>

Check the configuration and restart Apache:

httpd -t
httpd -M | grep -E 'http3|http2|ssl'
systemctl restart httpd

Firewall

HTTP/3 uses QUIC over UDP. Both TCP and UDP port 443 must be open:

firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-port=443/udp
firewall-cmd --reload

Check the listeners:

ss -lntup | grep ':443'

Testing HTTP/3

The CodeIT ngtcp2 package includes the osslclient QUIC test client. To test the local Apache instance while sending example.com as the target hostname, run:

dnf install ngtcp2
osslclient 127.0.0.1 443 https://example.com

This connects directly to UDP port 443 on localhost and performs an HTTP/3 request using example.com for TLS and HTTP hostname handling.

You can also use a curl build that lists HTTP3 in curl -V:

curl --http3-only -vkI https://example.com/

A successful response should contain:

HTTP/3 200

You can also test graceful restart behavior while an HTTP/3 connection is active:

apachectl graceful
journalctl -u httpd -f

The first browser request may use HTTP/2 while the browser discovers HTTP/3 through Alt-Svc. Reload the page and check the Protocol column in browser Developer Tools for h3.

Please report successful installations, crashes, compatibility issues and graceful-restart problems through comments.

mod_http3 0.0.52 for Apache httpd 2.4.68 is available for testing

Experimental mod_http3 0.0.52 packages are now available in the CodeIT testing repository for EL7, EL8, EL9 and EL10.

The module requires our patched httpd 2.4.68-2 package, which includes MPM changes required for externally managed QUIC connections.

HTTP/3 support remains experimental. Use these packages on testing systems before considering production deployment.

Installation

For EL8, EL9 and EL10:

dnf module reset -y httpd
dnf module enable -y httpd:codeit
dnf config-manager --setopt=CodeIT-testing.module_hotfixes=1 --save

dnf --enablerepo=CodeIT-testing install -y \
    httpd mod_ssl mod_http2 mod_http3

For EL7:

yum --enablerepo=CodeIT-testing install -y \
    httpd mod_ssl mod_http2 mod_http3

Verify the installed versions:

rpm -q httpd mod_http3

Expected versions:

httpd-2.4.68-2...
mod_http3-0.0.52-1...

Configuration

Default example configuration file is /etc/httpd/vhosts.d/http3-vhost.conf (installed together with the package):

EnableMMAP Off

# Keep the existing Listen directive.
# Do not duplicate it if another configuration file already contains it:
# Listen 443 https

<VirtualHost *:443>
    ServerName example.com

    SSLEngine on
    SSLCertificateFile    /etc/pki/tls/certs/localhost.crt
    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

    Protocols h3 h2 http/1.1

    H3Port 443
    H3QuicEngine openssl
    H3CertificatePath    /etc/pki/tls/certs/localhost.crt
    H3CertificateKeyPath /etc/pki/tls/private/localhost.key

    DocumentRoot /var/www/html

    <Directory /var/www/html>
        Require all granted
    </Directory>
</VirtualHost>

Check the configuration and restart Apache:

httpd -t
httpd -M | grep -E 'http3|http2|ssl'
systemctl restart httpd

Firewall

HTTP/3 uses QUIC over UDP. Both TCP and UDP port 443 must be open:

firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-port=443/udp
firewall-cmd --reload

Check the listeners:

ss -lntup | grep ':443'

Testing HTTP/3

The CodeIT ngtcp2 package includes the osslclient QUIC test client. To test the local Apache instance while sending example.com as the target hostname, run:

dnf install ngtcp2
osslclient 127.0.0.1 443 https://example.com

This connects directly to UDP port 443 on localhost and performs an HTTP/3 request using example.com for TLS and HTTP hostname handling.

You can also use a curl build that lists HTTP3 in curl -V:

curl --http3-only -vkI https://example.com/

A successful response should contain:

HTTP/3 200

You can also test graceful restart behavior while an HTTP/3 connection is active:

apachectl graceful
journalctl -u httpd -f

The first browser request may use HTTP/2 while the browser discovers HTTP/3 through Alt-Svc. Reload the page and check the Protocol column in browser Developer Tools for h3.

Please report successful installations, crashes, compatibility issues and graceful-restart problems through comments.