Change8

v1.38.4

Breaking Changes
📦 envoyView on GitHub →
4 breaking🐛 5 fixes🔧 7 symbols

Summary

This release addresses multiple security vulnerabilities including issues with URL normalization, HTTP/3, HTTP/2, ext_authz, and QUIC. It also includes several bug fixes for filter management, ext_proc, dynamic forward proxy, and TLS memory leaks.

⚠️ Breaking Changes

  • Url normalization now strips path parameters from individual path segments per RFC 3986 section 3.3. This may affect requests with path parameters. Revert with envoy.reloadable_features.strip_path_parameters_per_segment.
  • Url normalization now strips path parameters from dot and dotdot segments (`/.;`, `/..;`) when `normalize_path` is enabled, ensuring correct canonicalization. Revert with envoy.reloadable_features.strip_dotdot_segments_with_parameters.
  • Safe_regex has switched its charset mode from UTF-8 to Latin1, as HTTP headers are not UTF-8 encoded. Revert with envoy.reloadable_features.re2_use_latin1_mode.
  • RBAC path matching now respects the route's `ignore_path_parameters_in_path_matching`, preventing authorization bypass via appended path parameters. Revert with envoy.reloadable_features.rbac_respect_ignore_path_parameters.

🐛 Bug Fixes

  • Fixed a filter manager bug where a body frame moved into the filter-manager buffer via addDecodedData()/addEncodedData() immediately before returning Continue was silently dropped, corrupting large streamed bodies. Revert with envoy.reloadable_features.filter_manager_forward_added_data_on_continue.
  • Fixed multiple lifetime bugs in the ext_proc filter and the underlying gRPC async client that could lead to use-after-free or double delivery of callbacks.
  • Fixed a lifetime bug in dynamic forward proxy async host selection when the cluster is removed while lookup is still pending.
  • Fixed a memory leak in the OpenSSL compatibility layer where SSL_get0_peer_certificates() leaked an X509 refcount per call, preventing certificates from being freed on connection close.
  • Fixed a bug where OpenSSL used glibc's allocator instead of tcmalloc, operating on a separate heap and making OpenSSL allocations invisible to tcmalloc heap profiling.

Affected Symbols