In short

Secure by Design is CISA's voluntary guidance for software manufacturers: take ownership of customers' security outcomes, be transparent about vulnerabilities, and make security a leadership priority. The 2024 pledge turns that into seven goals to show measurable progress on within a year: MFA, no default passwords, fewer vulnerability classes, patch adoption, a VDP, complete CVE records and customer access to intrusion evidence. For each goal, pick engineering actions, a metric with a baseline and evidence you could publish. The guidance is not a law, but the EU Cyber Resilience Act and the UK code of practice ask for much of the same.

  • Do treat the seven pledge goals as an engineering backlog with metrics, not a statement: each one names a measurable outcome.
  • Do ship secure defaults: security features such as MFA, SSO and audit logs in the base product, at no extra charge.
  • Do pick one or two vulnerability classes (for example SQL injection or XSS) and remove them by construction, then show the CWE trend in your CVE records.
  • Do publish a VDP and CVE records that include a CWE (and, for the pledge, a CPE) for every critical or high vulnerability.
  • Don't present the pledge as compliance: it is voluntary and CISA does not verify it; map it to binding obligations separately.

Verify it

  1. For each pledge goal, find the metric, its baseline and its current value, and the evidence a customer could read; a goal with no metric is not being worked.
  2. Run the CVE record check over every CVE your organization published this year and fix records missing a CWE or CPE.
  3. Install the product fresh and confirm that no shared default credential exists and that MFA, SSO and audit logging are available in the base edition.
  4. List the vulnerability classes you committed to reduce and compare their share of your CVEs and internal findings with the previous year.
  5. Check that your VDP covers every product, is linked from security.txt and authorizes good-faith testing.
Applies to
  • Secure by Design principles "Shifting the Balance of Cybersecurity Risk", revised 25 October 2023
  • Secure by Design Pledge Launched 8 May 2024; still open to new signers in October 2026
  • Product Security Bad Practices Version 2.0, January 2025
  • Scripts Python 3.14 standard library and SQLite (tested)

Software manufacturers of enterprise products, including on-premises software, cloud services and SaaS, which is the scope of the pledge. Device makers will find most practices useful too, but the pledge itself excludes physical products such as IoT devices.

Part of
Workflow: Build an AppSec program

Fix it in your stack

Tested fixes: the vulnerable code, the fix, a plausible fix that still fails, and the regression tests that tell them apart.

Learning goals and prerequisitesAbout 33 minutes: 11 to read and 22 for the exercise

What you will learn

  • Explain what CISA's Secure by Design principles, pledge and bad practices ask, and their status in 2026.
  • Turn each pledge goal into engineering actions, a metric and publishable evidence.
  • Measure MFA adoption and CVE record completeness with repeatable scripts.
  • Distinguish voluntary Secure by Design commitments from binding obligations such as the CRA.

Before you start

AppSec leads, product security engineers and engineering leaders at software manufacturers

  • Know which products your organization ships and how they are deployed.
  • Know whether your organization is a CVE Numbering Authority or works with one.
  • For the scripts: Python 3.11 or later and SQLite.
Go to the guided practice

What is Secure by Design, and what is its status in 2026?

Secure by Design is a CISA initiative aimed at software manufacturers, not their customers. Its core document, "Shifting the Balance of Cybersecurity Risk: Principles and Approaches for Secure by Design Software", was first published in April 2023 and revised on 25 October 2023 by CISA with 17 US and international partners. It argues that the burden of security should move from customers to manufacturers, and sets out three principles with tactics for each.

On 8 May 2024 CISA launched the Secure by Design Pledge with 68 signers. Signers commit to a good-faith effort toward seven goals and to publish measurable progress within a year, or tell CISA what they tried. On 10 October 2026 the pledge page still invited enterprise software manufacturers to join, CISA's signer page listed 393 companies, and a progress-reports page linked company reports. The pledge is voluntary and not legally binding, and CISA states that it does not enforce or verify adherence.

Around the pledge, CISA publishes Product Security Bad Practices (version 2.0, January 2025, with the FBI), Secure by Design Alerts on classes such as SQL injection, cross-site scripting, OS command injection, directory traversal and default passwords, memory-safety guidance, and Secure by Demand guides for buyers. Its CISA Vulnerability Review of fiscal years 2024 and 2025, published on 26 August 2026, again stresses reducing entire classes of vulnerability rather than fixing individual flaws after discovery.

What are the three Secure by Design principles?

Each principle has an explanation and a list of ways to demonstrate it in the CISA document. The table gives the engineering reading of each one.

What are the three Secure by Design principles?
PrincipleWhat it meansEngineering actions
Take Ownership of Customer Security OutcomesSecurity is built into the product through hardening, security features and safe defaults, not left to customers to configureParameterized queries and auto-escaping templates by default; memory-safe languages for new code; MFA, SSO and logging in the base product; secure configuration as the default
Embrace Radical Transparency and AccountabilityPublish what you know about your product's security so customers and the industry can act on itA VDP; complete CVE records with CWE; advisories in machine-readable form; SBOMs; a published memory-safety roadmap; root-cause analysis by CWE
Lead From the TopSecurity is a business priority set by senior leaders, with incentives and accountability, not only a technical taskSecurity goals in product plans and release criteria; an executive owner for each pledge goal; security metrics reviewed with delivery metrics

What does "secure by default" require of a product?

The CISA document defines secure by default as products that resist prevalent exploitation techniques out of the box, without added charge, and that make customers aware when they move away from safe defaults. Secure configuration should be the baseline, and security features should not be sold as extras.

It also recommends replacing hardening guides, which list the changes a customer must make to become secure, with loosening guides, which ship the product secure and explain the risk of each change a customer might make. A practical reading: treat each step in a hardening guide as a default that should probably change.

  • No shared default credentials; first-run setup creates instance-unique credentials or a time-limited setup token.
  • MFA available to every user and required for administrators; SSO in the base plan.
  • Audit logs of authentication, administration and configuration changes in the base plan.
  • Dangerous features off by default, with a warning that names the risk when they are turned on.
  • Automatic security updates where the deployment model allows it.

What do the seven pledge goals ask, and what should engineering do?

Each goal is phrased as something to demonstrate within one year of signing. The table restates it and turns it into actions and evidence. The site guides in the last column cover the engineering detail.

What do the seven pledge goals ask, and what should engineering do?
Pledge goalWhat CISA asks within a yearEngineering actionsEvidence to showGuide
Multi-factor authenticationMeasurably increase the use of MFA across the productsMFA at first sign-in for admins; passkeys; nudges for users without MFA; SSO in the base planMFA adoption by user type and factor type over time/domains/identity-crypto/authentication/passkeys-mfa-lifecycle/
Default passwordsMeasurable progress toward reducing default passwordsInstance-unique initial credentials; setup tokens that expire; migration of existing deploymentsNumber of products with default passwords over time/domains/identity-crypto/authentication/password-storage/
Reducing entire classes of vulnerabilityActions toward a significant, measurable reduction of one or more vulnerability classesSafe-by-construction libraries (ORM or query builders, auto-escaping templates); lint rules that block the unsafe API; memory-safe languages for new codeCWE trend in your CVEs and findings; a roadmap per class/domains/appsec/secure-coding/xss-output-encoding/
Security patchesMeasurably increase customers' installation of security patchesAutomatic updates on by default; long enough support periods; for SaaS, patching for the customerShare of installations on a supported version, by product/domains/supply-chain/releases/trusted-publishing-and-updates/
Vulnerability disclosure policyPublish a VDP that authorizes testing, promises not to pursue legal action for good-faith research, gives a reporting channel and allows public disclosurePolicy page, security.txt on every domain, a staffed intakeThe published policy and its scope/domains/appsec/vulnerability-response/vdp-bug-bounty-pentest/
CVEsInclude accurate CWE and CPE fields in every CVE record, and issue CVEs in time for at least all critical or high vulnerabilities that need customer action or are exploitedBecome a CNA or work with one; a CVE policy; CI check of record fieldsPublished CVE policy; share of records with CWE and CPE/domains/appsec/vulnerability-response/security-advisories-csaf-vex/
Evidence of intrusionsMeasurably increase customers' ability to gather evidence of intrusionsAudit logs in the base product for configuration, authentication and data access, with retention and exportLogging documentation and retention policy/domains/runtime/detection/security-event-logging/

