The Dangerous Comfort of Signals: Why Systems Fail When They Trust Untrusted Hints
Hatched by FPR
Apr 23, 2026
10 min read
6 views
86%
What if the message telling you about danger is itself dangerous?
Most of the time, we treat alerts as helpers. A message arrives, a system reacts, and everyone hopes the reaction is smarter than waiting in silence. But there is a deeper problem hiding inside that assumption: what if the signal meant to improve reliability becomes a weapon against reliability? That is the unsettling logic behind both network control messages and the little control switches that seem harmless until they are not.
A router sends an ICMP error because it detected trouble forwarding a packet. A software extension exposes a cancel flag because sometimes a workflow should stop rather than continue. In both cases, the system is trying to be helpful by letting one part of the world influence another. Yet every invitation to interrupt, abort, or reshape behavior creates a second channel of trust, and that channel is often easier to abuse than the original work itself.
This is not just a networking story. It is a story about modern systems in general: the more eagerly a system acts on external hints, the more vulnerable it becomes to fabricated hints, stale hints, and hints that arrive with the wrong timing. The real question is not whether a system should listen. It is how much authority a system should give to an unverified message.
The hidden bargain: responsiveness for fragility
To understand the tension, consider what ICMP is doing in the background. It is not carrying your data. It is carrying a report about the data path, a fault-isolation mechanism. A router notices trouble and says, in effect, “something went wrong downstream.” That sounds useful because upper-layer protocols cannot infer every network condition by themselves, especially when packets are delayed, lost, or reordered. A protocol that ignores feedback entirely becomes blind.
But feedback has a cost. ICMP messages are transmitted unreliably, can be delayed, can be dropped, and can even arrive after the situation that caused them has changed. In practical terms, that means a packet telling you about a past problem may no longer describe the present. The system is no longer simply reacting to facts. It is reacting to claims about facts, and claims are easier to fake than facts.
That is why the old idea of “just listen to the network” becomes dangerous. A crafted ICMP message can point to a specific TCP connection if it includes enough of the original packet to identify the flow: source IP, destination IP, source port, destination port, and even the TCP sequence number in some cases. If those details line up, the receiving stack may treat the message as authoritative. The result can be a blind connection reset, a forced abort, or a misleading routing or path adjustment.
The key insight is simple but profound: a control message is not a neutral note, it is a lever. Once a system decides that an external hint can change core behavior, that hint becomes part of the attack surface.
A signal that can change behavior is never “just metadata.” It is a privileged instruction waiting for a costume.
Why verification is hard, and why “just authenticate it” is not enough
The obvious response is to authenticate the message. If an ICMP error comes from a trusted network entity, why not require cryptographic proof? In theory, that would solve the problem. In practice, it collides with the structure of the Internet itself.
ICMP error messages contain only a fragment of the original packet, not the full transport state. That fragment is often just enough to identify a flow, but not enough to reconstruct or verify every end-to-end authentication property. For protocols like TCP with packet signatures or layered authentication, the relevant signature may not be recalculable from the partial payload. Even if the attacked peer is authenticating packets at the IP layer, the error message may not contain the full data needed to validate that the reported packet was genuine.
This creates an uncomfortable tradeoff: if you require perfect authentication, you may lose useful network feedback; if you accept unauthenticated feedback, you risk giving attackers a remote control for your connection state.
That tradeoff is not unique to networking. It appears anywhere systems use incomplete signals to govern complete actions. A user notification might be enough to suggest urgency, but not enough to justify deleting data. A telemetry alert might indicate degraded performance, but not enough to trigger failover. A cancel flag might be a useful hint, but not a sufficient reason to abandon work unless the system can confirm the source, the timing, and the context.
This is the deeper design lesson: feedback channels should be graded by authority, not binary trust. Too many systems make the mistake of asking only, “Is this signal real?” The better question is, “What is the least dangerous action I can take if this signal is real, stale, partial, or forged?”
The best defense is not disbelief, it is skepticism with state
The most interesting countermeasures do not simply reject all signals. They add context. They ask: does this message match an existing conversation, a plausible sequence number, a recent flow, a believable path condition? In TCP terms, sequence number checking is a form of stateful skepticism. If there is no data in flight, if the sequence number falls outside an expected range, or if the timing makes the message implausible, the system can ignore it or downgrade its effect.
That idea generalizes beautifully. A robust system does not trust messages in isolation, it evaluates them against live state.
Think of it like a bank approving a wire transfer. A signature matters, but not enough by itself. The bank also checks account state, transfer limits, recent activity, destination patterns, and anomaly scores. If all it had was the signed request, fraud would be trivial. If all it had was state with no external signals, it could never process legitimate transfers efficiently. Security comes from the combination.
TCP’s handling of ICMP shows the same pattern in miniature. A “hard error” may justify aborting a connection, but only if it lines up with the current state of the flow. A stale message, a stray fragment, or a forged packet should not be allowed to terminate live communication just because it resembles a legitimate report. This is why some systems impose sequence checks, why ephemeral ports should be randomized, and why blind guessing attacks become much harder when the search space is larger.
The practical principle is worth naming: make signals prove proximity to state. If a message cannot demonstrate that it belongs to the current conversation, its authority should collapse.
Cancel flags, hard errors, and the moral psychology of interruption
The most surprising connection between a tiny cancel flag and ICMP error handling is that both encode a philosophy of interruption.
A cancel parameter looks modest. It says, “If the user has changed their mind, stop the operation.” That seems humane, even elegant. But the existence of a cancel switch changes the contract of the system. Now every operation must decide whether to honor interruption immediately, defer it, or ignore it based on internal state. If cancellation is overused, you get brittle workflows that stop too easily. If it is underused, you get unresponsive systems that continue doing wasteful or harmful work long after it should end.
ICMP error handling has the same shape. A network stack must decide whether an incoming error is a useful warning, a transient nuisance, or a malicious attempt to force shutdown. The response can be conservative, which preserves continuity but may waste resources. Or it can be eager, which improves responsiveness but risks collapse from forged hints.
This is the moral psychology of interruption: every system must decide when it is virtuous to stop and when it is dangerous to stop.
That question matters because interruption has asymmetric consequences. In many contexts, stopping too early is reversible, while continuing on bad information can be catastrophic. In other contexts, the reverse is true. A workflow that cancels a deployment on a false signal can cost time, but a workflow that ignores real cancellation can overwrite data, waste money, or expose customers to harm. The right answer is not to love or fear interruption in general. The right answer is to design a hierarchy of stop conditions.
A useful framework is this:
- Soft hints: informative, but never sufficient to stop critical work on their own.
- State-matched hints: accepted only when they align with current context.
- Hard stops: rare, authenticated, and constrained to situations where inaction is more dangerous than action.
That hierarchy is how resilient systems stay responsive without becoming obedient to noise.
The real enemy is not attack, it is overconfidence in partial knowledge
At first glance, the ICMP story sounds like an attack tale. But the deeper issue is epistemic. Systems fail when they mistake partial knowledge for complete truth. They receive a fragment, infer too much, and act too decisively.
This is why even legitimate network reports can mislead. ICMP messages can be delayed, reordered, rate limited, or discarded. A router might reboot without flushing queued messages. A report can arrive after the network has already healed. If a TCP stack treats that old report as present truth, it can make a bad decision about a healthy connection.
The same thing happens in software operations. A cancellation request may arrive after the task has nearly completed. An email system may interpret a shutdown request too late. A monitoring system may auto remediate based on stale telemetry. In each case, the failure is not simply “someone sent a bad signal.” It is that the system gave present-tense authority to a past-tense message.
That is why randomization, validation, and filtering matter, but only as part of a larger design philosophy. Randomizing ephemeral ports makes blind guessing harder. Validating sequence numbers reduces false positives. Filtering on payload patterns can keep internal users from abusing the mechanism. Yet none of these are substitutes for a structural insight: feedback channels should rarely be allowed to directly trigger irreversible state changes.
The safest systems do not treat alarms as commands. They treat alarms as evidence.
Key Takeaways
- Separate evidence from authority. A message can be useful without being powerful. Design systems so hints inform decisions, but do not automatically execute irreversible actions.
- Bind signals to live state. Accept external feedback only when it matches current connection state, timing, and context. Stale signals should lose force.
- Minimize the blast radius of interruption. Prefer soft degradation, retries, and local mitigation before hard aborts or global shutdowns.
- Make guessing expensive. Randomize identifiers such as ephemeral ports, and reduce the predictability of values that attackers can exploit.
- Treat cancellation as a privileged operation. Whether it is a
cancelflag or a network error, stopping work should require stricter conditions than continuing it.
Designing for humility in systems
The most durable systems are not the ones that hear every signal. They are the ones that know which signals deserve belief. That requires a kind of engineered humility: an acknowledgment that messages are incomplete, contexts change, and even well-meaning feedback can be wrong.
There is a temptation in software to think that more responsiveness is always better. A good system should react quickly, process hints immediately, and keep users informed. But responsiveness without skepticism is just nervousness. It makes the system easy to persuade and easy to destabilize.
The stronger pattern is more subtle. Build systems that listen, but only after they ask three questions: Does this message fit the current state? Is it recent enough to matter? And if it is wrong, how bad is the mistake? That is how you turn a brittle reaction mechanism into a resilient decision process.
In the end, the lesson of network error messages and cancellation flags is the same: the most dangerous messages are the ones designed to help. They feel trustworthy because they are supposed to be. But in distributed systems, trust is not a property of the signal. It is a property of the validation that surrounds it. The future belongs to systems that can hear warnings without being ruled by them.
Sources
Hatch New Ideas with Glasp AI 🐣
Glasp AI allows you to hatch new ideas based on your curated content. Let's curate and create with Glasp AI :)
Start Hatching 🐣