Ping of death and teardrop: crashing a system with broken packets
A ping of death is a denial-of-service attack that sends a ping larger than the IP protocol allows, split into fragments, so that the receiving system overflows a buffer when it puts the pieces back together and crashes. A teardrop attack uses the same reassembly step with fragments whose offsets overlap. Both need almost no traffic: one malformed packet can be enough. Both are old, and both keep returning in new code.
Quick facts
- Type
- Malformed-packet denial of service, at the network layer
- Ping of death
- An ICMP echo reassembled to more than 65,535 octets, the maximum an IP datagram may have (RFC 791)
- Teardrop
- Fragments with overlapping offsets that confuse reassembly; see RFC 1858
- Traffic needed
- Very little; the damage comes from a parsing flaw, not from volume
- Fix
- Patched network stacks and filtering of malformed fragments
Protocol attacks as a family are on protocol attacks.
How a ping of death works
A ping is an ICMP echo request (RFC 792). IP allows a datagram of at most 65,535 octets in total, but a large one can be sent in fragments, each carrying an offset that says where it belongs. The receiver collects the fragments and copies each into a buffer at its offset.
The attacker sends fragments whose last offset plus length goes past the maximum. A stack that trusts the offsets writes beyond the buffer it allocated. In the 1990s this crashed or froze many operating systems; it was fixed by checking the total before copying.
Teardrop attacks
A teardrop attack sends fragments that overlap: the second starts inside the first, or ends before it. A reassembly routine that assumes fragments line up can compute a negative length or copy data over itself, and crash.
Overlapping fragments are also used to slip past filters that inspect only the first fragment, a problem RFC 1858 describes along with how filters should treat such fragments.
Why it still matters
The original flaws were fixed long ago, but packet parsing keeps being written anew: in new network stacks, in embedded devices, in support for newer protocol versions. Flaws of the same shape, where a crafted packet crashes or takes over a system, are still found and patched.
The lesson for defenders is general. Keep operating systems, firmware and network devices patched, and treat any packet parser that is exposed to the internet as attack surface.
Why fragments are hard to handle
Fragments can arrive in any order, some may never arrive, and the receiver must hold the early ones in memory while waiting for the rest. That makes reassembly one of the few places where a network stack does real bookkeeping on behalf of an unknown sender.
Every assumption in that bookkeeping, about sizes, offsets and how long to wait, is something an attacker can violate on purpose. Flooding a host with incomplete fragments to fill its reassembly memory is a related attack that needs no parsing bug at all.
Ping of death vs ping flood
They share a protocol and nothing else. A ping flood sends ordinary echo requests in such numbers that the link or the host is overwhelmed; it needs volume and is stopped by capacity and rate limits upstream.
A ping of death sends one broken request and relies on the receiver mishandling it. It needs no volume and is stopped by a correct parser. The protocol attacks that exhaust state instead are the syn flood, which fills the queue of pending connections, and the attack covered in ack flood: exhausting lookups rather than memory, which makes devices search their session tables.
How to protect against malformed-packet attacks
- Patch operating systems and firmware. This is the actual fix; everything else reduces exposure.
- Drop malformed and overlapping fragments at the edge. Firewalls and routers can refuse fragments that would reassemble past the limit or overlap.
- Limit ICMP to what you need. Echo replies from servers are rarely necessary on the public internet.
- Keep embedded devices off the open internet. They are patched least often.
Questions
What is a ping of death?
A ping of death is a denial-of-service attack that sends an oversized ping in fragments, so the receiving system overflows a buffer while reassembling it and crashes.
What is a teardrop attack?
A teardrop attack sends IP fragments with overlapping offsets, which crash systems whose reassembly code assumes fragments line up.
Is ping of death still a threat?
The original flaw was fixed decades ago, but new packet-parsing flaws of the same kind are still found, so patching network stacks and devices remains the defence.