Software Securityhome
Fix a findingSearch
Phase 6 of 6

Maintenance

Watch for attacks and new vulnerabilities, fix by risk, publish advisories, and feed root causes back into planning.

Will you notice an attack, and can you fix a vulnerability quickly?

Start here: Respond to a vulnerability

Security practices in this phase

  1. Security logging

    Log sign-ins, authorization failures, administrative actions and rejected input with enough context to investigate, without secrets or unnecessary personal data.

    Done when: Alerts exist for the events the threat model cares about, and the logs have been used in an exercise.

  2. Vulnerability intake

    Monitor advisories for your dependencies, and run a vulnerability disclosure program so outsiders can report what they find.

    Done when: Reports and component advisories reach a named owner within days, and a security.txt file on every public host says where to report.

  3. Risk-based prioritization

    Prioritize by known exploitation, exposure and impact rather than by CVSS score alone, and fix within deadlines you measure.

    Done when: Each confirmed finding has an owner and a due date from a written policy, and overdue findings are visible.

  4. Dependency patching

    When an advisory lands for a dependency you ship, check whether it applies and whether the vulnerable code is reachable, then upgrade or record why not.

    Done when: Each dependency finding has a recorded decision with evidence, and known-exploited ones are fixed first.

  5. Advisories and incidents

    When a vulnerability affects users, publish an advisory that says who is affected and what to do, and follow an incident plan you have rehearsed.

    Done when: The incident plan has a named owner and has been exercised, and advisories go out in a standard, machine-readable format.

  6. Root cause analysis

    After each significant vulnerability, find out why it was possible, and change the requirements, patterns, checks or training so the same class does not return.

    Done when: Each significant vulnerability has a recorded root cause, and the changes it calls for are owned backlog items for the earlier phases.

Guides

