Component Reuse and Common Controls

5 minutes 5 Questions

In the Certified Secure Software Lifecycle Professional (CSSLP) domain of Secure Software Concepts, Component Reuse and Common Controls are complementary design principles that promote efficiency, consistency, and reduced risk across the software development lifecycle. Component Reuse refers to leveraging previously built, tested, and validated software components—such as libraries, frameworks, modules, APIs, or services—rather than developing new code for every need. From a security perspective, reuse offers clear benefits: components that have already undergone security review, penetration testing, and hardening carry a lower likelihood of introducing new vulnerabilities than freshly written code. Reuse also reduces development time and cost, and improves maintainability because fixes applied to a shared component propagate to all consumers. However, CSSLP emphasizes that reuse carries risks. Reused components may contain latent vulnerabilities, be outdated, or be used outside their intended trust context. Third-party and open-source components introduce supply chain concerns, licensing issues, and dependency on external patch cycles. Therefore, organizations should maintain an inventory of approved components (often via a Software Bill of Materials), perform vulnerability scanning, verify provenance and integrity, and establish governance over which components may be reused. Common Controls are security controls that are implemented once and inherited by multiple systems or applications. Examples include centralized authentication and identity management, enterprise logging and monitoring, encryption key management services, network firewalls, and shared input validation libraries. Common controls are foundational in frameworks such as NIST SP 800-53 and the Risk Management Framework, where a control provider implements and documents the control and system owners inherit it rather than re-implementing it. This standardizes security posture, reduces duplication of effort, simplifies compliance assessment, and ensures consistent enforcement of policy. Together, these concepts support the principles of economy of mechanism, leveraging existing components, and defense in depth. Secure software professionals must balance the efficiency gains with rigorous vetting, ensuring that reused components and inherited controls remain trustworthy, current, and appropriate for each system's specific threat model.

Component Reuse and Common Controls (ISC2 CSSLP – Secure Software Concepts)

1. Why This Topic Is Important

Modern software is rarely written from scratch. Studies of enterprise applications consistently show that 70 to 90 percent of a typical codebase is made up of third-party libraries, frameworks, open-source packages, platform services and internally shared modules. This means the security of an application is largely inherited from the components it reuses and the controls provided by the environment it runs in. The CSSLP exam tests this topic in Domain 1 (Secure Software Concepts) because it sits at the intersection of two core ideas: leveraging existing, proven building blocks to reduce cost and risk, and understanding that reuse also imports risk unless it is deliberately governed. Incidents such as Heartbleed (OpenSSL), the Equifax breach (Apache Struts), Log4Shell (Log4j) and the SolarWinds supply-chain compromise all trace back to reused components. A secure software professional must therefore know how to select, vet, integrate, monitor and retire reused components, and how to rely on common (inherited) controls without creating blind spots.

2. What It Is

Component Reuse is the practice of building software from pre-existing, tested units rather than re-implementing functionality. Reusable components include:
- Open-source and commercial off-the-shelf (COTS) libraries and frameworks
- Internal shared libraries, SDKs and reference implementations
- Services and APIs (web services, microservices, SaaS endpoints)
- Platform services (identity providers, logging pipelines, key management services, WAFs)
- Design artifacts such as security patterns, templates, threat model fragments and approved architectures

From a security standpoint, the most valuable reuse is of security services themselves: authentication, authorization, session management, cryptography, input validation and output encoding libraries, audit logging and error handling. The CSSLP position is clear: never write your own cryptography, authentication or session management when a vetted, well-maintained implementation exists. Reuse of proven security components reduces the attack surface created by home-grown mistakes and enforces consistency across applications.

Common Controls (a term formalized in NIST SP 800-53 and the Risk Management Framework, NIST SP 800-37) are security controls that are implemented once and inherited by multiple systems or applications. NIST defines three control categories:
- Common controls: provided by an organization, platform or environment and inherited by many systems (for example, data center physical security, enterprise identity and access management, network perimeter defenses, centralized SIEM logging, backup infrastructure, security awareness training).
- System-specific controls: implemented and managed entirely within a single application (for example, application-level role checks, field-level input validation, business-rule enforcement).
- Hybrid controls: partly common and partly system-specific (for example, the enterprise provides the incident response plan, but the application team must supply system-specific procedures; the platform provides TLS termination but the application must configure correct cipher policies and certificate pinning where required).

The entity that provides a common control is the common control provider; the application that relies on it is said to inherit the control. In cloud computing the same idea appears as the shared responsibility model: the cloud provider supplies controls for the hypervisor, physical facilities and underlying network, while the customer remains responsible for controls over data, identities, application code and configuration.

