Chapter 16Lesson 04~130 minutes

Secrets, Dependency/Supply-Chain Signals, and Advanced Security Boundaries: Diagnostics, Failure Modes, and Production Practices

Diagnose secret and supply-chain signal failures without leaking credentials, double-counting findings, disabling noisy rules blindly, or inventing SCA coverage.

SecretsSupply chainSARIFSCA / SBOMSecurity boundaries

Learning objectives

  • Diagnose real-secret-lab, rotation, SCA-coverage, duplicate-import, rule-noise, and report-path failures causally.
  • Preserve first-failure evidence before changing rules, exclusions, issue states, or report feeds.
  • Separate scanner/import failure from Compute Engine, policy, external producer, credential issuer, and package-inventory failures.
  • Repair one intentionally duplicated native/external signal without hiding either original finding.
  • Reject destructive shortcuts such as blanket suppression, TLS disablement, direct database edits, or project-key replacement.

1. Evidence-first diagnostic sequence

  1. Preserve source revision, scanner logs, external report bytes/checksum, report-task.txt, issue/risk screenshots or JSON, and CI artifacts.
  2. Confirm SonarQube edition/version, scanner/runtime, external analyzer/SCA version, and any relevant plugin/integration version.
  3. Confirm source scope, sonar.text.inclusions, manifest/lockfile availability, report path, and effective parameters.
  4. Confirm scanner upload and Compute Engine task completion.
  5. Classify the result as native Sonar issue, imported external issue, Advanced Security dependency risk, or external-only evidence.
  6. Inspect rule/advisory ownership, issue status, gate, and any external producer state.
  7. For real secrets, inspect issuer/rotation state separately; for dependency risks, inspect inventory/SBOM/package provenance separately.
  8. Apply the least destructive correction and rerun the smallest equivalent scenario.

2. Failure: using real secrets in a training fixture

This is an incident, not a better test case. Stop using the credential, preserve only the minimum incident evidence allowed by policy, revoke/rotate it at the issuer, remove it from source and downstream copies, and investigate exposure. Do not paste the secret into tickets, screenshots, chat, or course evidence.

Never “verify” a credential by calling a production API from the lab. Validation belongs to the provider’s authorized credential-management workflow.

3. Failure: claiming secret detection is a vault or rotation system

SonarQube can say “a string matched a secret rule.” It cannot prove that all legitimate consumers have moved to a replacement secret, that the old key is disabled, or that the credential is absent from logs, build caches, issue trackers, artifacts, and remote history. Production closure therefore requires both static-analysis evidence and issuer/secret-manager evidence.

4. Failure: claiming Community Build is a complete SCA/SBOM replacement

Manifests visible to the scanner and imported SARIF findings are not equivalent to a dependency graph. A complete SCA claim requires evidence such as direct/transitive inventory, ecosystem/package-manager coverage, vulnerability/advisory matching, license policy where required, and release-linked SBOM output. Current Sonar-native SCA is an Advanced Security add-on starting in Enterprise edition.

5. Failure: double-counting native and imported findings

A team may run two secret scanners and import one scanner’s SARIF into SonarQube. If both detect the same location, the project can show two issues with different rule engines. That may be intentional, but it must not be mistaken for two independent vulnerabilities.

Correlate by revision, file/line, secret class, producer/rule, and message. Choose the authoritative workflow for remediation and remove redundant ingestion if it adds no independent value.

6. Failure: disabling a noisy rule before root-cause review

A noisy secret rule may indicate a real fixture convention, generated test data, or broad text scope. Preserve examples first. Determine whether the pattern is a genuine false positive, whether scope should exclude a clearly non-source artifact, or whether the rule belongs in a different profile. A global disablement can silently remove useful coverage from unrelated projects.

7. Failure: report exists on host but not where the scanner runs

# Host says the file exists:
ls -l "$PWD/reports/dependency-demo.sarif"

# But a scanner container may see /workspace instead of the host path.
# Inspect from inside the actual analysis environment before changing SonarQube:
pwd
ls -l reports/dependency-demo.sarif

# Keep the parameter relative to sonar.projectBaseDir when practical:
sonar-scanner -Dsonar.sarifReportPaths=reports/dependency-demo.sarif

Do not fix this by copying files into random server directories. The report belongs in the scanner workspace that produces the analysis.