76 guides
  • Respond to an exploited or malicious dependencyGuide · Application security

    When a dependency vulnerability is being exploited, or a package version is malicious, triage gives way to incident response: find every running copy, contain it, patch and redeploy, hunt for exploitation, rotate secrets and close on deployed evidence.

  • Hash collisions and digital signatures: MD5, SHA-1 and what to useReference · Identity & cryptography

    Distinguish collisions from preimages, follow a colliding pair through signing and verification, and retire MD5 and SHA-1 from the verifiers that still accept them.

  • Weak RSA key generation: shared primes, ROCA and safe keysReference · Identity & cryptography

    Recover a toy RSA factor with a greatest common divisor, distinguish shared primes, structured primes, duplicate keys and key length, and check a fleet of real public keys.

  • Create security logs someone can investigateGuide · Runtime, cloud & APIs

    Record meaningful decisions with consistent structure, protect the resulting evidence, and prove that important events reach an operational owner.

  • Run coordinated vulnerability disclosure from report to advisoryGuide · Application security

    Make private reporting discoverable, verify reports, coordinate a tested remedy, and give affected users enough information to act.

  • Bound background jobs and make retries safeGuide · Runtime, cloud & APIs

    Keep queues, workers and paid dependencies within a defined budget when clients retry, cancel or disappear.

  • Turn runtime events into a tested investigation and containment pathGuide · Runtime, cloud & APIs

    Collect evidence that answers a concrete security question and rehearse the response without destroying the facts needed to investigate.

  • Operate edge rules without hiding application defectsGuide · Runtime, cloud & APIs

    Tune WAF and abuse controls against legitimate traffic, parser behavior and measurable business effects.

  • Use VEX without losing vulnerability evidenceGuide · Software supply chain

    Produce and consume precise vulnerability status statements tied to the product, version, justification and evidence.

  • Envelope encryption and key rotation: data keys, KMS keys and backupsGuide · Identity & cryptography

    Encrypt each record with its own data key, wrap that key in a KMS or HSM key, and keep wrapping-key rotation, data re-encryption, key deletion and restored backups as separate, tested operations.

  • Operate TLS and certificates: configuration, renewal and verificationGuide · Identity & cryptography

    Configure a modern TLS profile with hybrid post-quantum key exchange, automate renewal for certificate lifetimes that fall to 47 days, and verify every termination point with a fresh handshake.

  • Post-quantum migration: cryptographic inventory, hybrid TLS and deadlinesGuide · Identity & cryptography

    Inventory public-key cryptography by operation, owner and lifetime, turn on hybrid ML-KEM key exchange where it is already available, and plan signature and archive migration against the NIST, NSA, NCSC and EU dates.

  • Keep HTTP request boundaries consistent across intermediariesGuide · Runtime, cloud & APIs

    Trace framing disagreements, reject ambiguous requests and verify what reaches the origin with a real loopback proxy project.

  • Prevent shared-cache poisoning and private-response deceptionGuide · Runtime, cloud & APIs

    Define lookup and storage policy, trace cache/origin interpretation differences and verify both public reuse and private isolation.

  • Case study: Log4Shell (CVE-2021-44228)Case study · Application security

    How a JNDI lookup in Apache Log4j became internet-wide remote code execution, why transitive and shaded dependencies made it so hard to patch, which mitigations held, and what it teaches about dependency inventory and SBOMs.

  • Start with a VDP, then add bug bounties and penetration testsGuide · Application security

    Publish a vulnerability disclosure policy and security.txt first, add a bug bounty only when you can triage and fix at the pace rewards bring, and buy penetration tests with a written scope, rules of engagement and a retest.

  • Case study: the Shai-Hulud npm worm (2025-2026)Case study · Software supply chain

    How a self-replicating npm worm turned stolen tokens into hundreds of infected packages in 2025, how its 2026 successors hijacked release pipelines and trusted publishing, what npm and GitHub changed in response, and the publishing, install and response practices that stop it.

  • Case study: the tj-actions/changed-files compromise (CVE-2025-30066)Case study · Software supply chain

    In March 2025 an attacker moved the version tags of a popular GitHub Action, and of a reviewdog action before it, to code that printed CI secrets into build logs. This case study traces the token chain back to one pull_request_target workflow, sizes the exposure, and shows how it was caught and which controls held.

  • Case study: the xz Utils backdoor (CVE-2024-3094)Case study · Software supply chain

    How a multi-year maintainer takeover planted a backdoor in xz Utils release tarballs, how build-time injection hid it from the git repository, why a performance anomaly exposed it, which systems shipped it, and what it teaches about reproducible builds and maintainer health.

  • Case study: the SolarWinds Orion build compromise (SUNBURST)Case study · Software supply chain

    How an implant on SolarWinds' build server inserted the SUNBURST backdoor into signed Orion updates in 2020, how it was found, why code signing and review could not catch it, and which build controls would have.

  • Case study: the Codecov Bash Uploader compromise (2021)Case study · Software supply chain

    How a credential leaked through Codecov's Docker image process let an attacker change the Bash Uploader that many CI pipelines downloaded and ran, which sent their environment variables, and the secrets in them, to the attacker for two months in 2021.

  • Case study: the 3CX DesktopApp supply-chain attack (CVE-2023-29059)Case study · Software supply chain

    How a trojanized trading application on one employee's personal computer led to 3CX's build servers and to signed, malicious 3CX DesktopApp releases in 2023: the first cascading software supply-chain compromise Mandiant had seen, how EDR caught it, and the controls that would have stopped it.

  • Case study: event-stream and ua-parser-js, two npm package takeoversCase study · Software supply chain

    Two ways attackers took over popular npm packages: event-stream (2018), handed to a stranger who added a targeted, encrypted payload through a new dependency, and ua-parser-js (2021), whose maintainer's account was hijacked to publish versions that installed malware for four hours. Timelines, detection and the controls that stop both.

  • Case study: the polyfill.io CDN takeover (2024)Case study · Software supply chain

    How the sale of the polyfill.io domain and project in February 2024 turned a script tag on more than 100,000 websites into a channel for malicious redirects by June, why Subresource Integrity could not have protected it, and the controls that would have.

  • Case study: MOVEit Transfer mass exploitation (CVE-2023-34362)Case study · Application security

    How one unauthenticated SQL injection in an internet-facing file transfer product let the Cl0p group steal data from thousands of organizations in days in 2023, how defenders found the web shell, and the vendor and customer controls that would have limited it.

  • Detect container and host threats at runtime with eBPF sensors and cloud servicesGuide · Runtime, cloud & APIs

    Watch process, file and network activity inside containers with an eBPF sensor or a managed cloud agent, write and test rules for the attacks you expect, tune them with narrow exceptions and contain a compromised pod without destroying evidence.

  • Keep HTTP services up under application-layer DDoSGuide · Runtime, cloud & APIs

    Bound every phase of an HTTP request, patch for the HTTP/2 attack classes, rate limit at the edge and the origin, and shed load deliberately, with nginx, Envoy and Node.js settings tested against slow clients and bursts.

  • Set up a PSIRT: services, intake, triage, SLAs and the CNA roleGuide · Application security

    How to structure and run a product security incident response team on the FIRST PSIRT Services Framework: organizational models, intake channels, triage, response targets, a case record and SLA script, becoming a CVE Numbering Authority under the CNA rules 4.2.0, and coordinating with other vendors.

  • Publish security advisories with CSAF, VEX, CVE records and OSVGuide · Application security

    What a useful security advisory contains and how to publish it in the formats tools read: a validated CSAF 2.0 VEX document, the CSAF provider files, CVE records through a CNA (CVE Record Format 5.2), and OSV records for open-source packages. Covers the status of CSAF 2.1 as of October 2026.

  • Respond to product security incidents: plan, tabletop and postmortemGuide · Application security

    An incident response plan for product security incidents (exploited vulnerabilities, compromised releases, leaked signing keys, malicious dependencies shipped to customers), aligned with NIST SP 800-61 Rev. 3, with reporting clocks, a two-scenario tabletop exercise template and a blameless postmortem template.

  • Case study: the LastPass breach (2022)Case study · Identity & cryptography

    How an attacker went from a compromised developer laptop to a DevOps engineer's home computer, the keys to LastPass's cloud backups and a copy of customer vaults; why each vault's safety then rested on its master password and PBKDF2 iteration count; and what it teaches about backup keys, privileged endpoints, KDF upgrades and unencrypted metadata.

  • Case study: the Okta support-system breach and session tokens in HAR files (2023)Case study · Identity & cryptography

    How a service account password saved to a personal browser profile let an attacker download customers' HAR files from Okta's support system, replay the session tokens inside them against five customers, and stay unseen for two weeks; and why HAR files are credentials, admin sessions need binding, and every exposed credential must be rotated.

  • Case study: certificate expiry outages at Ericsson (2018) and Microsoft Teams (2020), and Equifax's blind spotCase study · Identity & cryptography

    How an expired certificate inside Ericsson's core-network software cut mobile data for millions in about 11 countries, how an expired authentication certificate took Microsoft Teams offline, how an expired inspection certificate left Equifax blind for 19 months, through its 2017 breach, and the inventory, automation and testing that prevent each.

  • Case study: Moffatt v. Air Canada, a chatbot that misstated the refund policy (2022-2024)Case study · AI security

    How an airline's website chatbot told a grieving customer they could claim a bereavement fare after travel, what the British Columbia Civil Resolution Tribunal decided in February 2024, and the grounding, testing and correction practices that keep an automated answer consistent with the policy it describes.

  • Case study: the Nx s1ngularity compromise and its AI-assisted payload (2025)Case study · AI security

    How a pull-request-title injection in a GitHub Actions workflow on an outdated branch gave an attacker the Nx npm token in August 2025, how the malicious versions tried to turn developers' own AI command-line tools into file-search agents, and the workflow, publishing and agent controls that stop the same chain.

  • Case study: the Amazon Q Developer extension compromise (2025)Case study · AI security

    How an over-scoped GitHub token, extracted from an AWS CodeBuild pull request build, let a threat actor commit code to the Amazon Q Developer extension for VS Code that shipped in version 1.84.0 in July 2025, why the injected code aimed at the Q Developer CLI failed, and the CI and AI-agent controls the incident argues for.

  • Case study: Storm-0558 and the forged Microsoft tokens (2023)Case study · Identity & cryptography

    How a stolen 2016 consumer signing key and a token validation gap let Storm-0558 read enterprise Exchange Online mail in 2023, and what the review board found about rotation, logging and culture.

  • Case study: ingress-nginx CVE-2025-1974 and the exposed admission webhook (2025)Case study · Runtime, cloud & APIs

    How an admission webhook open to the whole Pod network made ingress-nginx's configuration-injection bugs a 9.8 cluster-takeover risk in 2025, and what its 2026 retirement means.

  • Case study: the CircleCI security incident (January 2023)Case study · Runtime, cloud & APIs

    How a session stolen from one engineer's laptop reached CircleCI's production systems and customers' stored secrets in 2023, and what platform operators and CI users should change.

  • Case study: Microsoft AI researchers' over-permissive SAS token (2023)Case study · Runtime, cloud & APIs

    How an over-permissive Azure Storage SAS token in a public repository for AI models exposed internal Microsoft data in 2023, and how to scope, scan for and revoke signed URLs.

  • Case study: First American's EaglePro document exposure (2019)Case study · Application security

    How sequential IDs in unauthenticated links exposed First American's title documents in 2019, after its own penetration test found the flaw and a clerical error let it go unfixed.

  • Case study: Citrix Bleed (CVE-2023-4966)Case study · Application security

    How a NetScaler memory over-read leaked session cookies that bypassed passwords and MFA in 2023, why patching did not end hijacked sessions, and how the pattern returned in 2025.

  • Case study: Spring4Shell (CVE-2022-22965)Case study · Application security

    How Spring's data binding let request parameters reach the class loader on JDK 9 and later in 2022, why the denylist workaround leaked, and what it teaches about framework-level mass assignment.

  • Case study: CrowdStrike Channel File 291 (July 2024)Case study · Application security

    How a CrowdStrike content update crashed Windows hosts in July 2024: a field-count mismatch hidden by wildcard tests, a missing bounds check, and no staged rollout.

Also part of this phase

Find your next answer

Type to search. Search runs in your browser.

Searches run in your browser, but the host can infer them from the index files they load. The address shows your search so you can bookmark or share it.