3. How It Works

3.1 Benefits of Reuse and Common Controls
- Cost and schedule reduction: proven components avoid re-engineering.
- Higher assurance: widely used components have been tested, reviewed and attacked more than new code.
- Consistency: one authentication service or one logging standard means uniform policy enforcement and simpler audits.
- Reduced defect density: fewer lines of newly written code means fewer new bugs.
- Economies of scale for controls: one well-designed enterprise control replaces dozens of inconsistent local implementations.
- Easier compliance: inherited controls can be documented once in a common control catalog and referenced by each system security plan.

3.2 Risks of Reuse
- Known vulnerabilities: reused components carry their CVEs with them (OWASP Top 10 category Vulnerable and Outdated Components).
- Supply-chain compromise: malicious packages, typosquatting, dependency confusion, compromised build pipelines, backdoored updates.
- Transitive dependencies: a single direct dependency may pull in dozens of indirect ones that nobody consciously chose.
- Abandoned or unsupported components: no patches when flaws are found.
- Licensing risk: copyleft licenses (GPL, AGPL) may impose obligations on proprietary code; license violations are legal and reputational risks.
- Misuse and misconfiguration: a secure library used incorrectly (weak mode of a cipher, disabled certificate validation) provides no protection.
- Over-trust of inherited controls: assuming a control exists when it is not actually in scope for your system, or when the inherited control does not meet your data classification requirements.
- Unnecessary functionality: a large framework brings features you never use, expanding attack surface (violates economy of mechanism and least functionality).

3.3 Governing Reuse Securely
A mature program manages the full lifecycle of reused components:
1. Selection and vetting: evaluate provenance, maintainer activity, vulnerability history, security documentation, license, community size and whether the component is on the organization's approved list (allow-list) of libraries. Prefer components with a published security policy and responsive disclosure process.
2. Inventory: maintain a Software Bill of Materials (SBOM) in a standard format such as SPDX or CycloneDX so every component and version in every release is known.
3. Verification: validate integrity with checksums, digital signatures and signed packages; pull from trusted internal repositories or artifact proxies rather than directly from the public internet; pin versions.
4. Analysis: use Software Composition Analysis (SCA) tools to map components to known vulnerabilities (NVD, CVE, vendor advisories) and license obligations; integrate SCA into CI/CD so builds fail on critical findings.
5. Secure integration: follow the component's secure usage guidance, apply secure defaults, disable unused features, wrap third-party calls behind an internal abstraction layer to enable replacement and to centralize validation.
6. Monitoring and patching: subscribe to advisories, define SLAs for patching by severity, and keep upgrade paths short by avoiding deep customization of third-party code.
7. Retirement: remove dependencies that are no longer needed or no longer maintained; plan migration when end-of-life is announced.

3.4 Working With Common Controls
- Identify which controls your application needs (from the control baseline derived from data classification and risk assessment).
- Determine which of these are provided as common controls by the enterprise or platform, which are hybrid, and which remain system-specific.
- Verify, do not assume: obtain evidence (assessment results, SOC 2 report, authorization documentation) that the common control is implemented and effective, and confirm your system is actually within its scope.
- Document inheritance explicitly in the system security plan and threat model so gaps are visible.
- Address residual gaps with compensating or system-specific controls when the inherited control is weaker than your requirements (for example, enterprise logging retains events for 90 days but a regulation requires one year).
- Recognize that inheriting a control does not transfer accountability; the system owner remains accountable for the overall security posture.

3.5 Reuse of Security Design Artifacts
Reuse extends beyond code. Security patterns (such as the secure session pattern, reference monitor, input validation gateway, secure logger), approved reference architectures, standard threat model templates, coding standards and pre-approved cryptographic configurations are all reusable assets. Reusing design-level artifacts spreads good practice faster and makes reviews more efficient.

3.6 Related Secure Design Principles
Component reuse and common controls connect to several CSSLP design principles:
- Leveraging existing components is itself a listed secure design principle.
- Economy of mechanism / least functionality: include only what is needed; strip unused modules.
- Defense in depth: inherited perimeter and platform controls form outer layers; application controls form inner layers.
- Open design: prefer components whose security does not depend on secrecy of their implementation.
- Least privilege: run reused components and services with minimal permissions.
- Psychological acceptability and secure defaults: choose components whose default configuration is secure.

4. How to Answer Exam Questions on This Topic

