]> git.kaiwu.me - nginx.git/commit
Fixed uninitialized memory read caused by stale regex captures.
authorPavel Pautov <p.pautov@f5.com>
Fri, 15 May 2026 07:48:50 +0000 (00:48 -0700)
committerRoman Arutyunyan <arutyunyan.roman@gmail.com>
Wed, 15 Jul 2026 15:51:22 +0000 (19:51 +0400)
commit0cca8e055a2d909f1a00c2071665b502ec2fe94c
treeb1682acddaf370b2a2efd377fc710824f372b1ce
parenta8289aa69c74f7e664ad63b91c17aa2a554f190f
Fixed uninitialized memory read caused by stale regex captures.

When ngx_http_regex_exec() reallocates r->captures array, it doesn't update
r->ncaptures value, if regex didn't match. So the next use of unnamed regex
capture triggers uninitialized read and potential buffer overrun.

This config demonstrates the issue:
    map test $my_map {
        volatile;

        ~mismatch(.*) 1; # reallocates r->captures in subrequests

        default "";
    }

    server {
        location ~(.*) { # sets r->ncaptures
            slice 50;

            # $1 will read from uninitialized memory in slice subrequests
            proxy_set_header Test $my_map$1;

            proxy_set_header Range $slice_range;
            proxy_pass http://backend;
        }
    }

The issue was introduced by 746fba0d79c6.
src/http/ngx_http_variables.c