8. Intentionally broken example: manufacture a duplicate secret signal

Assume Community Build already raises a native secret issue on config/demo.env:2. Create a second synthetic SARIF issue at the same location:

cat > reports/duplicate-secret.sarif <<'JSON'
{
  "version":"2.1.0",
  "runs":[{
    "tool":{"driver":{"name":"SyntheticSecretScanner","rules":[{"id":"DEMO-SECRET-001","defaultConfiguration":{"level":"error"}}]}},
    "results":[{
      "ruleId":"DEMO-SECRET-001",
      "message":{"text":"Synthetic duplicate signal for the same local fake-secret line."},
      "locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/demo.env"},"region":{"startLine":2}}}]
    }]
  }]
}
JSON

sonar-scanner -X \
  -Dsonar.sarifReportPaths=reports/duplicate-secret.sarif \
  2>&1 | tee evidence/duplicate-import.log

Interpretation: if two issues now reference the same source location, preserve both rule engines and messages. The repair is to remove the redundant external feed (or document why both are needed), not to mass-mark one whole class false positive merely to clean the dashboard.

9. Causal failure map

Symptom Likely layer Least-destructive next step
.env not scanned Secret/text scope Inspect active Secrets settings, inclusion patterns, file indexing/logs.
SARIF ignored Producer format/path or scanner workspace Validate JSON/SARIF 2.1.0, required fields, path, UTF-8, scanner logs.
External issue fixed in Sonar but still open in producer Ownership/synchronization Update the authoritative external tool; do not assume Sonar write-back.
No Dependencies tab/native risks on Community Build Edition/license boundary Use external SCA/SBOM or licensed Advanced Security; do not troubleshoot DB/search.
Real secret removed from source but still valid Credential lifecycle Revoke/rotate at issuer and verify consumers.
Duplicate issue count after import Overlapping detector feeds Correlate provenance and choose an authoritative feed.

10. Production shortcuts to reject

  • Do not use a real credential to make secret detection easier to demonstrate.
  • Do not disable TLS verification to reach SonarQube or an SCA service.
  • Do not use administrator tokens for routine scans or imports.
  • Do not delete logs or scanner caches before preserving first-failure evidence.
  • Do not directly edit SonarQube database/search indexes to remove findings.
  • Do not mass-suppress security findings or lower policy thresholds to make a gate green.
  • Do not replace a project key to erase history.
  • Do not present a single imported dependency advisory as a complete SBOM or SCA program.

Knowledge check

A real token disappears from the next Sonar scan. What evidence is still missing?

Why is an external issue marked False positive in SonarQube still potentially open in the producer?

What is the strongest evidence that Community Build did not perform native SCA?

Two findings point to the same fake secret line. Must there be two vulnerabilities?

What should you inspect before globally disabling a noisy Secrets rule?

Next lesson

Assemble the layered security-boundary checkpoint

Lesson 5 requires a reproducible packet that proves what SonarQube owns and what remains outside the platform.

Official references and version notes

Version and edition note

Rechecked 2026-09-08. Mandatory examples target SonarQube Community Build 26.9.0.129388 and SonarScanner CLI 8.1.0.6389. Commercial reference streams are SonarQube Server 2026 Release 4.1 and 2026.1.5 LTA. Community Build currently provides basic secrets detection and SARIF/generic external-issue import. Current product packaging expands secret coverage in commercial Server editions, while organization-specific custom secret patterns start in Enterprise edition. SonarQube Advanced Security SCA is a Server add-on starting in Enterprise edition; native dependency inventory/risk/SBOM evidence must not be claimed on Community Build merely because a manifest exists or a SARIF dependency issue was imported. Recheck secret rules, text inclusion defaults, external-report schema, supported package managers/languages, and license entitlements before automating another release.

Version and compatibility note

SonarQube product names, editions, release trains, scanner runtimes, APIs, authentication options, and platform prerequisites can change independently. Re-check the linked SonarSource primary documentation for the exact target release before applying version-sensitive commands or operational guidance outside the disposable course environment.

Keep the academy open

Support free, practical DevOps education.

Every lesson is designed to remain readable in a browser, downloadable from GitHub, and usable without a paid learning platform. Contributions help expand and maintain the curriculum.

Ethereum / ERC-20
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0Send only Ethereum/ERC-20 compatible assets to this address.