Playbook ID: PB-EDGE | Default severity: SEV-2 (escalate to SEV-1 if signs of exploitation are confirmed on any device, if the device held a Tier-0 or domain-privileged credential, if it is a file-transfer appliance holding regulated data, if a firmware or boot-level implant is suspected, or if more than one site in the same product family is affected) | Owner: Operations Lead (Network)
T1098 T1556T1071 T1572T1078 T1133T1190Not for: compromise of a general-purpose web server or a custom application — that is Playbook 14.13. Compromise of a SaaS product you consume, or a vendor's platform rather than an appliance in your rack, is 14.5. An OT or ICS field device is 14.14. Routine patching of a vulnerability with no evidence of exploitation belongs to the vulnerability management program in Chapter 10, not here — this playbook starts where that one escalates. If the appliance turns out to be the entry point for domain-wide encryption, run 14.1 in parallel; if the credential taken from it was a domain-privileged account, hand the identity work to 14.4.
An edge appliance is the one computer in your estate you are contractually discouraged from understanding. It ships as a sealed box, the vendor tells you not to install anything on it, the support agreement gets thin if you poke around, and in exchange it terminates every remote session your workforce has. It is a full server with a marketing name, a management interface, a credential store, and no EDR agent. That combination is exactly why it is now the busiest front in the market.
The numbers moved decisively. Verizon's 2026 DBIR puts vulnerability exploitation at 31% of breaches, overtaking credential abuse at 13% for the first time in the report's nineteen-year history (SecurityWeek); Mandiant has exploits as the top initial vector at 32% for the sixth consecutive year, with clusters UNC6201 and UNC5807 specializing in edge and core network devices (M-Trends 2026). CrowdStrike reports a 42% year-over-year rise in zero-days exploited before public disclosure, with 40% of China-nexus exploits targeting edge devices (2026 GTR), and VulnCheck measured 23.43% of KEV entries showing exploitation on or before the day the CVE was published (1H-2026). Meanwhile only 26% of KEV vulnerabilities were fully remediated across 13,000 polled organizations, down from 38%, and median patching time rose to 43 days (Help Net Security).
Read those together and the operating assumption writes itself: for a KEV-listed internet-facing appliance, assume the compromise happened before the patch existed. That is arithmetic, not pessimism, and it is why patching here is a containment step rather than remediation. In the ArcaneDoor campaign behind ED 25-03, Cisco confirmed the actor modified ASA ROM to persist across reboot and upgrade — the update installs cleanly, the version string changes, the implant stays. CISA re-issued guidance in November 2025 because devices reported as patched remained exposed (Help Net Security).
What the adversary wants is rarely the appliance. It is what the appliance holds and sees: the directory bind account, the RADIUS and TACACS+ shared secrets, the IPsec pre-shared keys for every partner tunnel, the certificates and their private keys, and the plaintext of every session after decryption. Salt Typhoon reached 600-plus organizations across 80 countries through provider- and customer-edge routers, persisting with added SSH authorized keys, SSH on non-standard ports, and log clearing (CISA AA25-239A); Volt Typhoon held some victims for at least five years on living-off-the-land technique with minimal malware (CISA AA24-038A). Ransomware crews use the same doors — CISA and the FBI tie Akira's initial access to SonicWall CVE-2024-40766, with proceeds around $244.17M as of late September 2025 (AA24-109A update).
The mistake teams make is trusting the device's own account of itself. You cannot put an agent on it, so your only telemetry is what the box chooses to tell you — and log clearing is standard tradecraft on exactly these devices. If you are not shipping logs somewhere the appliance cannot write, it will report that everything is fine and you will have no way to argue. Actionable takeaway: before this incident happens, confirm every perimeter appliance ships logs off-device to a collector it holds no credentials for, and alarm on the silence. That one control is the difference between an investigation and a shrug.
| Role | Responsibility in PB-EDGE |
|---|---|
| Incident Commander | Owns the isolate-vs-patch-in-place call and the rebuild-vs-replace call; authorises any action that removes remote access for the workforce. |
| Operations Lead (Network) | Device inventory, evidence capture from and around the appliance, configuration diffing, patching, upstream blocking, rebuild. |
| Operations Lead (Identity) | Rotation of every credential the device held or brokered; IdP session revocation; directory-side hunting for use of those credentials. |
| Vendor Liaison | Owns the vendor PSIRT/TAC case, obtains the platform-specific integrity-verification and memory-capture procedure, and screens every artefact before it leaves the organization. |
| Communications Lead | Workforce notice for remote-access disruption; partner notice where site-to-site keys change; status page. |
| Scribe | UTC/ISO 8601 timeline, chain of custody per RFC 3227, artefact register including firmware versions and serial numbers. |
| Legal Liaison | Legal hold on captures and log exports; assessment of whether data traversed or resided on the device. |
| Executive Sponsor | Approves loss of remote access during business hours, hardware replacement spend, and emergency change outside the CAB cycle. |
Marking used below: `TIP-OFF = the adversary can observe this action. EVIDENCE` = this destroys or degrades evidence and must not run before capture.
Do the first three steps before you log in to the device. Everything you learn from the appliance itself is testimony from a witness who may be working for the other side.
| # | Action | Who | Done when | Evidence to capture |
|---|---|---|---|---|
| 1 | Declare T+0. Set a 60-minute triage box; containment fires at expiry whether or not scoping is complete. | IC | Time box recorded and announced | Declaration time (UTC/ISO 8601), triggering advisory or alert ID |
| 2 | Export the off-device log copy first. Pull everything this appliance sent to the SIEM or syslog collector for the maximum retained window, hash it, and place it under legal hold before any containment action. Holds are not retroactive and retention windows are short. | Scribe + Ops Lead (Network) | Export hashed, held, and recorded in the artefact register | File hashes, manifest and its verification result, query window, exporting identity, collector name |
| 3 | Start an independent packet record from a tap or SPAN port upstream of the appliance, not on it. | Ops Lead (Network) | Capture running and writing to the evidence store | PCAP hash, capture interface, start time, BPF filter used |
| 4 | Build the affected-device inventory — every unit in the product family, including the HA partner, the DR site, the decommissioned-but-still-cabled spare, and anything a business unit bought without telling you. Record model, firmware version, serial, management IP and exposure state. Inventory is the first step in a CISA emergency directive for a reason. | Ops Lead (Network) | Inventory complete and reconciled against an external scan, not only the CMDB | Inventory table, scan output, discrepancies between CMDB and reality |
| 5 | Determine management-plane exposure for each device: is the management interface reachable from the internet? ED 26-01 made this a distinct, mandatory question separate from patch status. | Ops Lead (Network) | Exposure state recorded per device | External scan results, source of truth, timestamp |
| 6 | Diff the running configuration against the last known-good copy in version control. Prioritize: new local accounts, new authorized SSH keys, SSH listeners on non-standard ports, changed or disabled syslog destinations, new SNMP communities, changed RADIUS/TACACS+ servers, new static routes, and any rule permitting management access from a wider source range. The first three are documented Salt Typhoon persistence. T1098 T1556 | Ops Lead (Network) | Every delta dispositioned as expected or unexplained | Config export (handle as a secret-bearing artefact), annotated diff, version-control commit compared against |
| 7 | Compare the on-device log against the off-device copy from step 2. Truncations, resets or gaps present locally but absent in the collector are the finding. If they match perfectly and you had no off-device copy, record in the timeline that you have no independent evidence — do not report a clean result. | Ops Lead (Network) | Comparison complete and documented | Both log sets, the diff, an explicit statement of coverage |
| 8 | Query netflow and upstream firewall logs for sessions originated by the appliance's own addresses. Exclude the vendor's published update and licensing endpoints, then investigate everything that remains. An appliance is a server; it should almost never be a client. | Ops Lead (Network) | Outbound session inventory produced | Flow records, destinations, ASN/geo, byte counts, first-seen times |
| 9 | Enumerate the device's local account database and its group memberships elsewhere — including whether it has a machine account or is a member of any directory group. | Ops Lead (Identity) | Full account and privilege list produced | Account list, directory objects, privilege grants |
| 10 | Review authentication through the device for the dwell window: successful sessions without a matching MFA event, local-database authentications where policy requires the IdP, and sessions from ASNs or geographies new for that identity. | Ops Lead (Identity) | Anomalous session list produced or exclusion documented | IdP sign-in logs, appliance auth logs, correlated table |
| 11 | For a file-transfer appliance: list files in web-served directories created after the last legitimate deployment, pull the web access log for requests outside the application's route table, and identify accounts with anomalous transfer volume. T1190 | Ops Lead (Network) | Web-root delta and access-log review complete | Directory listing with timestamps and hashes, access-log extract, per-account volume table |
| 12 | Obtain the vendor's platform-specific integrity-verification procedure through the PSIRT advisory or an open TAC case, run it, and record precisely what it covers and what it does not. | Vendor Liaison | Procedure obtained, executed, and its scope documented | Command or procedure run, verbatim output, vendor case number |
| 13 | Set state per device using the CISA model: Not Affected, Susceptible (vulnerable, no signs of exploitation, remediation begun) or Compromised (vulnerable, signs of exploitation found). Any device reaching Compromised escalates to SEV-1 and stays in this playbook as an incident, not a patch ticket. | IC | Every device in the inventory carries a state | Per-device state table with the evidence that set it |
# Step 2 — take the SIEM's copy before you touch the box, hash it, and manifest it.
# The local log is the attacker's to edit. This copy is not.
CASE=IR-2026-0142
OUT=/evidence/$CASE
# The manifest lives beside the tree, never inside it — a manifest that hashes itself
# while it is still being written will never verify again.
MANIFEST=/evidence/$CASE.sha256
mkdir -p "$OUT"
# <your SIEM's export for the device, written into $OUT — e.g. a saved-search export or API pull>
# Timestamp goes in before the manifest, so the manifest actually covers it.
date -u +%Y-%m-%dT%H:%M:%SZ > "$OUT/COLLECTED_AT.txt"
find "$OUT" -type f -print0 | xargs -0 sha256sum > "$MANIFEST"Verify the manifest with sha256sum -c "$MANIFEST" immediately after collection, before anything else happens to the evidence store, and record the result in the artefact register. An unverified manifest is an assumption wearing a hash's clothes — the first time you check it should not be the day opposing counsel asks.
# Step 3 — record what the appliance originates, from a tap or SPAN upstream of it.
# A device under someone else's control is not a trustworthy sensor for its own traffic.
sudo tcpdump -i <span-interface> -s 0 \
-w /evidence/$CASE/edge-$(date -u +%Y%m%dT%H%M%SZ).pcap \
host <appliance-mgmt-ip> or host <appliance-outside-ip>Sequence is the whole game in this phase. Capture volatile state, then close the management plane, then patch, then rotate credentials, then kill sessions. Patch before capture and you have destroyed the evidence that would have told you whether to replace the hardware. Kill sessions before rotating credentials and you have announced yourself to someone who still holds the keys.
| # | Action | Who | Done when | Evidence to capture |
|---|---|---|---|---|
| 1 | Capture volatile state from the running device in RFC 3227 order — process and connection state, session table, ARP and routing tables, listening sockets, then the running configuration. Do this before any reboot, failover or upgrade. | Ops Lead (Network) | All captures stored, hashed, and in the artefact register | Each command's verbatim output, hashes, operator, UTC time |
| 2 | Request the vendor's memory or core capture for the platform through the TAC case and execute it under the Vendor Liaison's supervision. This is what ED 25-03 required of federal agencies, on a next-day deadline, and it is the only artefact that will resolve a memory-resident implant. | Vendor Liaison + Ops Lead (Network) | Image acquired and hashed, or the vendor's inability to provide one documented | Image hash, procedure used, case number, acquisition time |
| 3 | Screen every artefact before it leaves the organization. Config exports and support bundles are secret-bearing — they carry the account database and shared-secret material. Vendor ticket text is a credential store; treat it as one. | Vendor Liaison + Legal Liaison | Each outbound artefact reviewed and the review recorded | Redaction log, approver, destination, transfer method |
| 4 | Close the management plane: restrict administrative access to an out-of-band management network or jump host and remove any internet reachability. This is ED 26-01's own remediation and it is reversible, fast, and does not interrupt data-plane service. | Ops Lead (Network) | Management interface unreachable from the internet, verified by external scan | Rule change, scan before and after, change ticket |
| 5 | Block the exploit path at the upstream device where you can — an ACL, a WAF rule or an IPS signature in front of the appliance. CISA's own compensating-control menu is exactly this: disable services, reconfigure firewalls to block access, increase monitoring. | Ops Lead (Network) | Path blocked and the block proven by test | Rule definitions, test result, timestamp |
| 6 | Now patch. Record the pre-patch and post-patch firmware versions. Patching closes the entry; it does not evict an occupant, and a version string is not an integrity check. `EVIDENCE TIP-OFF` | Ops Lead (Network) | Every Susceptible device patched, versions recorded | Version before and after, patch artefact hash, install time, installer identity |
| 7 | Rotate the directory bind account the appliance uses. On-premises AD passwords are reset twice to defeat pass-the-hash under replication delay. | Ops Lead (Identity) | Both resets complete, appliance re-bound with the new credential | Reset timestamps, account name, replication confirmation |
| 8 | Rotate the rest of what the device held, as one batch: local administrative accounts, RADIUS and TACACS+ shared secrets (on the servers as well as the device), SNMP communities, API tokens for any management platform, and any SAML/OIDC client secret. | Ops Lead (Identity) + Ops Lead (Network) | Every item on the device's secret inventory rotated and re-tested | Per-secret rotation record with owner, system, and rotation time |
| 9 | Re-key IPsec pre-shared keys for every site-to-site tunnel and reissue the device certificates, revoking the old ones. The private key was resident on a device you no longer trust. Partner tunnels require coordination — this is a contractual notice, not a courtesy call. `TIP-OFF` | Ops Lead (Network) + Comms Lead | New keys in place, old certificates revoked, every tunnel re-established | Revocation records, new certificate serials, partner notification log |
| 10 | Revoke IdP sessions for every identity that authenticated through the device in the dwell window. A password reset alone leaves refresh tokens live, and in CAE sessions access tokens can persist up to 28 hours. `TIP-OFF` | Ops Lead (Identity) | Revocation issued for the full user list; no new tokens observed | Command transcripts, user list, first post-revocation sign-in events |
| 11 | Terminate active sessions on the appliance itself, last. This is the loudest action in the phase and it accomplishes nothing if the credentials behind those sessions are still valid. `TIP-OFF` | Ops Lead (Network) | Session table empty; new sessions authenticating against rotated credentials | Session table before and after, termination time |
| 12 | Enable off-device logging now if it was not on, to a collector the appliance holds no write credentials for, and set a silence alarm on the stream. | Ops Lead (Network) | Logs arriving at the collector; silence alarm tested by stopping the stream | Collector config, first received event, alarm test record |
# Step 7 — the appliance's directory bind account, reset twice.
# Microsoft's stated reason for the double reset: to mitigate pass-the-hash risk where
# on-premises password replication is delayed.
Set-ADAccountPassword -Identity <svc-vpn-bind> -Reset `
-NewPassword (ConvertTo-SecureString -AsPlainText "<random1>" -Force)
Set-ADAccountPassword -Identity <svc-vpn-bind> -Reset `
-NewPassword (ConvertTo-SecureString -AsPlainText "<random2>" -Force)# Step 10 — revoke sessions for users who authenticated through the device.
# Revoke-MgUserSignInSession invalidates refresh tokens and browser session cookies by
# resetting signInSessionsValidFromDateTime. It does NOT reach an access token before expiry,
# and it cannot revoke a session token issued by an application.
Connect-MgGraph -Scopes "User.ReadWrite.All","Directory.AccessAsUser.All"
$User = Get-MgUser -Search UserPrincipalName:'jdoe@contoso.com' -ConsistencyLevel eventual
Revoke-MgUserSignInSession -UserId $User.Id| # | Action | Who | Done when | Evidence to capture |
|---|---|---|---|---|
| 1 | Make the rebuild-vs-replace determination per device (see the decision callout below) and record the reasoning. A patched device is not an eradicated device. | IC + Ops Lead (Network) | Disposition recorded for every Compromised device | Decision record, evidence relied on, approver |
| 2 | Rebuild from a vendor-supplied image obtained fresh and hash-verified against the vendor's published value — not from the image already on the device and not from a local repository the device could write to. | Ops Lead (Network) | Device running a verified clean image | Image source URL, published hash, computed hash, install record |
| 3 | Restore configuration from version control, not from the device's own backup. The device's backup contains whatever the intruder added, including their accounts. `EVIDENCE` if the on-device backup is deleted before capture | Ops Lead (Network) | Config applied from a reviewed, version-controlled source | Commit hash restored from, reviewer, diff against the pre-incident config |
| 4 | Where a firmware, ROM or boot-level implant is suspected or the vendor advisory names one, replace the hardware. CISA's own eradication checklist says to rebuild hardware where rootkits are involved, and ArcaneDoor is the documented case of an implant surviving reboot and upgrade. The removed unit is evidence, not a spare. | IC + Executive Sponsor | Replacement in service; original unit sealed and in custody | RMA/asset records, custody form, serial numbers in and out |
| 5 | Re-verify every other device in the family against the same criteria, including the ones the CMDB missed and the ones already reported patched. CISA re-issued ED 25-03 guidance because devices reported as patched remained exposed. | Ops Lead (Network) | Every device re-verified with its evidence attached | Per-device verification record, re-scan output |
| 6 | Hunt downstream for use of the credentials the device held: the bind account's authentications, RADIUS-authenticated logins, jump hosts, the management platform, and anything the site-to-site tunnels reached. T1078 | Ops Lead (Identity) | Downstream use confirmed or excluded with a documented method | Directory and authentication query results, scope statement |
| 7 | If a domain-privileged or Tier-0 credential was resident on the device, escalate to Playbook 14.4 and treat the krbtgt double reset as in scope — the two resets require at least ten hours between them so the first fully replicates. | IC | Escalation raised and 14.4 running | Escalation record, credential inventory that triggered it |
| 8 | Continue detection through and after eradication, watching specifically for the adversary's reaction: new access attempts against the rebuilt device, use of a credential you have not yet rotated, or activity from a second foothold. | Ops Lead (Network) + SOC | 72 hours of clean post-eradication monitoring | Detection content deployed, alert review record |
| 9 | If new activity is found, re-scope: return to Phase 1 rather than closing. Adversaries at the perimeter routinely hold more than one persistence mechanism. | IC | Re-scope decision recorded | New indicators, revised scope statement |
| # | Action | Who | Done when | Evidence to capture |
|---|---|---|---|---|
| 1 | Return to service only with the management plane off the internet and reachable solely from the out-of-band network. Make this a gate, not an aspiration. | Ops Lead (Network) | External scan confirms no reachable management interface | Scan output, gate sign-off |
| 2 | Return to service only with off-device logging confirmed working and the silence alarm armed. An appliance that cannot ship logs is not fit to sit at the perimeter. | Ops Lead (Network) | Logs flowing, alarm tested | Collector receipt, alarm test record |
| 3 | Close the MFA gap the incident exposed. Sophos found MFA coverage inconsistent specifically across VPNs, firewalls and legacy applications even where organizations believed they had it. | Ops Lead (Identity) | Every authentication path through the device enforces MFA, with no exception group | Policy configuration, exception register (ideally empty) |
| 4 | Place the device configuration under version control with an automated drift alarm, if it was not already. | Ops Lead (Network) | Nightly snapshot committing and alerting on non-empty diff | Repository, first commit, alarm test |
| 5 | Re-establish partner site-to-site tunnels with the new keys and confirm with each partner in writing that the old material is retired on their side too. | Ops Lead (Network) + Comms Lead | All tunnels up on new key material, partner confirmations held | Partner confirmations, tunnel status |
| 6 | Validate the fix from outside: re-scan the exposed surface, confirm the exploit path now returns patched behavior, and consider emulating the adversary's technique to prove the countermeasure. | Ops Lead (Network) | External validation complete and evidenced | Scan and test results, tester, method |
| 7 | Transition every device state from Susceptible or Compromised to Remediated — or to Mitigated, which is a tracked state with a re-evaluation date, never a closed one. Compensating controls pause the obligation; they do not extinguish it. | Ops Lead (Network) | Every device carries a final state with evidence | Final state table, re-evaluation dates for anything Mitigated |
| # | Action | Who | Done when | Evidence to capture |
|---|---|---|---|---|
| 1 | Complete the timeline in UTC/ISO 8601 and reconcile it against the off-device logs and the packet capture, not against the device's own record. | Scribe | Timeline agreed by IC and Legal Liaison | Final timeline, source for each entry |
| 2 | Plot four dates on one line: when the adversary arrived, when the CVE was published, when it was added to KEV, and when you patched. The gap between the first two is your argument for compensating controls; the gap between the last two is your program metric. | Ops Lead (Network) | Four-date chart produced for the review | Dated chart with sources |
| 3 | Reconcile the incident inventory against the CMDB. Every appliance you discovered during the incident that was not in the asset inventory is a finding with an owner and a date. | Ops Lead (Network) | Delta list produced and assigned | Discovered-asset list, remediation owners |
| 4 | Fix the structural gaps this incident named: off-device logging coverage, management-plane exposure, the absence of an endpoint agent and what replaces it, and out-of-band access that works when the VPN is down. | Ops Lead (Network) | Each gap has an owner, a date and a tracked ticket | Gap register entries |
| 5 | Hold the vendor conversation: PSIRT notification path, whether you get advance notice, support-case handling for secret-bearing artefacts, and the firmware-integrity procedure you had to ask for mid-incident. | Vendor Liaison + Executive Sponsor | Vendor actions agreed and recorded | Meeting record, agreed commitments |
| 6 | Feed the scenario into the exercise program in Chapter 18 — specifically the branch where the primary remote-access path is the thing you must take away. | IC | Scenario card written | Exercise card, scheduled date |
| 7 | Run the blameless review. The question is never "who missed the patch"; it is "what made a 43-day median possible here, and what would have caught the intruder in the 23% of cases where the patch arrives after the exploitation does." | IC | Review held, actions assigned | Review notes, action register |
A vulnerability, by itself, starts no regulatory clock. What starts a clock in this scenario is confirmed unauthorized access to data, and there are two paths to it here. The first is a file-transfer appliance, where the data is on the device — treat that as a data breach until proven otherwise and hand to Playbook 14.7 immediately. The second is downstream: the credentials taken from the device reached a system holding personal or regulated data. Brief the Legal Liaison the moment you can name a specific credential and a specific system it unlocked; do not wait until you can count records.
Two non-regulatory notifications are easy to miss and both are contractual. Partners sharing an IPsec pre-shared key or a certificate with your device must rotate on their side, and that is a notice with an obligation attached. And if the trigger was your vendor's own compromise rather than a vulnerability in your deployment, coordinate any public statement through Playbook 14.5 rather than publishing independently.
Automate freely. KEV feed ingestion matched against the edge inventory, opening a ticket on a hit, is the highest-value automation in this scenario — the median CVE-to-KEV interval has fallen to 80 days and roughly 200 CVEs reached exploited status within 31 days in the first half of 2026, so a human reading advisories on a Tuesday is not a control. Also: a scheduled external scan for exposed management interfaces; nightly configuration snapshots into version control with an alarm on a non-empty diff; a silence alarm on every appliance's log stream; and the evidence export and hold in Phase 1 steps 2 and 3. All of it gathers; none of it changes anything.
Automate behind a human gate. Closing the management plane and applying an upstream block are strong one-click plays — reversible, scoped, and a false positive costs an administrator an inconvenience rather than an outage. Gate them on a named approver, rate-limit them, and make the automation prove the block with an external test rather than reporting success on an API response.
Never automate. Patching or rebooting an edge appliance, failing over to the HA partner, terminating workforce sessions, credential and PSK rotation, hardware replacement. Each is irreversible, destroys evidence, or scales its blast radius directly with your false-positive rate. The rule that holds: automation may gather, enrich, correlate and recommend without approval; it may act only where the action is reversible, scoped and rate-limited; anything irreversible needs a named human approver and carries the artefact that justified it. Chapter 17 has the gate design.
Actionable takeaway for the small team: the two controls that matter most here cost nothing. A cron job on a management host that exports each appliance's configuration, commits it to git and mails the diff; and a syslog target the appliance can write to but not administer, with an alert when the stream goes quiet. Between them they catch the added SSH key, the changed log destination and the cleared log — most of what Salt Typhoon's persistence actually looks like.
#!/usr/bin/env bash
# Nightly config drift alarm. Runs from a management host, never from the appliance.
# Replace fetch_config with your platform's read-only export (SSH export, HTTPS API, SCP backup).
set -euo pipefail
cd /srv/edge-config
while read -r dev; do
fetch_config "$dev" > "$dev.conf"
done < devices.txt
git add -A
if ! git diff --cached --quiet; then
git commit -q -m "edge config drift $(date -u +%Y-%m-%dT%H:%M:%SZ)"
git --no-pager diff HEAD~1 HEAD | mail -s "EDGE CONFIG DRIFT" soc@example.com
fi