Skip to content

security(k8s): disposition KSV-01010 β€” 3 ConfigMap 'sensitive content' findings are a contact address and identifier namesΒ #3240

Description

@devantler

πŸ€– Generated by the Agentic Engineer

Evidence

Measured on main @4d2a3dc4 with scripts/megalinter-scan-counts.sh --trivy-only, plus a
per-target JSON breakdown and a with/without-ignorefile ablation of the same scan.

KSV-01010 "ConfigMap with sensitive content" accounts for 3 of the 24 remaining trivy
misconfigurations, and it is the only remaining check with no disposition entry at all:

file matched on
k8s/clusters/prod/bootstrap/config-map.yaml admin_email
k8s/clusters/local/bootstrap/config-map.yaml admin_email
k8s/bases/apps/actual-budget/config-map.yaml enablebanking_secretKey, const secretKey

Why the existing KSV-0109 entries do not cover it

.trivyignore.yaml already disposes KSV-0109 ("ConfigMap stores secrets") for two of these files.
It would be easy to assume KSV-01010 is that same check renumbered and that the dispositions have
silently died β€” that is not what is happening, and it was checked rather than assumed:

with    .trivyignore.yaml :  24 findings β€” KSV-0109 Γ—0, KSV-01010 Γ—3
without .trivyignore.yaml : 598 findings β€” KSV-0109 Γ—2, KSV-01010 Γ—3

The ablation moves the total 24 β†’ 598, so it demonstrably fired. KSV-0109 still exists in this
trivy and is still correctly suppressed; KSV-01010 is a separate sibling check with a wider match
set
that no entry covers. The two overlap on files but not on keys β€” KSV-0109 fires on
external_secrets_replicas, KSV-01010 on admin_email.

Note also that k8s/clusters/local/bootstrap/config-map.yaml carries no disposition under either
id β€” the existing entries were written per-file for the prod bootstrap only.

Why all three are false positives

  • admin_email (prod + local bootstrap) β€” the Let's Encrypt / ACME registration contact for the
    cluster issuer. It is a contact address the issuer requires and that appears in issued-certificate
    metadata; it is deliberately public and carries no authentication value.
  • actual-budget β€” the ConfigMap embeds a JavaScript source file that reads credentials from an
    ESO-mounted Secret and writes them into the app's SQLite table. trivy matches the identifier
    names
    (enablebanking_secretKey, const secretKey), not credential values; the file contains no
    secret material. This is the identical reasoning already accepted for the same file under
    KSV-0109.

Scanner-version caveat

Measured with trivy 0.74.0; CI runs 0.73.0 via MegaLinter 10.0.0, and πŸ”’ Validate Scanner Versions exists precisely because that drift can look like backlog movement. Whether KSV-01010
exists in 0.73.0 is not established here. An ignorefile entry for an id the running scanner does
not emit is inert, so the disposition is safe under both and is correct ahead of the next MegaLinter
bump β€” but the count claim below is a 0.74.0 claim, not a CI claim.

Smallest useful change

Three path-scoped KSV-01010 entries in .trivyignore.yaml, each carrying its own reason, in the
same shape as the existing KSV-0109 pair β€” plus a paired control proving the scoping is what
decides, so an application ConfigMap that genuinely embeds a credential is still reported.

Acceptance criteria

  • KSV-01010 reports 0 on this tree, path-scoped rather than skipped outright.
  • trivy total drops 24 β†’ 21, measured with scripts/megalinter-scan-counts.sh --trivy-only.
  • A paired control shows the same bytes under a non-excepted path still FAIL the check.
  • No other check's count moves.

Size: small.

Part of #2787

Activity

  1. moved this to πŸ“₯ Backlog in 🌊 Project Boardon Aug 19, 2026
  2. coderabbitai commented on Aug 19, 2026

    @coderabbitai
    Contributor
    πŸ”— Related PRs

    #3236 - security(k8s): disposition the 8 RBAC-breadth trivy findings [merged]
    #3216 - security(trivy): declare the trusted registries so KSV-0125 gates instead of noises [merged]
    #3227 - security(k8s): disposition the first-party RBAC trivy findings [merged]
    #3231 - chore(security): disposition KSV-0020/0021 on the vendored VM operators [merged]
    #3210 - security(k8s): disposition vendored KubeVirt and CDI operator RBAC as a class [merged]


    πŸ“ Issue Planner

    Check the box below or use the @coderabbitai plan command to generate an implementation plan and prompts that you can use with your favorite coding assistant.

    • Create Plan

    πŸ§ͺ Issue enrichment is currently in open beta.

    You can configure auto-planning by selecting labels in the issue_enrichment configuration.

    To disable automatic issue enrichment, add the following to your .coderabbit.yaml:

    issue_enrichment:
      auto_enrich:
        enabled: false

    πŸ’¬ Have feedback or questions? Drop into our discord!

  3. added a commit that references this issue on Aug 19, 2026
  4. moved this from πŸ“₯ Backlog to πŸ‘€ In Review in 🌊 Project Boardon Aug 19, 2026
  5. moved this from πŸ‘€ In Review to βœ… Done in 🌊 Project Boardon Aug 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Fields

    No fields configured for Security.

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions