Total.js Platform
Total.js Platform

Total.js Platform news and tutorials

Node.js Security Vulnerabilities

Node.js Security Vulnerabilities: What Happened and What We Have Done

On October 21, 2026, the Node.js project published security releases for the 22.x, 24.x and 26.x lines. They fix ten vulnerabilities, four of them rated high, including an issue in Brotli decompression. The news is also interesting because AI-assisted security research helped uncover a flaw in technology used by applications around the world.

We reviewed every issue against Total.js 4 and Total.js 5. This post explains what happened, what we changed in both frameworks, and what we recommend you do.

What happened?

Node.js fixed these issues in the release (full details in the official advisory):

SeverityComponentWhat can go wrong
HighBrotli decoder (node:zlib)Specially crafted compressed input can cause an out-of-bounds write. Depending on how an application processes untrusted data, the impact ranges from a crash to memory disclosure.
HighDNS (dns.resolve*())A hostname containing a NUL byte is truncated, so a name that passed validation can resolve to a different one.
High / MediumTLS (tls.checkServerIdentity())IPv4 addresses written in unusual ways (non-ASCII digits, leading zeros, 0x7f.0.0.1, 127.1) can be interpreted differently by the certificate check and by the operating system.
MediumHTTP keep-alive agentAn unsolicited response waiting on a reused socket can be accepted as the answer to the next request.
Medium / LowSnapshots, permission model, ZIP readingSpecific features that most applications do not use.

The Brotli flaw was reported by OpenAI's Codex Security, an AI-assisted tool, together with two security researchers, and fixed by Node.js maintainers. It is a good reminder of how AI-assisted tools are changing security research: they can help investigators find suspicious behavior in complex code, while human researchers validate the findings and work with maintainers on fixes.

What does this mean for Total.js?

These are Node.js runtime issues, not vulnerabilities in the Total.js architecture. Total.js does not depend on a specific Node.js version, and we want to keep it that way: your applications run on the Node.js you choose, so you decide when to update it.

What we can do is make the framework safe by itself, whatever Node.js version you run. We went through the code and covered every case that depends on us:

  • Brotli: Total.js only decompresses gzip and deflate, so the framework itself is not exposed. If your own application decompresses Brotli data with node:zlib, update Node.js.
  • DNS and TLS hostnames: this is where we made changes, described below.
  • Keep-alive agent: this one is fixed inside Node.js, so the only fix is to update Node.js.
  • Snapshots, permission model and ZIP reading: the framework does not use them. If your application does, update Node.js.

What we changed in Total.js 4 and Total.js 5

Both frameworks now normalize and validate hostnames before they reach DNS or a TLS connection:

  • International names are converted to their ASCII (punycode) form.
  • IP addresses written in unusual ways are converted to the canonical dotted form (127.1 and 0x7f.0.0.1 become 127.0.0.1), so the certificate check and the operating system see the same address.
  • Hostnames with NUL bytes, spaces or invalid addresses are rejected with a clear Invalid hostname error instead of reaching the network.

Where it applies:

  • REQUEST(), U.resolve() and HTTP redirects (a server can no longer send a request to an unusual address through a Location header).
  • U.connect(), which is also used by LDAP().
  • The WebSocket client (Total.js 4).
  • The SMTP server used by the mail module.
  • Two new utilities for your own code: U.validhost(host) and U.tohost(host).

Your existing configuration keeps working. Normal hostnames, normal IP addresses, IPv6 and punycode names behave exactly as before. We also did not raise the minimum Node.js version: the changes were tested with the full test suite of each framework on Node.js 14, 16, 18, 19, 20, 22, 24 and 26.

These changes are included in the latest update of each framework and described in its changelog.

You are covered even if you cannot update Node.js right away. The hostname issues (DNS and TLS) are handled by the framework itself, so Total.js 4 and Total.js 5 protect your application against them on the Node.js version you already run. We still recommend updating Node.js: it also fixes the rest of the release, such as the keep-alive issue, which only the runtime can address.

What should developers do?

1. Update your Node.js runtime to a security-patched release. The corrected versions are:

  • Node.js 22.23.4 or later in the 22.x line
  • Node.js 24.22.1 or later in the 24.x line
  • Node.js 26.12.1 or later in the 26.x line

If you use Docker, update and rebuild your application image: updating the host alone does not update Node.js inside a container, and tags such as lts or 24 only change when you pull and rebuild. Restart your applications after deploying the patched runtime and verify the active version with node --version.

2. Update Total.js. Take the latest release of Total.js 4 or Total.js 5 and check the Total.js GitHub for new versions of the applications you use. Our apps and packages are being updated to the new framework releases, so it is worth reviewing the repositories of the ones you run and updating them.

3. Review your own code. If your application decompresses Brotli data, resolves or connects to hostnames that come from users, or uses Node.js snapshots or the permission model, treat the Node.js update as a priority.

Security is a shared responsibility

This incident illustrates both the value of modern security research and the importance of timely updates. We will continue to follow upstream Node.js security advisories and act where the framework can help.

Our recommendation to the Total.js community is simple: update Node.js to a corrected release, update Total.js, and check GitHub for new versions of your applications.

References