CISA/FBI Product Security Bad Practices, explained

Last updated:

Key takeaways

  • The document is explicit that this list "is focused and does not include every possible inadvisable cybersecurity practice" — leaving a practice off the list is not CISA or the FBI endorsing it.
  • Bad practice #1 is the most operationally demanding item on the list.
  • Version 1.0 was an initial public draft released in October 2024 alongside a Request for Information (Federal Register docket CISA-2024-0028).
  • Check your CVE records for the CWE field, not just timely publication — practice #11 explicitly calls out missing CWE fields as a problem in their own right, separate from disclosure speed.

Product Security Bad Practices, Version 2, is voluntary joint guidance published in January 2025 by the Cybersecurity and Infrastructure Security Agency (CISA) and the Federal Bureau of Investigation (FBI) — "the authoring organizations," as the document calls them — under CISA's Secure by Design initiative. It catalogs 13 specific practices the two agencies call "exceptionally risky," each with a named weakness class (CWE) and a recommended action, aimed at "software manufacturers who develop software products and services, including on-premises software, cloud services, and software as a service (SaaS)," and explicitly extended to "software products that run on operational technology (OT) products or embedded systems." It is distributed as TLP:CLEAR, meaning unrestricted public disclosure, and is non-binding: "this document imposes no requirement" to follow it.

Three categories, 13 practices

The document organizes its list into three categories it defines itself:

Product properties (8 practices)

# Bad practice CWE
1 New critical-infrastructure/NCF product lines in a memory-unsafe language (e.g., C/C++) without justification; existing memory-unsafe products without a published memory-safety roadmap CWE-119
2 User-provided input placed directly into raw SQL query strings CWE-89
3 User-provided input placed directly into raw OS command strings CWE-78
4 Shipping with default, universally-shared passwords CWE-1392, CWE-1393
5 Shipping with a component already listed on CISA's Known Exploited Vulnerabilities (KEV) Catalog —
6 Shipping open-source components with a disclosed CVSS 9.0+ vulnerability —
7 Using known-insecure or deprecated cryptography (TLS 1.0/1.1, MD5, SHA-1, DES) or no encryption for sensitive data in transit/at rest —
8 Hardcoded credentials or secrets in source code —

Security features (2 practices)

# Bad practice
9 No native or federated multi-factor authentication (including phishing-resistant MFA) in the baseline product; MFA not enabled by default for administrators
10 Insufficient logging to reconstruct common intrusion types: configuration changes, identity/sign-in and network flows, and data access or creation

Organizational processes and policies (3 practices)

# Bad practice
11 Not issuing timely, complete CVEs (with the CWE field populated) for critical (CVSS ≥ 9.0) or high-impact (CVSS ≥ 7.0) vulnerabilities
12 No published vulnerability disclosure policy (VDP) covering the product
13 For on-premises products, not clearly communicating the support period

The document is explicit that this list "is focused and does not include every possible inadvisable cybersecurity practice" — leaving a practice off the list is not CISA or the FBI endorsing it.

The memory-safety roadmap: a real deadline, not just advice

Bad practice #1 is the most operationally demanding item on the list. It has two parts: starting a new product line for critical-infrastructure/NCF use in a memory-unsafe language like C or C++ "where readily available alternative memory-safe languages could be used" is itself flagged as dangerous; separately, for existing products already written in memory-unsafe languages, the absence of a published memory-safety roadmap is flagged the same way.

The recommended action sets a concrete date: "software manufacturers should publish a memory safety roadmap by the end of 2025," prioritizing "network-facing code or code that handles sensitive functions like cryptographic operations" first. The obligation has a carve-out — it "does not apply to products that have an announced end-of-support date that is prior to Jan. 1, 2030" — and the guidance's own note acknowledges that rewriting an entire codebase isn't realistic short-term, suggesting manufacturers write new components in memory-safe languages while layering hardware or compiler mitigations (stack canaries, ASLR, FORTIFY_SOURCE) onto existing memory-unsafe code in the interim.