CSSLP questions are scenario based and ask for the BEST or MOST appropriate answer. For this topic, expect questions about choosing between building and reusing, handling vulnerable third-party components, documenting inherited controls, cloud shared responsibility, SBOM and SCA, and licensing. Use the following reasoning approach:

Step 1 – Identify the real question. Is it about selection (vetting), integration (secure use), management (inventory, patching), or governance (control inheritance and accountability)?

Step 2 – Apply the CSSLP default stance. ISC2 favors reusing proven, vetted security components over writing new ones, but always with due diligence. An answer that says build your own cryptography or authentication is almost always wrong. An answer that says reuse anything without review is also wrong.

Step 3 – Prefer process and lifecycle answers over point solutions. Options describing an ongoing practice (maintain an SBOM, run SCA in the pipeline, establish an approved component list, subscribe to advisories) usually beat one-time actions (scan it once, ask the vendor).

Step 4 – Remember that accountability never transfers. If a question involves inherited controls or cloud providers, the system owner or organization remains accountable; verify the control and document the inheritance.

Step 5 – Eliminate extremes. Answers containing always, never, completely eliminate or no further action is needed are typically distractors.

5. Exam Tips: Answering Questions on Component Reuse and Common Controls

Tip 1: When asked how to reduce risk from third-party components, the strongest answers mention an inventory (SBOM) plus Software Composition Analysis integrated into the build pipeline. Manual review alone is weaker.

Tip 2: Know the three NIST control types cold: common (inherited, provided by the organization or platform), system-specific (implemented by the application), and hybrid (shared). If a scenario describes a control provided by the data center, enterprise IAM, or the cloud provider, it is a common control.

Tip 3: If a question describes a control that the enterprise provides but the application team must also configure or supplement, the answer is hybrid control.

Tip 4: Reuse of a vetted cryptographic library is correct; implementing a custom algorithm or custom protocol is incorrect. This appears frequently in different disguises.

Tip 5: When a reused component has a published vulnerability with no patch available, the best answer is typically to apply a compensating control (such as a WAF rule, disabling the vulnerable feature, or network isolation) while tracking the risk, not to ignore it or immediately rewrite the application.

Tip 6: For licensing questions, recognize that copyleft licenses (GPL family) can create obligations to disclose source for derived works, while permissive licenses (MIT, Apache 2.0, BSD) generally do not. Legal and license review is part of component vetting.

Tip 7: Questions about the cloud shared responsibility model test the same concept as common controls. The provider secures the infrastructure of the cloud; the customer secures what is in the cloud (data, identities, application code, configuration). The customer cannot inherit responsibility for its own application-layer controls.

Tip 8: If an answer option says to obtain and review the provider's assessment evidence (SOC 2 report, authorization package, penetration test summary) before relying on an inherited control, that reflects the verify-do-not-assume principle and is usually correct.

Tip 9: Favor answers that minimize attack surface when reusing large frameworks: disable unused modules, remove sample code and default accounts, and apply secure configuration baselines.

Tip 10: Supply-chain scenarios (compromised package repository, malicious update, dependency confusion) point to answers involving signed artifacts, integrity verification, trusted internal repositories, version pinning and provenance checks.

Tip 11: Look for the keyword transitive. If a question mentions vulnerabilities in dependencies the team did not directly choose, the answer involves full dependency-tree analysis via SCA and SBOM, not just reviewing the direct dependency list.

Tip 12: Remember that reuse applies to design artifacts too. A question asking how to spread secure design practice efficiently across many teams may have answers such as maintaining a library of approved security patterns, reference architectures and threat model templates.

Tip 13: When deciding between build and reuse, the CSSLP answer weighs total risk and total cost of ownership, including ongoing maintenance, not just initial development effort.

Tip 14: If asked who is ultimately accountable for the security of an application that inherits most of its controls, the answer is the system or application owner (or the organization), never the component vendor or the common control provider alone.

6. Quick Review Summary
- Reuse proven components, especially for security functions; never roll your own crypto or authentication.
- Every reused component imports its vulnerabilities, license terms and maintenance burden.
- Govern reuse through vetting, approved lists, SBOM, SCA, signed artifacts, patch SLAs and retirement planning.
- Common controls are inherited; system-specific controls are local; hybrid controls are shared.
- Verify inherited controls with evidence, document the inheritance, fill gaps with compensating controls.
- Accountability stays with the system owner regardless of how much is inherited or outsourced.
- On the exam, choose lifecycle-oriented, verified, least-functionality answers and reject extremes.
Test mode:
More Component Reuse and Common Controls questions
20 questions (total)