Download Latest Version Release 5.09.982 source code.zip (464.4 kB) Google Add to Preferred Sources
Home / 5.09.982
Name Modified Size InfoDownloads / Week
Parent folder
README.md 2026-09-08 3.4 kB
Release 5.09.982 source code.tar.gz 2026-09-08 406.2 kB
Release 5.09.982 source code.zip 2026-09-08 464.4 kB
Totals: 3 Items   873.9 kB 2

Release 5.09.982

Comprehensive release with wireProtocol v2, modern TOML configuration, OIDC authentication, wire encryption & compression, mature QUIC transport, and 32-bit architecture compilation fixes.

🐛 32-bit Build Fix (v5.09.982)

  • Fix wire_v2.c: cast plen to uint64_t before 64-bit shifts (>> 56, >> 48, etc.) in transcript_part to fix -Werror=shift-count-overflow on 32-bit architectures (mips, arm, powerpc, i386).
  • Fix msg.c: cast time_t to intmax_t for %jd format string in get_auth_key().

🚀 Key Highlights & New Features

1. FRP transport.wireProtocol = "v2" Support

  • Added negotiation for FRP\x00\x02 protocol magic and JSON ClientHello/ServerHello.
  • Implemented binary message frames and AES-256-GCM AEAD encryption on the control channel after login (compatible with frps >= 0.69). Default remains v1.

2. FRP-Compatible Modern TOML Configuration

  • Full support for modern frp TOML configuration format via integrated tomlc17.
  • Dynamic parsing for client, visitor, server, and multi-proxy definitions.

3. OIDC Authentication

  • Support for auth.method = "oidc" with OAuth2 client_credentials grant flow.

4. Wire-Level Encryption & Compression

  • AES-128-CFB encryption (transport.useEncryption) with PBKDF2 salt matching frps.
  • Snappy compression (transport.useCompression) via vendored snappy-c.
  • Proxy HTTP custom headers (requestHeaders / responseHeaders) and time-based access control (startTime / endTime).

5. Mature QUIC Transport & Full Scenario Support

  • Complete ngtcp2 ↔ quic-go interop support for UDP-based low-latency transport.
  • Work stream data relay handling large payloads (> 1 QUIC packet).
  • All 4 transport scenarios pass end-to-end: Plain TCP, TCP+mux (yamux), QUIC, and TLS.

🔧 Fixes & Security Hardening

  • Crypto & Lifecycle P1s:
  • Main encoder generates fresh random IV on each handshake, preventing CFB key+IV reuse.
  • OIDC and QUIC transport enforce TLS host verification and CA trust store fallback.
  • Client clears ctl_bev upon worker EOF to avoid writing to freed bufferevent.
  • TCP proxy stashes unconsumed encrypted mux data in enc_pending rather than double-encrypting into the raw buffer.
  • Control channel drains evbuffer_write completely to ensure server-side keystream synchronisation.
  • Decrypt mux work streams with AES-128-CFB and restore UDP proxy framing (TypeUDPPacket).

  • Remote Crash & Command Injection P0s:

  • Added strict bounds checking on msg->length against received buffer length across control handlers.
  • Bounded string array parsing and clamped candidate/assisted addresses in xtcp.
  • Replaced unsafe strcpy calls with length-bounded copies and sanitized shell arguments before popen() in plugin handlers (instaloader, youtubedl).

  • Build & Platform Compatibility:

  • OpenWrt wolfSSL/OpenSSL dual-backend build fix via ssl_compat.h wrapper so OpenWrt can use wolfSSL for cryptography alongside OpenSSL for bufferevent_openssl.
  • Renamed enum DATA to TMUX_DATA in tcpmux.h to resolve namespace conflict with wolfSSL headers.

📦 Changes & Removals

  • Deprecated and removed legacy iod and ftp proxy types.

Full Changelog: https://github.com/liudf0716/xfrpc/compare/5.06.909...5.09.981

Source: README.md, updated 2026-09-08