Attacks & threats

7 min readUpdated

What is the ping of death?

Quick answer

The ping of death is a historic denial-of-service attack from 1996-1997 in which a single malformed packet crashed, froze or rebooted the target. An attacker sent ICMP fragments that reassembled into an IP packet larger than the 65,535-byte maximum, overflowing buffers in stacks that never checked the reassembled size. Vendors patched it within months and modern stacks are immune, but abusing fragment reassembly did not die — Teardrop, FragmentSmack and the Windows IPv6 flaws are its descendants.

01What is the ping of death?

The ping of death is a classic denial-of-service attack in which one carefully malformed packet is enough to take a machine down — no flood required. It became public in October 1996, and the web page that tracked it soon listed more than 18 major operating systems as vulnerable, along with Macs, NetWare servers, printers and routers. Windows 95 and NT were notorious as the launch pad, because their ping command would build the illegal packet.

An IPv4 packet can be at most 65,535 bytes, a limit set by the 16-bit total-length field in the header described in RFC 791. A host cannot send a single frame that large, so the attacker fragmented an oversized payload — often via the ping command, hence the name — and let the victim reassemble the pieces. Stacks that never checked whether the reassembled total would exceed the limit overflowed a buffer or a 16-bit length variable and crashed, froze or rebooted.

CERT issued advisory CA-1996-26 on 18 December 1996. Fixes arrived fast — the Linux patch within hours — and within months BSD, Linux, Windows and commercial Unix vendors had shipped updates that validate the reassembled length and discard malformed sets. It is a solved problem on anything maintained this century.

02How the original attack worked

IP fragmentation splits a large packet into pieces that each carry an offset saying where they belong in the reassembled whole. The receiver buffers the fragments and stitches them back together using those offsets.

The attack set the offset and length of the final fragment so that offset plus payload exceeded 65,535 bytes. A stack that trusted the fragments and copied them into a fixed buffer wrote past the end of it. The result was memory corruption and, typically, an immediate crash, freeze or reboot — denial of service with a single crafted message.

The defence is simple once known: before reassembling, check that the highest fragment offset plus its length cannot exceed the maximum packet size, and drop the set if it does. Every current stack does this, which is why you can no longer ping a modern host to death.

03How to spot ping-of-death packets in a capture

Look for a fragment whose offset plus its length would place data beyond byte 65,535 of the reassembled packet. No legitimate sender produces one, so a single match is a clear signature. A patched host discards it harmlessly, but seeing it tells you someone is probing for legacy stacks — worth knowing if old printers, embedded controllers or unmaintained appliances share the network.

The two filters below were validated with tcpdump 4.99.3 against a crafted capture on Debian 12: the first matched every fragment, the second only the one whose offset and length overflowed the limit. Overlapping fragments in the Teardrop style cannot be caught by a single-packet filter, because spotting them means comparing fragments that share an ID; that takes a reassembly-aware intrusion-detection system.

Spotting malformed fragments in a capture (BPF)
# any fragment (More-Fragments set or non-zero offset)
tcpdump -ni eth0 'ip[6:2] & 0x3fff != 0'

# fragments whose offset+length would exceed 65535 bytes
# (reassembled size overflow — the ping-of-death signature)
tcpdump -ni eth0 '((ip[6:2] & 0x1fff) * 8) + ip[2:2]
                  - ((ip[0] & 0x0f) * 4) > 65535'

04Modern cousins: the idea did not die

The specific 1996 bug is gone, but abusing fragment reassembly and malformed-packet parsing remains a live category. The table lists the notable descendants, each traceable to a primary source.

Name / CVEYearMechanismEffectFixed by
Ping of death (CA-1996-26)1996Reassembled IP/ICMP packet > 65,535 bytesCrash / freeze / rebootVendor patches 1996-1997
Teardrop (CERT CA-1997-28)1997Overlapping IP fragment offsetsCrash on buggy reassemblyOS patches; no simple workaround
FragmentSmack (CVE-2018-5391)2018Crafted fragments with random offsets force worst-case reassemblyCPU exhaustion DoSKernel patch + fragment thresholds
Bad Neighbor (CVE-2020-16898)2020ICMPv6 Router Advertisement RDNSS option, even lengthStack overflow, BSOD, potential RCEMicrosoft, Oct 2020
Windows TCP/IP (CVE-2024-38063)2024IPv6 packet handling, integer underflowRemote code executionMicrosoft, Aug 2024

05Teardrop and fragmentation attacks

Teardrop, disclosed alongside Land in CERT CA-1997-28, is the ping of death's closest sibling. Instead of an oversized total it sent overlapping fragment offsets — pieces that claimed to occupy the same bytes. Reassembly code that computed a copy length by subtracting offsets could underflow and crash. There was no clean workaround at the time; the fix was in the kernel.

