Ah, NGINX. The trusty web server that's been quietly powering the internet like that reliable friend who always shows up with pizza... until one day they accidentally flood your kitchen with malicious code because someone whispered the wrong variable name. Ladies and gentlemen, welcome to CVE-2026-8711, the latest episode in the never-ending soap opera titled “How Did We Let Clients Control Stuff Again?”In this thrilling installment, unauthenticated remote attackers can trigger a heap-based buffer overflow in NGINX's JavaScript module (njs). Yes, you read that right. Your fancy reverse proxy that’s supposed to protect everything is now vulnerable to a classic “oops, I overflowed the heap” moment that can lead to delicious denial-of-service crashes and, on poorly configured systems (looking at you, ASLR haters), full remote code execution in the worker process.
Picture this: Some well-meaning admin enables js_fetch_proxy with client-controlled variables. You know, innocent little things like $http_x_user or $http_x_password. Because nothing says "secure" like letting randos on the internet help build your proxy URLs.Then they hook it up to an NJS function that calls ngx.fetch(). Boom. It's like handing a toddler a flamethrower and saying, "Just don't point it at the curtains."An attacker crafts a special HTTP request, and suddenly the NGINX worker is having a very bad day – heap memory gets corrupted, the process crashes, restarts, crashes again... It's the digital equivalent of that one friend who keeps "accidentally" refreshing the page during your important Zoom call. DoS achieved with style.
And if ASLR is disabled or half-heartedly configured? Congratulations! You might win the grand prize: arbitrary code execution. Because why settle for crashing servers when you can redecorate them with malware?
CVE: CVE-2026-8711 (sounds like a fancy hotel room where the minibar is full of exploits)
CWE: 122 – Heap-based Buffer Overflow (the "I didn't check the size again" special)
Affected: njs versions 0.9.4 through 0.9.8
Fixed in: njs 0.9.9 (yes, they finally counted to 9 properly)
F5, the proud parents of NGINX, confirmed it's limited to the data plane. The control plane is safe, probably sitting in a corner sipping coffee and judging everyone. Other big F5 products like BIG-IP are apparently not invited to this vulnerability party.
NGINX is famous for being lightweight, fast, and stable. Yet here we are in 2026, still discovering that mixing JavaScript, client-controlled variables, and proxying is like mixing Red Bull, tequila, and bad decisions. Who could've predicted that letting strangers influence your fetch() calls would end poorly?It's almost as if web servers keep forgetting the golden rule: Never trust the client. Not even a little. Not even if they say "pretty please with $http_x_hax on top."
What Should You Do? (Besides Laugh/Cry)
Upgrade immediately to NGINX JavaScript 0.9.9 or newer. Yes, right now. Put down the meme and patch.
If you can't upgrade (because reasons), audit your configs for js_fetch_proxy with client variables. Refactor or remove those patterns before someone refactors your entire infrastructure.
Enable ASLR properly. It's 2026, people. Stop living like it's 1999.
In summary, another day, another buffer overflow reminding us that software is just a fancy way of saying "a bunch of compromises waiting to be exploited." NGINX remains awesome... when it's not busy heap-spraying itself into oblivion.Stay patched, friends. And maybe stop letting random headers build your URLs. That's not "dynamic" – that's "dynamically owned."