For the mechanics of fixing the underlying bug classes this targets, see our guides on memory corruption, command injection and hard-coded credentials in embedded firmware.

What changed from the October 2024 draft

Version 1.0 was an initial public draft released in October 2024 alongside a Request for Information (Federal Register docket CISA-2024-0028). CISA says it incorporated feedback from 78 public comments into Version 2.0, published January 2025. The net changes:

  • Three brand-new bad practices: insecure/deprecated cryptographic algorithms (#7), hardcoded credentials or secrets (#8), and unclear on-premises support periods (#13) — none of these appeared in the October 2024 draft.
  • Clarified KEV patch timelines: manufacturers should patch a newly published KEV affecting their product "no longer than 30 days from the date of which a patch for the component containing the KEV is made available," or publicly document why the KEV isn't exploitable in their product.
  • OT-specific MFA language: recognizing that MFA can itself introduce safety risk on some OT/medical devices (the document's own example is "medical devices in emergency rooms where delay in physician access could lead to patient harm"), manufacturers of those products should instead publish a threat model showing how they mitigate single-factor credential abuse, while still supporting MFA on lower-risk interfaces like vendor/maintenance accounts and remotely accessible engineering workstations and HMIs.
  • Phishing-resistant MFA called out explicitly as the expected bar, not just any second factor.

How this relates to other Secure by Design artifacts

Bad Practices isn't a standalone list — nearly every item footnotes a cross-reference to CISA's Secure by Design pledge (the voluntary pledge's measurable goals largely mirror practices #1, #2, #3, #4, #5, #9, #11 and #12) and to specific practices (PW) and response (RV) tasks in NIST's Secure Software Development Framework (SSDF), such as PW.5.1 for injection prevention and RV.1.3 for CVE/VDP transparency. Reading the three together — principles (Secure by Design), lifecycle practices (SSDF), and concrete anti-patterns (Bad Practices) — gives a fuller picture than any one document alone.

A workable starting point

  1. Triage against the 13 items as a checklist, not a scoring rubric — the document itself doesn't assign a severity scale beyond "dangerous"; treat every unaddressed item as a gap to close, prioritized by what's cheapest to fix first (a published VDP and support-period statement cost little; a memory-safety roadmap takes real engineering time).
  2. Start the memory-safety roadmap now if you ship C/C++ firmware— the end-of-2025 publication deadline has already passed as of this writing, so a late roadmap is itself now a visible gap against the guidance, not a future one.
  3. Check your CVE records for the CWE field, not just timely publication — practice #11 explicitly calls out missing CWE fields as a problem in their own right, separate from disclosure speed.
  4. Don't treat "voluntary" as "ignorable"— several items (default passwords, a published VDP, a support-period commitment) are already hard legal requirements under PSTI and the EU Cyber Resilience Act; closing the CISA/FBI list tends to close most of those obligations at the same time.

SoftWSP's device and firmware assessments check products against concrete anti-patterns like these — not just a CVE/CPE scan — including memory-safety posture, hardcoded secrets and default-credential handling: see Device & Firmware Security.

This guide summarizes CISA and the FBI's own published Product Security Bad Practices, Version 2 (January 2025); it is non-binding guidance, not a regulation, and this summary is not a substitute for the full document.

Sources

  1. CISA / FBI: Product Security Bad Practices, Version 2 (January 2025) — full text, all 13 bad practices, CWE mappings, Change Record
  2. CISA: Product Security Bad Practices (resource landing page)
  3. Federal Register: CISA Request for Information docket, PRODUCT SECURITY BAD PRACTICES (Docket No. CISA-2024-0028)
  4. CISA: Secure by Design (parent initiative)

Frequently asked questions

What is the CISA/FBI Product Security Bad Practices catalog?

Product Security Bad Practices is joint, voluntary guidance from the Cybersecurity and Infrastructure Security Agency (CISA) and the Federal Bureau of Investigation (FBI) — referred to in the document itself as "the authoring organizations" — published under CISA's Secure by Design initiative. Per its own Overview, it is "intended for software manufacturers who develop software products and services, including on-premises software, cloud services, and software as a service (SaaS)" and explicitly "also applies to software products that run on operational technology (OT) products or embedded systems." It lists 13 practices the authoring organizations consider "exceptionally risky," each paired with a recommended action, particularly for manufacturers whose software is "used in service of critical infrastructure or national critical functions (NCFs)." The document is distributed as TLP:CLEAR (unrestricted public disclosure) and states plainly: "The guidance contained in this document is non-binding, and while the authoring organizations encourage avoiding these bad practices, this document imposes no requirement to do so."

What changed between the October 2024 draft and the January 2025 Version 2?

Per the document's own Change Record, Version 1.0 was published in October 2024 as an initial draft, and Version 2.0 followed in January 2025 after CISA "received 78 public comments" during the Request for Information period referenced in the Federal Register docket (CISA-2024-0028). Version 2.0's changes include: three entirely new bad practices (use of known insecure or outdated cryptographic functions, hardcoded credentials or secrets in source code, and failure to clearly communicate a product's support period); additional context in the memory-safety section; more worked examples for preventing SQL injection and OS command injection; clarified patch timelines for Known Exploited Vulnerabilities (KEVs); new operational-technology-specific language for multi-factor authentication (MFA); and an added expectation that manufacturers support phishing-resistant MFA specifically, not just any second factor.

What are the 13 bad practices, and how are they grouped?

The catalog groups its 13 items into three categories it defines itself: "Product properties, which describe the observable, security-related qualities of a software product" (8 items — new products in memory-unsafe languages without a roadmap, SQL injection via unparameterized queries, OS command injection, default passwords, shipping with a component already on CISA's Known Exploited Vulnerabilities catalog, shipping open-source components with a CVSS 9.0+ vulnerability, insecure/deprecated cryptography such as TLS 1.0/1.1, MD5, SHA-1 or DES, and hardcoded credentials or secrets in source code); "Security features, which describe the security functionalities that a product supports" (2 items — no native or federated multi-factor authentication, and insufficient logging to reconstruct common intrusion types); and "Organizational processes and policies, which describe the actions taken by a software manufacturer to ensure strong transparency in its approach to security" (3 items — not issuing timely CVEs with a CWE field for critical/high-severity flaws, no published vulnerability disclosure policy, and not clearly communicating an on-premises product's support period). The document is explicit that this list "is focused and does not include every possible inadvisable cybersecurity practice" — omission from the list is not an endorsement.

What is the memory-safety roadmap requirement, and when is it due?

Bad practice #1 states that developing "new product lines for use in service of critical infrastructure or NCFs in a memory-unsafe language (e.g., C or C++) where readily available alternative memory-safe languages could be used is dangerous," and separately, that for existing products in memory-unsafe languages, "not having a published memory safety roadmap is dangerous." The recommended action sets a concrete deadline: "software manufacturers should publish a memory safety roadmap by the end of 2025, outlining their prioritized approach to eliminating memory safety vulnerabilities in priority code components written in memory unsafe languages" (e.g., network-facing code or cryptographic routines). This obligation is scoped — it "does not apply to products that have an announced end-of-support date that is prior to Jan. 1, 2030" — and the document's own Note acknowledges migration is incremental, citing interim steps like hardware/compiler mitigations and rewriting only the highest-risk components first. CWE-119 is the associated weakness class.

Is this guidance legally binding on device or software makers?

No. The document states this directly in its Overview: it is "voluntary guidance," and "this document imposes no requirement to do so" (to avoid the listed practices). It carries no enforcement mechanism of its own. That said, several of the same practices already show up as hard requirements elsewhere — default passwords and a vulnerability disclosure policy are PSTI and EU Cyber Resilience Act obligations, for example — so treating the catalog as voluntary-today, likely-regulated-tomorrow is a reasonable reading rather than dismissing it as non-actionable.

In this cluster