FragmentSmack (CVE-2018-5391) modernised the theme into a resource attack rather than a crash: a low rate of specially modified fragments forced the Linux reassembly code into its most expensive path, saturating the CPU. The mitigation that does not need a patch is to cap the reassembly memory — `net.ipv4.ipfrag_high_thresh` and `net.ipv4.ipfrag_low_thresh`, plus their IPv6 counterparts — though Red Hat presented this only as a stop-gap that reduces CPU load during an attack, with the fixed kernel as the real remedy.

The practical lesson is that fragmentation is a persistent soft spot. Where you control it, dropping or rate-limiting non-initial fragments at the edge removes a whole class of these attacks; this is also one of the levers used against carpet-bombing floods.

  • Keep operating systems and network-device firmware current — these are code bugs, and the fix is the patch
  • Where supported, enable reassembly limits so a fragment flood cannot exhaust memory or CPU
  • Drop obviously malformed fragment sets at a filtering layer with the capacity to inspect them
  • Disable IPv6 only if you genuinely do not use it; several modern cousins are IPv6-specific, but disabling a protocol you need causes its own outages

06Can a WAF or reverse proxy help?

Be honest about this one: the classic ping of death and its reassembly cousins are bugs in the target's own network stack, and the real fix is patching that stack. A reverse proxy or WAF operating at the HTTP layer never sees raw IP fragments destined for your origin, so it cannot filter them for you. Virtual patching at a WAF does not change that either, because it recognises an attack inside an HTTP request, not in the IP packets that carry it.

What upstream network filtering can do is drop malformed and abusive fragment traffic before it reaches a protected address at all — useful for the fragment-flood variants like FragmentSmack. That is a property of routed Layer 3/4 filtering — the model behind GRE transit, which is coming soon — not of an application proxy. For the remote-code-execution cousins such as the Windows IPv6 flaws, no edge device substitutes for installing the vendor update. If you want to track those specifically, they live in the vulnerabilities centre.

Questions

Frequently asked questions

Not against maintained systems. Operating systems have validated reassembled packet sizes since 1997, so the original attack cannot crash a current stack. The residual risk is unpatched legacy devices — old printers, embedded gear, industrial equipment — that never received the fix and may still mishandle oversized or malformed fragments.

Vendors added a check during fragment reassembly: before stitching fragments together, confirm that the highest offset plus its length cannot exceed the 65,535-byte maximum, and discard the set if it would. This prevents the buffer overflow that caused the crash. The fix shipped across BSD, Linux, Windows and commercial Unix within months of the 1996 advisory.

Both abuse IP fragment reassembly. The ping of death reassembled to an oversized total packet. Teardrop sent overlapping fragment offsets, so the pieces claimed the same bytes and reassembly maths underflowed. Both crashed vulnerable stacks of the era; both are fixed in modern kernels.

Not literally, but they are the same lineage: single-packet flaws in how a stack parses network data. Bad Neighbor (2020) mishandled an ICMPv6 Router Advertisement option length; the 2024 Windows TCP/IP flaw underflowed an integer handling IPv6. Both could crash or potentially run code, and both are fixed by vendor updates, not by edge filtering.

You do not need to on a patched system — the stack already rejects the malformed packets. Dropping oversized or malformed fragments at a filter adds defence in depth, but it is no substitute for patching, and it will not address the remote-code-execution cousins, which require the vendor update to be installed.

Sources

Sources and verification

tcpdump fragment filters validated with tcpdump 4.99.3 against a crafted pcap, and ipfrag sysctl names confirmed under /proc/sys/net/ipv4, on Debian 12, October 2026. CVE details and dates taken from NVD and vendor advisories; CISA KEV status checked October 2026.

  1. 01CERT Advisory CA-1996-26: Denial-of-Service Attack via ping · CERT/CC (SEI)
  2. 02CERT Advisory CA-1997-28: IP Denial-of-Service Attacks (Teardrop, Land) · CERT/CC (SEI)
  3. 03The Ping of Death page (M. Bremford, October 1996, mirrored) · insecure.org
  4. 04CVE-2018-5391 (FragmentSmack) · NVD
  5. 05SegmentSmack and FragmentSmack (CVE-2018-5390, CVE-2018-5391) · Red Hat
  6. 06CVE-2020-16898 (Bad Neighbor) · NVD
  7. 07Beware the Bad Neighbor: analysis of CVE-2020-16898 · Quarkslab
  8. 08CVE-2024-38063: Windows TCP/IP Remote Code Execution · Microsoft MSRC
  9. 09RFC 791: Internet Protocol · IETF

Last updated