Which product security bad practices should you remove first?

Product Security Bad Practices lists 13 practices CISA and the FBI call dangerous for software used in critical infrastructure or national critical functions. Version 2.0 added insecure cryptography, hardcoded credentials and undefined support periods. The document is non-binding, but it is the clearest list of what CISA considers indefensible, and most items can be checked automatically.

Which product security bad practices should you remove first?
CategoryBad practice (short form)Engineering check
Product propertiesNew product lines in memory-unsafe languages where alternatives exist; no published memory-safety roadmap for existing onesLanguage policy for new components; roadmap with dates for parsers and network-facing code
Product propertiesUser input in SQL query strings (CWE-89)Static analysis rule that fails on string-built queries
Product propertiesUser input in OS command strings (CWE-78)Ban shell invocation APIs; use library calls with argument arrays
Product propertiesDefault passwords shared across a productInstaller test that no shared credential exists
Product propertiesReleasing with a component that has an exploitable KEV vulnerabilityRelease gate on SBOM matched against the KEV catalog
Product propertiesReleasing with open-source components that have critical vulnerabilitiesRelease gate on SCA results; patch at no cost when new ones appear
Product propertiesInsecure or deprecated cryptography, or no encryption of sensitive data in transit or at restCrypto inventory and banned-algorithm checks
Product propertiesHardcoded credentials or secrets in source codeSecret scanning in CI and push protection
Security featuresNo MFA, including phishing-resistant MFA, in the baseline versionNative MFA or standards-based SSO in every edition
Security featuresNot enough logs in the baseline version to gather evidence of common intrusionsAudit log coverage tests
OrganizationalNot issuing timely CVEs for critical or high vulnerabilities, or no CWE in CVE recordsCVE record check in CI
OrganizationalNo published VDP covering the productPolicy and security.txt monitoring
OrganizationalNo clear support period for on-premises productsPublished support dates per version

What does CISA expect on memory safety?

CISA's "The Case for Memory Safe Roadmaps" (6 December 2023, with the NSA, the FBI and agencies in Australia, Canada, the UK and New Zealand) asks manufacturers to publish a roadmap for eliminating memory-safety vulnerabilities. Product Security Bad Practices version 2.0 sets the expectation that new product lines use memory-safe languages where alternatives exist and that existing products have a published roadmap by the end of 2025, prioritizing components such as network-facing code and cryptographic operations. Products with an announced end of support before 1 January 2030 are excluded. On 24 June 2025 the NSA and CISA added "Memory Safe Languages: Reducing Vulnerabilities in Modern Software Development", which covers adoption barriers and incremental approaches.

For engineering, a roadmap is a list of components with dates: which new code is written in a memory-safe language, which C or C++ components are rewritten or isolated first, and which compiler and runtime hardening applies meanwhile. The guides at /domains/appsec/platform-security/memory-safety-c-cpp/ and /domains/appsec/platform-security/rust-unsafe-ffi/ cover the hardening and the boundary between Rust and C.

How do you track evidence for each goal?

Keep one register per product that names, for each goal, the actions taken, a metric with its baseline and current value, the script or query that produces it, and the evidence a customer could read. It doubles as the outline of a public progress report. The example is fictional.

