** Description changed:
Environment:
- - OS: Ubuntu 24.04 LTS (noble), arm64
- - nginx package: nginx 1.24.0-2ubuntu7.10
- - nginx flavor: nginx-extras 1.24.0-2ubuntu7.10
- - headers-more package: libnginx-mod-http-headers-more-filter 1:0.37-2build1
- - Architecture: arm64
- - TLS/HTTP: HTTPS with HTTP/2 enabled
+ - OS: Ubuntu 24.04 LTS (noble), arm64
+ - nginx package: nginx 1.24.0-2ubuntu7.10
+ - nginx flavor: nginx-extras 1.24.0-2ubuntu7.10
+ - headers-more package: libnginx-mod-http-headers-more-filter 1:0.37-2build1
+ - Architecture: arm64
+ - TLS/HTTP: HTTPS with HTTP/2 enabled
- Summary:
- When the headers-more dynamic module is enabled and `more_set_headers
"Server: TJ Server";` is configured, nginx workers crash repeatedly while
serving HTTP/2 requests.
- Clients see intermittent `ERR_CONNECTION_RESET`, `ERR_EMPTY_RESPONSE`,
WebSocket close code `1006`, and curl may report an invalid HTTP/2 header field.
+ Summary:
+ When the headers-more dynamic module is enabled and `more_set_headers
"Server: TJ Server";` is configured, nginx workers crash repeatedly while
serving HTTP/2 requests.
+ Clients see intermittent `ERR_CONNECTION_RESET`, `ERR_EMPTY_RESPONSE`,
WebSocket close code `1006`, and curl may report an invalid HTTP/2 header field.
- The issue disappears when the headers-more module/directive is
+ The issue disappears when the headers-more module/directive is
disabled while keeping HTTP/2 enabled. Normal nginx `add_header`
security headers continue to work correctly.
- Relevant configuration:
- ```nginx
- include /etc/nginx/modules-enabled/*.conf;
+ Relevant configuration:
+ ```nginx
+ include /etc/nginx/modules-enabled/*.conf;
http {
11:27:57 [77/1841]
- server_tokens off;
- more_set_headers "Server: TJ Server";
+ server_tokens off;
+ more_set_headers "Server: TJ Server";
- server {
- server_name mystock.emoco.kr;
+ server {
+ server_name .....;
- listen 443 ssl http2;
- ssl_certificate
/etc/letsencrypt/live/mystock.emoco.kr/fullchain.pem;
- ssl_certificate_key
/etc/letsencrypt/live/mystock.emoco.kr/privkey.pem;
+ listen 443 ssl http2;
+ ......
- add_header X-Content-Type-Options "nosniff" always;
- add_header X-Frame-Options "SAMEORIGIN" always;
- add_header Referrer-Policy "strict-origin-when-cross-origin" always;
- add_header Permissions-Policy "camera=(), microphone=(),
geolocation=()" always;
- add_header Strict-Transport-Security "max-age=31536000" always;
+ add_header X-Content-Type-Options "nosniff" always;
+ add_header X-Frame-Options "SAMEORIGIN" always;
+ add_header Referrer-Policy "strict-origin-when-cross-origin" always;
+ add_header Permissions-Policy "camera=(), microphone=(),
geolocation=()" always;
+ add_header Strict-Transport-Security "max-age=31536000" always;
- location / {
- proxy_pass http://localhost:3000;
- proxy_http_version 1.1;
- proxy_set_header Host $host;
- proxy_set_header X-Forwarded-Proto $scheme;
- }
+ location / {
+ proxy_pass http://localhost:3000;
+ proxy_http_version 1.1;
+ proxy_set_header Host $host;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ }
- location /api {
- proxy_pass http://localhost:8000;
- proxy_http_version 1.1;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "upgrade";
- proxy_set_header Host $host;
- proxy_read_timeout 86400s;
- proxy_send_timeout 86400s;
- }
- }
- }
+ location /api {
+ proxy_pass http://localhost:8000;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
+ proxy_set_header Host $host;
+ proxy_read_timeout 86400s;
+ proxy_send_timeout 86400s;
+ }
+ }
+ }
- Actual behavior:
- After enabling more_set_headers "Server: TJ Server"; with HTTP/2, nginx
workers crash repeatedly.
+ Actual behavior:
+ After enabling more_set_headers "Server: TJ Server"; with HTTP/2, nginx
workers crash repeatedly.
- systemd journal examples:
+ systemd journal examples:
- nginx[1697786]: double free or corruption (!prev)
- nginx[1697785]: worker process 1697786 exited on signal 6 (core dumped)
- nginx[1697785]: worker process 1697788 exited on signal 11 (core dumped)
+ nginx[1697786]: double free or corruption (!prev)
+ nginx[1697785]: worker process 1697786 exited on signal 6 (core dumped)
+ nginx[1697785]: worker process 1697788 exited on signal 11 (core dumped)
- curl example:
+ curl example:
- curl: (92) Invalid HTTP header field was received: frame type: 1,
+ curl: (92) Invalid HTTP header field was received: frame type: 1,
stream: 1, name: [], value: [...]
- Browser symptoms:
+ Browser symptoms:
- GET /icon.svg net::ERR_CONNECTION_RESET
- GET /api/... net::ERR_EMPTY_RESPONSE
+ GET /icon.svg net::ERR_CONNECTION_RESET
+ GET /api/... net::ERR_EMPTY_RESPONSE
WebSocket closed: 1006
- Expected behavior:
- nginx should not crash. more_set_headers should either set the Server
header safely for HTTP/2 responses or reject/ignore unsupported header
manipulation without corrupting
- HTTP/2 response headers or causing worker process crashes.
+ Expected behavior:
+ nginx should not crash. more_set_headers should either set the Server
header safely for HTTP/2 responses or reject/ignore unsupported header
manipulation without corrupting
+ HTTP/2 response headers or causing worker process crashes.
- Reproduction observations:
+ Reproduction observations:
- - HTTP/2 enabled + headers-more disabled: stable
- - HTTP/2 enabled + normal add_header security headers: stable
- - HTTP/2 enabled + server_tokens off: stable
- - HTTP/2 enabled + more_set_headers "Server: TJ Server";: worker crashes
and invalid HTTP/2 headers
- - Disabling only headers-more while keeping HTTP/2 enabled stops the crashes
+ - HTTP/2 enabled + headers-more disabled: stable
+ - HTTP/2 enabled + normal add_header security headers: stable
+ - HTTP/2 enabled + server_tokens off: stable
+ - HTTP/2 enabled + more_set_headers "Server: TJ Server";: worker crashes
and invalid HTTP/2 headers
+ - Disabling only headers-more while keeping HTTP/2 enabled stops the crashes
- Package versions:
+ Package versions:
- nginx version: nginx/1.24.0 (Ubuntu)
+ nginx version: nginx/1.24.0 (Ubuntu)
- nginx 1.24.0-2ubuntu7.10
- nginx-common 1.24.0-2ubuntu7.10
- nginx-extras 1.24.0-2ubuntu7.10
- libnginx-mod-http-headers-more-filter 1:0.37-2build1
+ nginx 1.24.0-2ubuntu7.10
+ nginx-common 1.24.0-2ubuntu7.10
+ nginx-extras 1.24.0-2ubuntu7.10
+ libnginx-mod-http-headers-more-filter 1:0.37-2build1
- Workaround:
- Disable the headers-more module/directive and keep only:
+ Workaround:
+ Disable the headers-more module/directive and keep only:
- server_tokens off;
+ server_tokens off;
- This hides the nginx version but leaves Server: nginx.
+ This hides the nginx version but leaves Server: nginx.
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2155992
Title:
headers-more dynamic module crash | Signal 11 and 6 Crashes due to
ABI breakage on 1.24.0-2ubuntu7.10 and 1.28.3-2ubuntu1.3
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/nginx/+bug/2155992/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs