🔄 Topic

Starting the vulnerability module of the Google Cybersecurity Certificate, I studied the four-step vulnerability management cycle and zero-days, then went deep on CI/CD pipeline security specifically — the automated build-test-deploy systems that, done insecurely, can automate the introduction of vulnerabilities at exactly the scale they’re meant to prevent.


🎯 Goal

Understand vulnerability management as a repeating cycle rather than a one-time task, and learn the specific ways an automated software delivery pipeline can become a vulnerability multiplier instead of a safeguard.


🛠 What I Did

I worked through the general vulnerability management cycle first, then applied it specifically to CI/CD.

Main areas covered:

  • learned vulnerability management as a four-step cycle: identify vulnerabilities, consider potential exploits, prepare defenses, evaluate those defenses — then repeat, since new vulnerabilities are constantly discovered and the cycle never actually finishes
  • learned zero-day exploits specifically: a vulnerability that’s exploited before anyone had a chance to plan for it — “zero days to fix it” — which is why diverse security team perspectives matter, since no single viewpoint catches everything a determined attacker might find
  • learned the difference between Continuous Integration (frequent automated merging, building, and testing — catching integration problems immediately), Continuous Delivery (code is always release-ready, but a human approval gate still exists before production), and Continuous Deployment (fully automated release straight to production, no manual gate at all)
  • learned that CI/CD can actively improve security when done right: automated security checks built into the pipeline (DAST for testing running applications, compliance checks, infrastructure validation) mean only vetted code ships, and faster releases mean security patches reach production faster too
  • studied the five specific CI/CD vulnerability categories: insecure dependencies (third-party libraries with known CVEs pulled in automatically during builds), misconfigured permissions (weak access control on the pipeline tools and repositories themselves, letting an attacker modify code or inject malicious content), lack of automated security testing (shipping vulnerabilities that go undetected until they’re already live), exposed secrets (API keys, passwords, or tokens hardcoded directly into code or pipeline configuration), and unsecured build environments (the servers running the pipeline itself becoming an attack target that lets someone alter builds or steal data)
  • learned the corresponding defense-in-depth response: DevSecOps as a mindset (security built into every stage, not bolted on at the end), least-privilege access control with MFA and RBAC on pipeline tools, automated SAST/SCA/DAST scanning at every build, continuously updated dependencies (via tools like Dependabot or Snyk), and dedicated secrets-management tools (like HashiCorp Vault or AWS Secrets Manager) instead of ever hardcoding a credential

🔗 Key Cybersecurity Connections

This material describes, almost exactly, a control I already built and wrote about weeks ago: a pre-push secret scan added the moment a new remote was created, specifically to make it structurally hard to accidentally push a secret. Reading the formal “exposed secrets” vulnerability category and its recommended fix — secrets management tools, never hardcoding — is a direct confirmation that the instinct behind that earlier fix matches documented best practice, not just personal caution.

The “insecure dependencies” and “unsecured build environments” categories connect to the evidence-gating and fail-closed discipline that’s come up repeatedly in my own infrastructure work: a CI/CD pipeline that trusts a build without verifying it is exactly the “success without proof” pattern I’ve hunted down in unrelated systems before — the fix is the same shape every time, verify the real thing happened, don’t trust that the absence of an error means correctness.


🔍 Investigation Questions

  • Does the vulnerability management cycle actually repeat on a schedule, or does it happen once and then get treated as finished?
  • Are third-party dependencies in any pipeline I touch scanned and kept current, or added once and never revisited?
  • Is access to pipeline configuration and secrets scoped by least privilege and RBAC, or does broad access get granted by default?
  • Does automated security testing (SAST/DAST) run on every build, or only occasionally / not at all?
  • Is any secret — API key, password, token — hardcoded anywhere in code or pipeline config right now?

🚨 Detection Opportunities

Checks for CI/CD pipeline security:

  • a dependency with a known CVE pulled into a build with no scanning or update cadence in place
  • pipeline or repository access not scoped by RBAC, or missing MFA
  • a build stage with no automated security testing (SAST/DAST) attached
  • a hardcoded secret anywhere in source code or pipeline configuration files
  • a build server or container with no hardening applied, reachable beyond what the pipeline actually needs

Example:

project=cicd-pipeline-audit
signal=hardcoded_secret_in_pipeline_config
risk_area=exposed_credential_via_insecure_automation
triage=rotate_secret_immediately_migrate_to_secrets_manager

🧭 MITRE ATT&CK Techniques

Possible mappings for the risks described:

  • T1195 — Supply Chain Compromise (insecure dependencies and unsecured build environments are both supply-chain attack surfaces)
  • T1552 — Unsecured Credentials (exposed secrets in code or pipeline config)

🗺 Visual Investigation Diagram

Code change pushed
    ↓
CI: automated build + test
    ↓
Insecure dependencies? → CVE shipped automatically
Misconfigured permissions? → unauthorized pipeline modification
No automated security testing? → vulnerabilities go live undetected
Exposed secrets? → hardcoded credential shipped in the clear
Unsecured build environment? → the pipeline itself becomes the target
    ↓
CD: deploy (with or without human approval gate)
    ↓
DevSecOps fix: security checks at every stage, not bolted on after

⚠ Challenges

The hardest part was resisting the instinct to treat CI/CD automation itself as inherently risky — the material is explicit that automation, done securely, actually reduces risk (fewer manual errors, faster patch delivery, smaller and more frequent releases limiting blast radius). The real risk is automating something insecure at scale, not automation itself.


📚 What I Learned

I learned that “the pipeline works” and “the pipeline is secure” are separate claims, exactly the same distinction I’ve run into before in my own infrastructure work between “the skill is discoverable” and “the skill is proven to have run correctly.” A CI/CD pipeline can build, test, and deploy flawlessly while still automating the introduction of a CVE, a hardcoded secret, or an unreviewed permission change — functioning and secure are not the same axis.


➡ Next Steps

  • Audit any pipeline I maintain against the five vulnerability categories specifically, one at a time
  • Confirm dependency scanning is actually running, not just configured once and forgotten
  • Revisit the earlier pre-push secret-scan work with this formal vulnerability-category framing in mind, and check if it covers exposed-secrets risk completely
  • Move on to defense in depth, CVE/CVSS, and the OWASP Top 10, and connect CI/CD-specific risks to the broader vulnerability landscape

🧠 Reflection

Seeing a control I’d already built — pre-push secret scanning — show up almost verbatim in formal course material was a useful checkpoint: it’s confirmation that the instincts built from real incidents line up with the documented best practices, which is exactly what the certificate is supposed to connect for me.


🧩 Lessons Learned

What worked

Learning the five CI/CD vulnerability categories as a structured checklist rather than a vague “pipelines can be risky” impression, and connecting each one to a specific, named defense.

What broke

Nothing broke — this was concept study, reinforced by recognizing the pattern in my own prior real-world work.

Why it mattered

CI/CD pipelines automate everything they touch, including vulnerabilities, if security isn’t built into every stage rather than checked once at the end.

Fix / takeaway

Treat automation as a force multiplier for whatever security posture already exists — insecure automation multiplies risk exactly as effectively as secure automation multiplies protection.


📈 Skill Progression Context

This supports my cybersecurity progression because CI/CD security and DevSecOps practices are directly relevant to any modern software delivery environment, and recognizing the same fail-closed, verify-don’t-assume discipline across both course material and my own infrastructure work shows the concepts are actually transferring, not just being memorized.


😄 TL;DR

A CI/CD pipeline that ships fast but insecure isn’t a security win — it’s just a faster way to ship the same five vulnerability categories, automated and at scale.