secure-by-design-evidence.yamlYAML
# Evidence register for the seven Secure by Design pledge goals. One entry per goal and product.
product: Ledgerly (fictional SaaS)
period: 2026-01-01/2026-12-31
goals:
  - goal: mfa
    actions: [MFA required for admins at first sign-in, passkeys offered to all users, SSO in the base plan]
    metric: {name: admins with any MFA, baseline: 61%, current: 100%, source: mfa_adoption.sql}
    evidence: [quarterly MFA adoption export, release note announcing admin MFA]
  - goal: default-passwords
    actions: [installer generates a random per-instance admin password, setup token expires after first use]
    metric: {name: product lines shipping a shared default password, baseline: 1, current: 0}
    evidence: [installer test test_no_shared_default_password, appliance build checklist]
  - goal: vulnerability-classes
    classes: [CWE-89, CWE-79]
    actions: [ORM-only data access enforced by a lint rule, auto-escaping templates with no raw-HTML helper]
    metric: {name: new CVEs with CWE-89 or CWE-79, baseline: 4 per year, current: 0 in two quarters}
    evidence: [lint rule and CI run, CWE trend from our CVE records]
  - goal: security-patches
    actions: [automatic updates on by default for the agent, SaaS patched by us]
    metric: {name: agents on a supported version 30 days after release, baseline: 48%, current: 91%}
    evidence: [version telemetry report]
  - goal: vdp
    actions: [VDP with safe harbor published, security.txt on every domain]
    evidence: ["https://ledgerly.example/security/policy", "https://ledgerly.example/.well-known/security.txt"]
  - goal: cves
    actions: [CNA scope covers all products, CVE policy published, CWE and CPE in every record]
    metric: {name: our CVE records with CWE and CPE, baseline: 40%, current: 100%, source: check_cve_records.py}
    evidence: [CVE policy page, CI job output]
  - goal: evidence-of-intrusions
    actions: [audit log of admin, configuration and authentication events in the base plan, 13-month retention]
    evidence: [audit log documentation, log schema]

How do you measure MFA adoption the way the pledge suggests?

The pledge gives "aggregate statistics of MFA adoption over time, broken down by user type and MFA type" as an example of measurable progress. The query reports, per user type, the share of active users with any second factor, with a phishing-resistant factor (WebAuthn passkeys or security keys) and with SMS only, as of a given date. Run it monthly and keep the history. With a sample of four admins and five active standard users it returned 75%, 25% and 25% for admins and 40%, 20% and 20% for standard users.

mfa_adoption.sqlSQL
-- MFA adoption by user type and strongest factor (Secure by Design pledge goal 1).
-- users(id, role, active); mfa_factors(user_id, kind, enrolled_at) with kind in ('sms', 'totp', 'webauthn').
WITH strongest AS (
  SELECT u.id,
         u.role,
         MAX(CASE f.kind WHEN 'webauthn' THEN 3 WHEN 'totp' THEN 2 WHEN 'sms' THEN 1 ELSE 0 END) AS level
  FROM users AS u
  LEFT JOIN mfa_factors AS f
    ON f.user_id = u.id AND f.enrolled_at < :as_of
  WHERE u.active = 1
  GROUP BY u.id, u.role
)
SELECT role,
       COUNT(*) AS users,
       ROUND(100.0 * SUM(level > 0) / COUNT(*), 1) AS any_mfa_pct,
       ROUND(100.0 * SUM(level = 3) / COUNT(*), 1) AS phishing_resistant_pct,
       ROUND(100.0 * SUM(level = 1) / COUNT(*), 1) AS sms_only_pct
FROM strongest
GROUP BY role
ORDER BY role;

How do you check that your CVE records are complete?

The CVE goal asks for accurate CWE and CPE fields in every CVE record for your products, and Bad Practice 11 calls a missing CWE dangerous. The script reads each record's CNA container from the CVE Services API and fails when problemTypes has no CWE or affected has no CPE. Run it in CI over the CVE IDs your organization published.

