A compensating control is a measure that reduces the likelihood or impact of an exploit while the underlying vulnerability remains unfixed — a WAF virtual patch, an IPS block, an EDR policy tightening, or network segmentation. It is an interim measure by definition, applied because the real fix cannot ship inside a risk-appropriate window.
Most exposures cannot be fixed immediately. The median time to fully remediate a CISA KEV vulnerability is 43 days and only 26% are ever fully fixed (Verizon 2026 DBIR), and those are the most unambiguous priorities in the industry. Change windows, upgrade risk and coupled dependencies are real constraints rather than excuses, so the interval between decision and fix has to be covered by something.
The failure mode is treating that cover as the outcome. A finding marked mitigated because a WAF rule exists looks closed in every report while the exposure it describes is intact and the control in front of it is one substitution away from being bypassed.
The vocabulary is older than the current tooling and it is defined in standards rather than by vendors. PCI DSS has recognised compensating controls formally for two decades, with a documented worksheet requiring the entity to state the constraint that prevents the original requirement being met, the objective of that requirement, the additional risk introduced, the control put in place, and how it is validated and maintained. NIST SP 800-53 uses the term comparably: an alternative control employed in place of a baseline control, selected because the baseline cannot be applied, and providing equivalent protection.
Two features of those definitions are worth carrying into everyday practice, because informal use drops them. A compensating control is justified against a stated constraint rather than chosen for convenience, and it carries an obligation to be reviewed — a documented position, not a status a finding is moved into and forgotten.
Signature-based controls match patterns, and patterns have equivalents. A rule written to block a specific injection payload is looking for a literal string; an attacker who substitutes a logically equivalent expression, changes the casing, inserts inline comments, or applies an encoding the inspection layer decodes later than the rule reads it, produces a request the rule does not recognise and the application interprets identically. None of this requires novel research.
That distinction sets the right expectation. Against opportunistic scanning and commodity exploitation, a virtual patch is genuinely valuable, because commodity tooling uses the payloads the signature was written from. Against someone specifically interested in this organization, the same rule is a speed bump, and treating it as equivalent to a fix is how an organization ends up surprised.
An inline blocking rule prevents the attack and can also prevent legitimate traffic, which means deploying one under time pressure, against a vulnerability nobody has fully characterised, is itself a change with an outage risk. A monitoring posture — detect the attempt, alert, do not interfere with traffic — carries no such risk and provides no prevention.
The reasonable default depends on which failure is worse in that lane, and it is worth deciding deliberately rather than inheriting the default of whichever tool is doing the deploying. A useful discipline is to deploy in monitoring mode first, observe what the rule would have blocked over a representative period, and switch to blocking only once the false positive rate is known rather than assumed.
The recurring operational problem is not writing the control. It is that controls outlive their reason and nobody can safely remove them years later. Five practices prevent that.
Is a compensating control the same as a virtual patch? A virtual patch is one kind of compensating control — typically a WAF rule blocking the exploit pattern for a specific vulnerability. Segmentation, EDR policy and configuration changes are others.
Can a finding be closed once a control is in place? It should not be. The vulnerability is unchanged and the control is bypassable. Mitigated and remediated are different states and conflating them makes a backlog look better than it is.
Why prefer detection over blocking? Because a blocking rule can be evaded and can break production, and neither of those is true of a detection. A control buys time; a detection still works after someone routes around the control.