Documentation : https://docs.bunkerweb.io/1.6.10/
Docker tags :
- All-in-one :
bunkerity/bunkerweb-all-in-one:1.6.10orghcr.io/bunkerity/bunkerweb-all-in-one:1.6.10 - BunkerWeb :
bunkerity/bunkerweb:1.6.10orghcr.io/bunkerity/bunkerweb:1.6.10 - Scheduler :
bunkerity/bunkerweb-scheduler:1.6.10orghcr.io/bunkerity/bunkerweb-scheduler:1.6.10 - Autoconf :
bunkerity/bunkerweb-autoconf:1.6.10orghcr.io/bunkerity/bunkerweb-autoconf:1.6.10 - UI :
bunkerity/bunkerweb-ui:1.6.10orghcr.io/bunkerity/bunkerweb-ui:1.6.10 - API :
bunkerity/bunkerweb-api:1.6.10orghcr.io/bunkerity/bunkerweb-api:1.6.10
Linux packages : https://packagecloud.io/app/bunkerity/bunkerweb/search?q=1.6.10&filter=all&dist=
Changelog :
[SECURITY]
- [SECURITY]
nginx: update NGINX to 1.30.1 to fix various CVEs. - [SECURITY]
ui: neutralize CSV/XLSX formula injection in bans and reports exports (CWE-1236).- Server-side CSV now uses
defusedcsv. - XLSX exports escape cells through the shared
csv_safe()helper. - DataTables
csv,excel, andcopybuttons inherit the same protection throughbwCsvSafe. - Cells starting with
=,+,-,@,|, or%are prefixed with'. - Embedded
|characters are backslash-escaped.
- Server-side CSV now uses
- [API/SECURITY] Fix
PATCH /global_configaccidentally deleting all services, custom configs, and jobs cache. - [API/SECURITY] Add data-loss guards in
Database.save_configandDatabase.update_external_plugins.- Refuse updates that would delete every global setting for a method.
- Refuse plugin cascade-deletion when the incoming plugin list is empty.
- Skip setting/selects/multiselects pruning on same-content plugin reinstalls detected by checksum.
- [SECURITY] Update coreruleset-v3 to v3.3.9 to fix CVE-2026-33691. (Fixes #3402)
- [SECURITY] Update coreruleset-v4 to v4.26.0, including the CVE-2026-33691 fix. (Fixes #3402)
- [SECURITY] Harden tar/zip extraction with centralized
safe_tar_extractall/safe_zip_extractallhelpers, pre-extraction validation, andPath.is_relative_to()containment checks. Mitigates CVE-2025-4517 on Python < 3.13.4. - [SECURITY] Harden AIO service log forwarding against terminal injection in
docker logs.- Strip C0/C1 control characters.
- Disable pathname expansion around
HIDE_SERVICE_LOGS. - Reject
..path-traversal segments inLOG_FILE_PATH.
- [SECURITY] Harden AIO
logstream.shforwarding for nginx, access, error, and ModSecurity audit logs with the same control-character stripping. - [SECURITY] Replace Trivy with Docker Scout for container image vulnerability scanning in the CI/CD pipeline.
- [UI/SECURITY] Replace unbounded DataTables
Allpage length with capped values and clamp server-sidelength/startparameters to prevent oversized requests from causing OOM.
[BUGFIX]
- [BUGFIX]
metrics/datastore/modsec: fix multiple memory leaks and unsafe defaults.- Bound per-worker LRU and per-key event-history arrays with
MAX_LRU_HISTORY, default1k. - Lower
METRICS_MAX_BLOCKED_REQUESTS_REDISdefault from100000to10k. - Lower shared datastore worker-LRU default from
100000to1k. - Add
DATASTORE_LRU_SIZE. - Fix memory leak in ModSecurity-to-Lua variable retrieval.
- Bound per-worker LRU and per-key event-history arrays with
- [BUGFIX]
reverseproxy: pinUSE_UI=yesservice upstreams to HTTP/1.1 so globalREVERSE_PROXY_HTTP_VERSION=2no longer locks out the Web UI. (Fixes #3550) - [BUGFIX]
misc: fix per-service HTTPS handshakes aborting withno ssl_client_hello_by_lua* defined in server <name>whenDISABLE_DEFAULT_SERVER_STRICT_SNI=yes. - [BUGFIX]
modsecurity/ui/antibot: stopUSE_MODSECURITY_GLOBAL_CRS=yesfrom returning403on UI POSTs and antibot challenges. (Fixes #3118) - [BUGFIX] Fix ModSecurity
REQUEST_HEADERS:HostandSERVER_NAMEbeing empty for HTTP/3 requests. (Fixes #3298) - [BUGFIX] Add
MODSECURITY_SEC_REQUEST_BODY_LIMITandMODSECURITY_SEC_REQUEST_BODY_LIMIT_ACTIONto decouple ModSecurity body inspection fromMAX_CLIENT_SIZE. (Fixes #3154) - [BUGFIX] Add explicit ModSecurity request-body parsing error rules so truncated or malformed bodies are logged and rejected with the correct status.
- [BUGFIX] Add
REVERSE_PROXY_MODSECURITYsetting to disable ModSecurity per reverse-proxy URL when needed, especially for large uploads. (Fixes #3154) - [BUGFIX] Add
WORKER_SHUTDOWN_TIMEOUT, default30s, to terminate old NGINX workers after reloads and avoid unbounded memory growth. (Fixes #3153) - [BUGFIX]
database: add a__del__safety net on the SQLAlchemyDatabasewrapper so per-job engines dispose cleanly during garbage collection. - [BUGFIX]
database: back-fillbw_settingsdefaults fromsettings.jsonat read time when catalogue rows are missing, NULL, or empty. (Fixes #3450) - [BUGFIX] Fix
DATABASE_URIdriver injection corrupting hostnames when the host matches the scheme name. (Fixes #3438) - [BUGFIX] Fix PostgreSQL table bloat in
bw_plugin_pagesandbw_jobs_cache. - [BUGFIX] Fix scheduler memory leak from unbounded job module cache, broken
sys.modulescleanup, bulk cache loading, and infrequent garbage collection. - [BUGFIX] Disable Gunicorn 25.1.0 control socket to prevent worker deadlocks in UI, TMP-UI, and API.
- [BUGFIX] Clean orphaned NGINX temp files on startup after OOM kills or ungraceful shutdowns.
- [BUGFIX] Fix entrypoint spinning at 100% CPU when nginx/supervisord is OOM-killed.
- [BUGFIX] Throttle repeated Redis-failure logs in
metrics,sessions, andbadbehavior. - [BUGFIX] Fix metrics Redis sync cascading failures after mid-cycle connection drops by adding auto-reconnect with circuit breaker.
- [BUGFIX] Fix dead Redis connections being returned to the keepalive pool.
- [BUGFIX] Fix
cachestore:set()silently dropping cache writes in non-cosocket phases. - [BUGFIX] Fix
cachestore:del_redis()calling a non-existentclusterstore:del()method. - [BUGFIX] Move
cachestore:update()IPC polling to valid Lua phases to remove repeated retry warnings. - [BUGFIX] Fix
badbehavior:log()crash caused byresty.lockcallingngx.sleep()inlog_by_lua*. - [BUGFIX] Fix whitelist default-server crash caused by
resty.lockcallingngx.sleep()inset_by_lua*. (Fixes #2583) - [BUGFIX] Fix
is_cosocket_available()SSL phase detection and add missing yieldable phases. - [BUGFIX]
badbehavior: do not increment counters for already-banned IPs. (Fixes #3448) - [BUGFIX] Fix
ngx.exit(nil)crash whenDENY_HTTP_STATUSis missing. (Fixes #2516) - [BUGFIX] Fix unbanning IPs for stream services by refreshing local ban cache from Redis after unban. (Fixes #2516)
- [BUGFIX] Fix BunkerNet
log_stream()crash in stream context wherengx.req.get_headers()is unavailable. - [BUGFIX] Fix
robots.txtandsecurity.txtplugins running expensive initialization on every request. (Fixes #3155) - [BUGFIX] Fix
securitytxtRFC 9116 compliance.- Fix default
Canonical:URL. - Emit
Expires:as UTC with trailingZ. - Rename field to
Acknowledgments:. - Cache auto-generated expiry per server.
- Fix default
- [BUGFIX] Fix Post-Quantum Cryptography auto-detection on OpenSSL 3.5+ when
SSL_ECDH_CURVE=auto. - [BUGFIX] Fix RC regression in
@bwerror*handling where real 4xx/5xx rendering could be broken. (Fixes #3490) - [MISC] Improve
JobSchedulerper-job failure tracking.
[FEATURE]
- [FEATURE]
misc: addMAX_HEADERS, default100, to cap request header lines. - [FEATURE]
reverseproxy: add per-backendREVERSE_PROXY_HTTP_VERSION.- Default:
1.1. - Accepted values:
1.0,1.1,2. - WebSocket upstreams remain pinned to HTTP/1.1.
- Default:
- [FEATURE]
templates: bundleduiandapitemplates now setREVERSE_PROXY_KEEPALIVE=yes. - [FEATURE]
ui: align Web UI sessions with the Luasessionsplugin model.SESSION_LIFETIME_HOURS, default12, controls sliding idle TTL.SESSION_ABSOLUTE_HOURS, default168, enforces a hard cap.SESSION_ROLLING_HOURS, default0, optionally regenerates session IDs periodically.
- [FEATURE] Add multisite
SESSIONS_DOMAINto share antibot/challenge state across sibling subdomains. (Fixes #3415) - [FEATURE]
metrics/misc: allowk/mshorthand for metrics and datastore size settings. - [MISC] Accept
g/Gsuffix on shared memory size settings and normalize to megabytes at template rendering time. - [MISC] Allow custom uppercase HTTP methods containing underscores and dashes in
ALLOWED_METHODS. (Fixes #3411) - [MISC] Update default
Permissions-Policywithlocal-network,local-network-access, andloopback-network. - [FEATURE] Let's Encrypt: add
LETS_ENCRYPT_MAX_LOG_BACKUPS, default50, to cap certbot log rotation. - [FEATURE]
installer: add modern inline TUI prompts throughgum.- Dispatch order:
gum→ pre-installedwhiptail→ plainread. - Controlled by
--tui,--no-tui, andBW_INSTALL_TUI.
- Dispatch order:
- [FEATURE]
installer: post-install "Next steps" now prints the detected host IPv4 instead ofyour-server-ip. (Fixes #3527)- Adds
--server-ip <IP>andSERVER_IP_INPUT. - Interactive installs show a menu when multiple global IPv4s are detected.
- Adds
[PERF]
[UI]
- [UI] List pages: restore unrestricted
10/25/50/100page-size dropdown. - [UI] List pages: header checkbox now selects the current page only.
- [UI] List pages: add opt-in "Select all N matching" banner for bulk actions across pages. (Fixes #3513)
- [UI] Reports and Bans pages: CSV/Excel exports now include every column and honor active search and SearchPanes filters. (Fixes #3489)
- [UI] Service edit page: restore non-UI-method settings and template defaults on advanced/raw save.
- [UI] Service edit page: keep raw-mode draft toggle and the
IS_DRAFT=line synchronized. - [UI] Add import/export for custom configurations, including optional
.zipbundles attached to service exports. - [UI] Fix "Blocked Requests by Country" map coloring.
- [UI] Fix service template switching so selected template defaults apply immediately while preserving customized fields. (Fixes #3241)
- [UI] Fix multiselect dropdown being clipped in template wizard steps. (Fixes #3401)
- [UI] Fix multiselect settings not displaying or applying values correctly in the template editor and service creation wizard.
- [UI] Fix multiselect and multivalue settings resetting to defaults when all options are unchecked.
- [UI] Fix Reports page search not matching Request ID.
- [UI] Fix Reports page IP hit counts decreasing when filtering by IP. (Fixes #3407)
- [UI] Prevent reload and worker-restart infinite loops when the database is read-only or configuration flag reset fails.
- [UI] Check the database for
USE_REDISbefore showing the filesystem session backend warning. - [UI] Launch
tmp-gunicornwithenv -u LOG_FILE_PATHso bootstrap UI logs do not collide with main UI logs.
[API]
- [API] Fix
update_config_uploadresetting a custom config's service scope to global when the caller did not request a service move.
[AUTOCONF]
- [AUTOCONF] Fix Docker/Podman instance discovery looping on
No instance found.- Health falls back to run-state when
State.Healthis missing. - Environment parsing is hardened.
- The wait loop now logs exceptions instead of swallowing them.
- Health falls back to run-state when
- [AUTOCONF] Fix Docker socket proxy restarts triggering deletion of all instances and services.
- [AUTOCONF] Fix Docker API errors being silently swallowed as empty container/service lists.
- [AUTOCONF] Fix Docker healthcheck exec events causing endless config regeneration and NGINX reloads.
- [AUTOCONF] Fix multiple Kubernetes Ingress/Route resources for the same hostname overwriting each other instead of merging paths.
- [AUTOCONF] Fix Kubernetes ingress rules being dropped when backend Services are not visible yet.
- Missing backends are retried with exponential backoff.
- Configuration apply is retriggered once backends appear.
- [AUTOCONF] Relax empty
SERVER_NAMEguard for autoconf-owned full teardowns. - [AUTOCONF] Add
AUTOCONF_DISABLE_CLEANUP, defaultno, to convert removed orchestrator services to draft instead of deleting them. - [BUGFIX]
Configuratornow supplements its internal server list from the databaseServicestable in multisite mode.
[ALL-IN-ONE]
- [ALL-IN-ONE] Update CrowdSec to 1.7.8.
- [ALL-IN-ONE] Embedded Redis now boots from generated
/var/lib/bunkerweb/redis-runtime.conf./etc/redis.confremains authoritative.- Environment variables only fill missing directives.
- Supported variables include
REDIS_MAXMEMORY,REDIS_MAXMEMORY_POLICY,REDIS_APPENDONLY,REDIS_SAVE,REDIS_SAVE_<N>, andREDIS_PASSWORD.
- [ALL-IN-ONE] Default Redis
maxmemory-policychanged fromallkeys-lrutovolatile-lru.- Applied to the AIO entrypoint, Linux installer, bundled compose examples, and Redis Best Practices docs.
- Helps preserve sessions and timed bans under memory pressure.
- [ALL-IN-ONE] Python services now log only to container stdout/stderr.
service-log-wrapper.shprefixes each line with[SERVICE].- Control characters are stripped.
HIDE_SERVICE_LOGSis honored.- No on-disk service log files are written.
[LINUX]
- [LINUX] Add Fedora 44 support.
[DOCS]
- [DOCS] Add
llms.txtandllms-full.txtgeneration through a MkDocs post-build hook.
[DEPS]
- [DEPS] NGINX updated to v1.30.1.
- [DEPS] ModSecurity updated to v3.0.15.
- [DEPS] Mbed TLS updated to v4.1.0.
- [DEPS] libinjection updated to v4.0.0.
- [DEPS] coreruleset-v3 updated to v3.3.9.
- [DEPS] coreruleset-v4 updated to v4.26.0.
- [DEPS] LuaJIT updated to v2.1-20260415.
- [DEPS] lua-resty-string updated to v0.17.
- [DEPS] lua-cjson updated to v2.1.0.17.
- [DEPS] Brotli updated to v1.2.0.
- [DEPS] headers-more-nginx-module updated to v0.39.
- [DEPS] CrowdSec updated to v1.7.8.
[CONTRIBUTION]
- [CONTRIBUTION] Thank you @harshadkhetpal for exception handling improvements in the
autoconfentrypoint. (#3421) - [CONTRIBUTION] Thank you @Simonmiz for the German Web UI translation. (#3422)
- [CONTRIBUTION] Thank you @daemon-byte for adding the Cap.js self-hosted proof-of-work antibot mode. (#3454)