Run against public records on 10 October 2026, it passed CVE-2024-3094 (CWE-506, six CPEs) and CVE-2026-34480 (CWE-116, one CPE), and failed CVE-2021-44228, whose CNA record has CWEs but no CPE, and CVE-2023-22894, whose CNA record has neither. CPE is optional in the CVE record format; the pledge asks for it anyway because scanners match on it.

check_cve_records.pyPython
"""Check that your published CVE records carry a CWE and a CPE (Secure by Design pledge goal 6).

Usage: python check_cve_records.py CVE-2026-0001 CVE-2026-0002 ...
Reads the CNA container of each record from the CVE Services API (CVE JSON 5.x).
"""
import json
import sys
import urllib.request

API = "https://cveawg.mitre.org/api/cve/"


def cna_container(cve_id):
    with urllib.request.urlopen(API + cve_id, timeout=30) as resp:
        return json.load(resp)["containers"]["cna"]


def check(cve_id):
    cna = cna_container(cve_id)
    cwes = sorted(
        {d["cweId"] for p in cna.get("problemTypes", []) for d in p.get("descriptions", []) if "cweId" in d}
    )
    cpes = sorted({c for a in cna.get("affected", []) for c in a.get("cpes", [])})
    problems = []
    if not cwes:
        problems.append("no CWE in problemTypes")
    if not cpes:
        problems.append("no CPE in affected[].cpes")
    return cwes, cpes, problems


if __name__ == "__main__":
    failed = 0
    for cve_id in sys.argv[1:]:
        cwes, cpes, problems = check(cve_id)
        status = "OK  " if not problems else "FAIL"
        failed += bool(problems)
        print(f"{status} {cve_id} cwe={','.join(cwes) or '-'} cpes={len(cpes)} {'; '.join(problems)}")
    sys.exit(1 if failed else 0)

How does Secure by Design relate to binding obligations?

Secure by Design is guidance. Several obligations ask for overlapping outcomes, but none of them is satisfied by citing the pledge, and the pledge does not satisfy them. Map each obligation separately, as described in /frameworks/control-mapping-and-evidence/.

How does Secure by Design relate to binding obligations?
InstrumentStatusOverlap with Secure by Design
EU Cyber Resilience ActRegulation; vulnerability and incident reporting applies from 11 September 2026, the remaining obligations from 11 December 2027Secure by default configuration, vulnerability handling, security updates, a coordinated disclosure policy (Annex I). See /frameworks/cra-reporting-runbook/ and /frameworks/product-security-obligations/
UK Software Security Code of PracticeVoluntary; published 7 May 2025 by DSIT with the NCSC; 14 principles in four themes, with a self-assessmentSecure by design and by default, vulnerability disclosure, timely updates, end-of-support notice of at least one year
NIST SSDF (SP 800-218)Guidance; version 1.1 final, 1.2 in draft; US federal attestation became optional under OMB M-26-05 in January 2026Secure development practices behind most pledge goals. See /frameworks/ssdf-product-lifecycle/
PCI DSS v4.0.1Contractual for entities that handle payment cardsSecure coding, vulnerability management and training requirements in Requirement 6

Where do Secure by Design programs go wrong?

  • Signing the pledge and publishing a statement, with no metric or baseline behind each goal.
  • Counting CVEs as failure. CISA notes that better reporting can raise CVE counts in the short term; measure the trend by CWE class instead.
  • Keeping security features in premium tiers. Logging, SSO and MFA in the base product are central to secure by default.
  • Treating a hardening guide as a fix. Each manual hardening step is a default that should change.
  • Writing a memory-safety roadmap with no component list or dates.
  • Mapping the pledge to the CRA or another obligation as if it were equivalent.

Guided practice

Ledgerly, a fictional SaaS company, signed the pledge eleven months ago. Its draft progress report is below. Decide which goals show measurable progress, which do not, and what evidence is missing.

