Skip to content

AHC v3.0.13 Release

Latest

Choose a tag to compare

@hyperxpro hyperxpro released this 09 Aug 22:46
· 2 commits to main since this release

Security

  • GHSA-rqf5-2wxv-rjf4 - Digest challenge without a usable nonce downgrades to Basic and sends the password in cleartext
  • GHSA-jmqq-x5g9-9p2w - Replay to a different host sends the original host's request and credentials to the new host
  • GHSA-vvp4-63h8-v5pm - Connection pool key omits the authenticated principal, so an NTLM or Negotiate connection is reused across identities
  • GHSA-f9m8-cv68-674w - Cookie Domain attribute is not checked against the public suffix list, so a cookie can be set for co.uk
  • GHSA-qhv6-3pmh-95q4 - Digest mutual authentication is switched off by a peer offering qop=auth-int

Behaviour changes

  • A Digest challenge carrying no nonce now selects Digest rather than Basic. Such an exchange previously appeared to work because the client answered in Basic, and it will now fail. It was sending the password in the clear.
  • A server offering qop="auth-int" and nothing else now falls back to the qop-less digest of RFC 2069, which has weaker replay protection. The client logs a warning when this happens.
  • Realm.Builder.matchParam keeps a backslash that precedes any character other than a quote or another backslash. This repairs a 3.0.12 regression that corrupted DOMAIN\Users to DOMAINUsers and broke Digest against those realms.
  • NTLM and Negotiate connections are pooled per principal, so an application authenticating as several identities against one host holds more connections than before.
  • A cookie whose Domain names a public suffix is refused. A host whose own name is a public suffix, such as the short names Docker Compose and Kubernetes hand out, can still set a cookie for itself.

Known issues

  • Over HTTP/2, an intercepted 401 or a redirect completes the caller's future exceptionally even though the exchange succeeds on the wire. Use HTTP/1.1 where authentication or redirects are involved.