Security1 publisher2 min readPublished
One unauthenticated packet crashes TDengine, the database behind factory and EV telemetry
Ridge Security disclosed CVE-2026-42542, a flaw that lets an unauthenticated attacker crash a TDengine server with one malformed packet on port 6030. A patch shipped in 3.4.1.6, and the only proven payoff is a crash.
The Watch · Security desk

What happened
- Ridge Security's research team found CVE-2026-42542, rated CVSS 7.5, in TDengine, an open-source time-series database used behind industrial telemetry, energy, utility and EV-charging systems.
- An unauthenticated remote attacker crashes the taosd server process with one malformed packet to TCP port 6030, needing no credentials or valid session.
- The root cause is an integer underflow in a length calculation, a decades-old bug class that is easy to miss in review.
- The maintainers patched it in version 3.4.1.6 under coordinated disclosure; versions 3.4.0.0 through 3.4.1.5 are affected.
Compiled by The WatchSomething wrong?How this is made
Why it matters
- exposure Exposure hinges on network reach: an affected instance with port 6030 open to untrusted networks can be dropped at will by an anonymous sender.
- constraint The only disclosed impact is a crash. That makes this an availability problem for operations dashboards.
- decision Operators choose now between upgrading to 3.4.1.6 and firewalling port 6030 off networks that do not need to reach it.
The chain is short. taosd, the TDengine server, speaks a custom binary RPC protocol on TCP port 6030 by default, and every message opens with a fixed header called STransMsgHead that carries a length field, msgLen. [5] Before any authentication runs, the server calls uvConnMayGetUserInfo() to read the user identity out of the inbound message, and to find the payload it subtracts the header size from msgLen. [6]
msgLen is a signed 32-bit integer taken straight from the attacker. The header size is an unsigned size_t. C promotes the signed value to unsigned, so when msgLen is smaller than the required offset, either 64 or 192 bytes depending on the message variant, the subtraction does not go negative. It wraps to a value near 2^64 on a 64-bit host. [7] That number is then handed to memcpy() as a length, memcpy runs off the end of the heap allocation, and the process exits with a segmentation fault. [8]
An attacker needs no credentials and no valid session to send that packet. [9] Ridge Security describes a crash, not code execution: taosd dies and the database goes down. [8] The CVSS score of 7.5 reflects a network-reachable availability hit, and the account comes from the team that found the bug and reported it to the maintainers. [3][2]
The fix is about three lines. Validate that the message length is at least the header plus the offset before doing any arithmetic on it, a check that now sits at the top of uvConnMayGetUserInfo() in 3.4.1.6. [11] Versions 3.4.0.0 through 3.4.1.5 need it, and Ridge Security's other instruction is to keep port 6030 off any network that does not need to reach it. [4][10]
Integer underflow in a length calculation is one of the oldest bug classes there is. It survives because length minus header size is not a line that stands out in review; it becomes a vulnerability only when a signed, attacker-controlled operand meets an unsigned one. [12] The parsing runs before authentication because it has to. The server reads the credentials out of the packet before it can verify them, so the length check has to be right at the first byte. [13]
TDengine sits behind SCADA systems, EV charging networks, building automation and telecom monitoring, ingesting large volumes of machine data. It is internal plumbing, so it tends to be installed once and left alone. [14]
What to watch
- Whether CISA or the maintainers publish an exposure count or add CVE-2026-42542 to a known-exploited list.
- Whether a proof-of-concept packet appears publicly, lowering the bar to mass scanning of port 6030.
- Whether the same signed-versus-unsigned length pattern turns up in other taosd RPC handlers beyond uvConnMayGetUserInfo().