Supplied scenario material
Plain text
Draft progress report (Ledgerly, fictional)
1 MFA: "We care deeply about MFA and encourage all users to enable it." Admin MFA: 61% at signing, 64% now. SMS is the only factor offered.
2 Default passwords: on-premises collector shipped with admin/admin until v3.2; v3.2 (four months ago) generates a random password at install. 38% of collectors still run older versions.
3 Vulnerability classes: "We fixed 14 XSS bugs this year." CVEs with CWE-79: 3 last year, 5 this year. Templates still allow `|safe` on user content.
4 Patches: SaaS patched by Ledgerly; collectors update only manually.
5 VDP: published policy with safe harbor; security.txt on www only, not on app.ledgerly.example or api.ledgerly.example.
6 CVEs: 4 CVEs this year; check_cve_records.py output: 2 OK, 2 FAIL (no CPE).
7 Evidence of intrusions: audit logs available on the Enterprise plan only, 30-day retention.
  1. 1. Judge the MFA goal

    Does goal 1 show measurable progress, and what would?

    Expected result and reasoning

    Barely: 61% to 64% with no change to the product. Require MFA for admins at sign-in, add TOTP and passkeys, and report adoption by user type and factor type monthly.

  2. 2. Judge default passwords and patches

    Assess goals 2 and 4 together.

    Expected result and reasoning

    Goal 2 has a real product change (random passwords from v3.2), but 38% of collectors still run versions that shipped admin/admin. Goal 4 is where the gap is: collectors update only manually. Add automatic updates on by default and a campaign to move old collectors, then report the share of collectors on a supported version.

  3. 3. Judge the vulnerability class goal

    Is "we fixed 14 XSS bugs" progress toward reducing a class?

    Expected result and reasoning

    No. Fixing instances is not reducing the class, and the template engine still allows unescaped output. Remove or lint-block |safe on user content, add a CSP, and track CWE-79 findings and CVEs over time; a short-term rise in CVEs can reflect better reporting.

  4. 4. Fix VDP and CVE gaps

    List the changes needed for goals 5 and 6.

    Expected result and reasoning

    Publish security.txt on every domain in scope, including app and api. Add CPEs to the two CVE records and run the record check in CI so new records cannot be published without CWE and CPE.

  5. 5. Judge intrusion evidence

    Assess goal 7 against secure by default.

    Expected result and reasoning

    Audit logs only on the Enterprise plan conflict with secure by default and with the pledge's example of logs in the baseline version. Move authentication, admin and configuration logs into every plan with longer retention, and document them.

Your deliverable: A one-page review of the draft report: for each goal, "progress shown" or "not yet", the missing metric or evidence, and one engineering action.

Ledgerly and its numbers are fictional. CISA does not grade progress reports; the judgment here applies the pledge's own wording about measurable progress.

Save a draft on this device to resume later. Automatic saving begins after you choose Save. Drafts are never sent by this application; use synthetic data.

No draft saved on this device yet.

Sources & further reading

The standards, specifications and documentation behind the guidance above. Each is the evidence for a claim on this page; consult it for detail beyond the defaults and versions listed here.

  1. CISA: Secure by Design Alerts
  2. CISA and partners: Shifting the Balance of Cybersecurity Risk (Secure by Design principles). Revised 25 October 2023.
  3. CISA: Secure by Design Pledge (goals and scope)
  4. CISA: Secure by Design Pledge signers
  5. CISA: Announcement of the pledge with 68 signers (8 May 2024)
  6. CISA and FBI: Product Security Bad Practices. Version 2.0 (17 January 2025).
  7. CISA and partners: The Case for Memory Safe Roadmaps. 6 December 2023.
  8. NSA and CISA: Memory Safe Languages: Reducing Vulnerabilities in Modern Software Development. 24 June 2025.
  9. CISA Vulnerability Review: fiscal years 2024 and 2025. 26 August 2026.
  10. UK DSIT: Software Security Code of Practice. Published 7 May 2025, updated 15 January 2026.
  11. CVE Services API: CVE record by ID (CVE-2024-3094)

Reference information

Download this guide as Markdown