{
 "slug": "broken-approval-archive-forensic-database-50-enterprise",
 "topic_id": "TOPIC-105",
 "cluster": "Content Moats & Datasets",
 "tier": "Tier A",
 "title": "Five ways approval controls collapse, and how to tell them apart",
 "summary": "Authorisation failures across very different industries reduce to a small number of architectural defects. Naming them makes the same mistake easier to avoid twice.",
 "lede": "A crypto custody loss, a payroll diversion and a production database deletion look like unrelated incidents. Structurally they are the same handful of defects, appearing in different vocabularies.",
 "date": "2026-05-24",
 "category": "Compliance",
 "author_id": "solene-beaumont-adjei",
 "tags": [
  "taxonomy",
  "postmortem",
  "authorization failure",
  "architecture",
  "incident analysis",
  "framework"
 ],
 "image_title": "Five Ways Approvals Collapse",
 "schema": "Article",
 "key_takeaways": [
  "Approval failures cluster into five defects: decay, evasion, absence by configuration, provenance collapse and post-hoc misreporting.",
  "Each has a distinct signature and a distinct remedy, so misclassifying an incident produces the wrong fix.",
  "Most organisations can locate their own controls in this taxonomy in an afternoon."
 ],
 "body": [
  {
   "type": "h2",
   "text": "The five defects"
  },
  {
   "type": "diagram",
   "kind": "flow",
   "alt": "Five defects, each with a distinct signature and a distinct remedy",
   "caption": "Misclassifying an incident produces the wrong fix, and the same failure recurs.",
   "nodes": [
    {
     "label": "Consent decay",
     "note": "record ≠ executed object",
     "bad": true
    },
    {
     "label": "Consent evasion",
     "note": "clean record, loss anyway",
     "bad": true
    },
    {
     "label": "Absence by configuration",
     "note": "no record expected",
     "bad": true
    },
    {
     "label": "Provenance collapse",
     "note": "names an account",
     "bad": true
    },
    {
     "label": "Post-hoc misreporting",
     "note": "clean record, contradicted",
     "bad": true
    }
   ]
  },
  {
   "type": "table",
   "head": [
    "Defect",
    "One-line description"
   ],
   "rows": [
    [
     "Consent decay",
     "A human approved something, but the thing changed afterwards"
    ],
    [
     "Consent evasion",
     "The approval path was routed around, not broken"
    ],
    [
     "Consent absence by configuration",
     "No approval was ever required; the control was off"
    ],
    [
     "Provenance collapse",
     "An approval exists but cannot be tied to a specific person"
    ],
    [
     "Post-hoc misreporting",
     "The record describes something other than what occurred"
    ]
   ]
  },
  {
   "type": "p",
   "html": "They are not mutually exclusive — a serious incident often involves two or three — but the primary defect determines the remedy."
  },
  {
   "type": "h2",
   "text": "Consent decay"
  },
  {
   "type": "p",
   "html": "The approval was real and the object it covered changed between approval and execution."
  },
  {
   "type": "ul",
   "items": [
    "A payment approved, then the beneficiary account updated before release",
    "A deployment approved, then a commit pushed to the same branch",
    "A transaction reviewed in an interface, then constructed differently for signing",
    "A plan approved, then re-planned against changed state"
   ]
  },
  {
   "type": "p",
   "html": "<strong style=\"font-weight:600\">Signature:</strong> the approval record and the executed object differ. <strong style=\"font-weight:600\">Remedy:</strong> bind the approval to a digest of the object and recompute at execution, refusing on mismatch."
  },
  {
   "type": "h2",
   "text": "Consent evasion"
  },
  {
   "type": "p",
   "html": "The control exists, functions, and was not involved."
  },
  {
   "type": "ul",
   "items": [
    "An emergency path with fewer approvers, invoked under manufactured urgency",
    "A direct API call bypassing the interface that enforces approval",
    "A threshold worked around by splitting into smaller amounts",
    "A privileged account exempt from the policy for operational reasons"
   ]
  },
  {
   "type": "p",
   "html": "<strong style=\"font-weight:600\">Signature:</strong> the control has a clean record and the loss occurred anyway. <strong style=\"font-weight:600\">Remedy:</strong> enforce at the point of effect rather than at an interface, and treat every exemption as a finding."
  },
  {
   "type": "h2",
   "text": "Consent absence by configuration"
  },
  {
   "type": "p",
   "html": "No approval was required, and usually nobody knew."
  },
  {
   "type": "ul",
   "items": [
    "A threshold set high enough that nothing reaches it",
    "An automation identity outside the approval policy",
    "A new integration that inherited no controls",
    "An approval setting disabled during a migration and never restored"
   ]
  },
  {
   "type": "p",
   "html": "<strong style=\"font-weight:600\">Signature:</strong> no approval record exists and nobody expected one to. <strong style=\"font-weight:600\">Remedy:</strong> inventory consequential actions and verify empirically which ones actually require approval — by attempting them, not by reading policy."
  },
  {
   "type": "h2",
   "text": "Provenance collapse"
  },
  {
   "type": "p",
   "html": "Something approved it. Establishing who is impossible."
  },
  {
   "type": "ul",
   "items": [
    "A shared account used by several people",
    "A service account used interactively",
    "An approval recorded against a session rather than a person",
    "A delegation or out-of-office rule that approved automatically"
   ]
  },
  {
   "type": "p",
   "html": "<strong style=\"font-weight:600\">Signature:</strong> the record names an account, and the investigation cannot get past it. <strong style=\"font-weight:600\">Remedy:</strong> bind approvals to individual credentials and eliminate shared interactive accounts."
  },
  {
   "type": "h2",
   "text": "Post-hoc misreporting"
  },
  {
   "type": "p",
   "html": "The record exists, is internally consistent, and describes something that did not happen."
  },
  {
   "type": "ul",
   "items": [
    "An agent's narration of its own actions treated as a log",
    "An approval status written by an integration rather than a person",
    "A summary generated separately from the executed payload",
    "Evidence assembled after the fact for an audit"
   ]
  },
  {
   "type": "p",
   "html": "<strong style=\"font-weight:600\">Signature:</strong> the record is clean and contradicted by other evidence. <strong style=\"font-weight:600\">Remedy:</strong> generate evidence as a by-product of the control operating, signed at the moment, not compiled later."
  },
  {
   "type": "h2",
   "text": "Using the taxonomy"
  },
  {
   "type": "p",
   "html": "Two applications, both cheap."
  },
  {
   "type": "ol",
   "items": [
    "<strong style=\"font-weight:600\">On your own controls.</strong> For each consequential action, ask which of the five it is currently vulnerable to. Most organisations find they are exposed to three or more.",
    "<strong style=\"font-weight:600\">On incidents.</strong> Classify by primary defect before choosing a remedy. An incident of evasion treated as decay produces a payload-binding fix that changes nothing."
   ]
  },
  {
   "type": "p",
   "html": "The second is where the taxonomy earns its keep. Misclassification is common because the narrative of an incident emphasises what was unusual about it, and the structural defect is usually the unremarkable part."
  },
  {
   "type": "h2",
   "text": "Applying it to your own controls"
  },
  {
   "type": "p",
   "html": "Two uses, both cheap. On your controls: for each consequential action, ask which of the five it is currently vulnerable to. Most organisations find they are exposed to three or more. On incidents: classify by primary defect before choosing a remedy."
  },
  {
   "type": "table",
   "caption": "Signature and remedy per defect",
   "head": [
    "Defect",
    "Signature",
    "Remedy"
   ],
   "rows": [
    [
     "Decay",
     "Approval record and executed object differ",
     "Bind to a digest, recompute at execution"
    ],
    [
     "Evasion",
     "Clean record, loss occurred anyway",
     "Enforce at the point of effect; treat exemptions as findings"
    ],
    [
     "Absence",
     "No record, and none expected",
     "Inventory consequential actions; test empirically, not by reading policy"
    ],
    [
     "Provenance collapse",
     "Record names an account",
     "Bind to individual credentials; remove shared interactive accounts"
    ],
    [
     "Misreporting",
     "Clean record, contradicted by other evidence",
     "Generate evidence as a by-product of the control, signed at the moment"
    ]
   ]
  },
  {
   "type": "h2",
   "text": "Objections and honest limits"
  },
  {
   "type": "p",
   "html": "<strong style=\"font-weight:600\">“Our incidents do not fit these.”</strong> Serious incidents usually involve two or three at once. The primary defect is the one that determines the remedy, and it is usually the unremarkable part of the narrative."
  },
  {
   "type": "p",
   "html": "<strong style=\"font-weight:600\">“We can just read our policies.”</strong> Absence by configuration is only visible empirically. Attempt a consequential action and observe whether approval is actually required."
  },
  {
   "type": "h2",
   "text": "Coding an incident against the taxonomy"
  },
  {
   "type": "p",
   "html": "A taxonomy is only a dataset if incidents are recorded the same way each time. Seven fields are enough, and the discipline is that the defect is assigned from the evidence rather than from the narrative in the press coverage."
  },
  {
   "type": "table",
   "caption": "Incident record schema",
   "head": [
    "Field",
    "Contents"
   ],
   "rows": [
    [
     "<code>defect</code>",
     "One of the five: decay, evasion, absence, provenance, misreporting"
    ],
    [
     "<code>surface</code>",
     "Where the approval was supposed to happen"
    ],
    [
     "<code>actor</code>",
     "Insider, outsider, agent, or configuration"
    ],
    [
     "<code>evidence_available</code>",
     "What the organisation could actually produce afterwards"
    ],
    [
     "<code>detection_lag</code>",
     "Time from the act to anyone noticing"
    ],
    [
     "<code>secondary_defect</code>",
     "The second defect, where one masked another"
    ],
    [
     "<code>source</code>",
     "Regulatory filing, court record, or disclosure — with a citation"
    ]
   ]
  },
  {
   "type": "h2",
   "text": "Worked codings"
  },
  {
   "type": "p",
   "html": "Three generic patterns, coded the way the schema intends. None is a specific named incident — these are the shapes that recur, and the point is to show how the fields resolve an argument about which defect applies."
  },
  {
   "type": "table",
   "caption": "Pattern codings",
   "head": [
    "Pattern",
    "defect",
    "secondary_defect",
    "Why"
   ],
   "rows": [
    [
     "A departed employee's credential is used for a bulk export",
     "decay",
     "provenance",
     "Authority outlived the relationship; nothing tied the act to a person"
    ],
    [
     "An agent executes a destructive command with approvals disabled",
     "absence",
     "misreporting",
     "The gate was configured away; the record produced afterwards was assembled, not captured"
    ],
    [
     "A treasurer approves a payment after a spoofed instruction",
     "evasion",
     "provenance",
     "The control was routed around, and the approval evidence was a chat message"
    ]
   ]
  },
  {
   "type": "p",
   "html": "Notice that <code>provenance</code> appears as a secondary defect in two of the three. That is the pattern worth taking from any archive of these: the primary defect explains how the act happened, and the provenance defect explains why nobody could prove anything afterwards."
  },
  {
   "type": "p",
   "html": "When you code your own near-misses this way, the useful output is not the count by defect. It is the <code>evidence_available</code> column, because it is the same answer every time and it is the one you can change before the next incident."
  }
 ],
 "faq": [
  {
   "q": "Are the five defects mutually exclusive?",
   "a": "No. Serious incidents often involve two or three. The primary defect is what determines the remedy."
  },
  {
   "q": "How do you tell decay from evasion?",
   "a": "In decay the approval record and the executed object differ. In evasion the record is clean and the control was simply not involved."
  },
  {
   "q": "What is the cheapest thing to check?",
   "a": "Configuration absence — attempt a consequential action and see whether approval is actually required. Reading policy does not answer it."
  },
  {
   "q": "Why does misclassification matter?",
   "a": "An evasion incident treated as decay produces a payload-binding fix that changes nothing, and the same failure recurs."
  },
  {
   "q": "Why record a secondary defect?",
   "a": "Because one defect usually masks another — typically a provenance failure that made the primary defect unprovable afterwards."
  },
  {
   "q": "What is the most useful field?",
   "a": "<code>evidence_available</code>. It reads the same across almost every incident, and it is the one you can change in advance."
  }
 ],
 "sources": [
  {
   "t": "SAP / Oracle segregation of duties control guidance (ISACA)",
   "u": "https://www.isaca.org/resources"
  },
  {
   "t": "Post-incident analyses from custody, payments and infrastructure operators."
  },
  {
   "t": "COSO Internal Control — Integrated Framework",
   "u": "https://www.coso.org/guidance-on-ic"
  },
  {
   "t": "NIST SP 800-53 Rev. 5 — Security and Privacy Controls",
   "u": "https://csrc.nist.gov/pubs/sp/800/53/r5/upd1/final"
  }
 ],
 "related": [
  {
   "slug": "human-oversight-capability-maturity-model-hocmm-benchmarking",
   "title": "A maturity model for human oversight",
   "category": "Compliance"
  },
  {
   "slug": "bybit-wazirx-multisig-hack-payload-mismatch-postmortem",
   "title": "The payload flip",
   "category": "Crypto"
  },
  {
   "slug": "servicenow-ticket-manipulation-preventing-unauthorized-admin-elevation",
   "title": "When the approval record is a database row",
   "category": "Developer"
  },
  {
   "slug": "annual-state-human-authorization-deepfake-gating-index",
   "title": "Designing a benchmark that is not a vendor opinion poll",
   "category": "Compliance"
  }
 ],
 "image": "https://cdn.twc.sh/images/igcache/Five%20Ways%20Approvals%20Collapse/1500_900/blog.jpg",
 "wordcount": 1214,
 "url": "/blog/broken-approval-archive-forensic-database-50-enterprise.html",
 "reading_time": "5 min read",
 "seo_title": "Five ways approval controls collapse",
 "meta_description": "Authorisation failures across very different industries reduce to a small number of architectural defects.",
 "hub": {
  "slug": "topics/research-and-datasets",
  "title": "Research, datasets and methods"
 },
 "answer": "Consent decay, where the approved object changed afterwards. Consent evasion, where the path was routed around. Consent absence by configuration, where no approval was ever required. Provenance collapse, where an approval exists but cannot be tied to a person. And post-hoc misreporting, where the record describes something that did not happen.",
 "answer_q": "What are the five ways approval controls collapse?",
 "glossary": [
  {
   "term": "Consent decay",
   "def": "A real approval whose object changed between approval and execution."
  },
  {
   "term": "Consent evasion",
   "def": "A functioning control that was simply not involved, usually via an emergency path, a direct API call or an exemption."
  },
  {
   "term": "Provenance collapse",
   "def": "An approval that exists but cannot be attributed to a natural person, typically because it names a shared or service account."
  }
 ],
 "checklist": {
  "title": "A half-day self-assessment",
  "id": "assess",
  "desc": "Five steps that locate your own controls in the taxonomy.",
  "steps": [
   {
    "name": "List consequential actions.",
    "text": "Money movement, permission change, bulk export, destructive operations, credential issuance."
   },
   {
    "name": "For each, attempt it.",
    "text": "Reading policy does not reveal absence by configuration."
   },
   {
    "name": "Check what the record names.",
    "text": "An account, or a person."
   },
   {
    "name": "Check what the record covers.",
    "text": "A reference, or the object that executed."
   },
   {
    "name": "Check who wrote the record.",
    "text": "The control, or the system asking to be trusted."
   }
  ]
 },
 "cta": {
  "title": "Where this fits in Manav",
  "html": "Manav addresses four of the five directly: binding closes decay, point-of-effect enforcement closes evasion, per-person credentials close provenance collapse, and evidence generated by the control closes misreporting. Absence by configuration is an inventory problem you have to do yourself.",
  "href": "../docs.html",
  "label": "See the primitives"
 }
}