Safeguard
Security Guides•

What should a security gate exemption record contain?

A good exemption names the finding, scope, reason, owner, approver and an expiry date. Seven fields to record, tool support, and a template you can copy.

Safeguard Security Team
3 min read

A usable exemption record holds seven things: the finding identifier, the exact scope, the reason, an owner, an approver, the date it was granted and an expiry date. Without an expiry, an exemption becomes a permanent hole that nobody remembers opening.

The seven fields

FieldWhy it mattersExample
Finding IDTies the record to one advisoryAn advisory or CVE identifier
ScopeLimits where it appliesOne service, one package, one path
ReasonLets a later reader judge it"Parser not reachable, feature disabled"
OwnerSomeone who will revisit itA team or named person
ApproverShows it was reviewedSecurity lead
Granted onStarts the clockA date
Expires onForces a re-decisionA date

What real tools support

Scanner formats already include some of these. One open source scanner's ignore file accepts an expiry on a line with a suffix, for example a CVE identifier followed by an exp date. Its experimental YAML format uses an expired_at field, and states that if it is not set the ignore is always valid. The YAML format can also limit an ignore to paths.

Another dependency scanner's config supports an ignore entry with an id, an optional ignoreUntil date and an optional reason, and says that ignoring an ID also ignores its aliases. Package overrides have optional effectiveUntil and reason fields too.

Notice the pattern: expiry and reason are optional in both. Optional means skipped. Make them mandatory with a check in your own pull request review.

A template

id: GHSA-xxxx-xxxx-xxxx
scope: services/billing, package example-lib
reason: vulnerable function is not called; feature flag off
owner: team-billing
approved_by: security-lead
granted: 2026-10-19
expires: 2027-01-19

Make the record enforceable

  1. Store exemptions in version control, next to the gate policy.
  2. Require review from the security team for changes to that file.
  3. Fail the build when an exemption is past its expiry date.
  4. Report the count of active exemptions each month.
  5. Close an exemption early when a fix ships.

Keep the scope narrow. Ignoring an ID across every project hides it where it may be reachable. Prefer a path or package specific entry.

Aliases and duplicates

The same flaw can have several identifiers. When your tool treats aliases as one, an exemption covers them all. When it does not, you may see the finding return under a different ID. Test this once, so you know which behaviour you have.

Try it yourself

Open the vulnerability management demo and follow a finding from detection to a decision. Think about what record you would want left behind.

Click through it at your own pace, or open it full screen.

Safeguard's policies and gates support documented exceptions, and its compliance and evidence automation helps keep the trail. The free scan is at gold.safeguard.sh/scan.

Quick check

How long should an exemption last?

Long enough to ship a fix, often 30 to 90 days. Pick a default and require a reason for anything longer.

Can a developer approve their own exemption?

Better not. A second person, ideally from security, should approve.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.