Skip to content

Anubis

v1.26.1 Breaking

This release includes breaking changes for platform teams planning a safe upgrade.

✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

defense security

Summary

AI summary

Updates deprecated, https://en.wikipedia.org/wiki/Exponential_backoff, and https://developer.mozilla.org/en-US/docs/Web/API/Blob across a mixed release.

Full changelog
  • Fix support for semicolon-delimited query parameters that was dropped when moving from net/http/httputil#ReverseProxy.Director (deprecated) to net/http/httputil#ReverseProxy.Rewrite. This re-enables support for upstreams like gitweb (#1763). A functional test has been added to ensure this does not repeat.

Challenge page robustness

The challenge page can now survive transient failures, reduces the number of requests it makes to the Anubis app, and adds exponential backoff with retries to counteract an overwhelmed server being unable to serve any assets.

Previously if any request for JavaScript assets failed, the entire challenge attempt failed and users were forced to manually refresh the page, which is a bit of a bad user experience. This was made worse when the load balancer does not support HTTP/2, did not have resumable sessions enabled, and was implemented with Apache httpd pre-fork; making each asset fetch do its own TCP/TLS handshake. Under periods of heavy load such that TCP/TLS handshakes timed out, this made Anubis unable to fetch assets consistently or even made in-progress challenge attempts fail, which made challenges impossible to pass.

This has been fixed in a few ways:

  • Fetch operations now retry with exponential backoff in hopes that they will eventually be able to get through when the server is less stressed.
  • Attempting to fetch the main.mjs script now has fallback watchdog logic that periodically re-attempts to load the script.
  • Worker source code is fetched once and then loaded into workers with a Blob instead of having each worker do an independent fetch of the worker source code.
  • Individual workers can now die without making the entire challenge attempt fail. Surviving workers will cover the rest of the nonce space.
  • When worker construction fails, already running proof of work workers are terminated instead of staying active as headless unmonitored infinite loops.
  • Proof of work failures are now exposed as untranslated real errors. Browsers signal script load failures with real Events so the challenge failure page now shows a useful message.

What's Changed

  • chore: update updown IPs by @hyperdefined in https://github.com/TecharoHQ/anubis/pull/1666
  • fix(main): re-enable semicolon logic for proxied backends by @Xe in https://github.com/TecharoHQ/anubis/pull/1764
  • feat: make proofofwork challenge more reliable under heavy server load by @Xe in https://github.com/TecharoHQ/anubis/pull/1766

Full Changelog: https://github.com/TecharoHQ/anubis/compare/v1.26.0...v1.26.1

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track Anubis

Get notified when new releases ship.

Sign up free

About Anubis

Web AI firewall utility which protects upstream resources from scraper bots.

All releases →

Related context

Beta — feedback welcome: [email protected]