Skip to content

Working with results

Code findings are ordinary Cloud Security findings. They share the worklist, the triage actions (mitigated, accepted, false positive), owners, tickets, remediation SLAs and the cloud_finding.* automation events. Each one also carries a repo key and a code block with the file, line range, package and fixed version where they apply.

In the console

Overview tab

Cloud Security → Code security → Overview is the place to start:

  • Open findings, Priority repositories, Scanner coverage and Container images at a glance. Open risk worklist jumps to Risks.
  • Priority repositories lists the repositories with the most severe open findings first.
  • Priority fix queue groups open dependency findings by the one upgrade that closes them, such as "Upgrade lodash", with how many findings and repositories each upgrade clears. Start here to close the most findings with the fewest changes.
  • Scanner coverage counts repositories that are partial, not scanned, held back by a plan limit, unknown or archived. A repository that was not fully scanned has not been proven clean.
  • Protection capabilities shows, per capability (repository scanning, pull-request checks, automated fixes, container image scanning), whether it is set up, needs attention, or could not be verified.
  • Code to runtime evidence follows an image from the repositories that build it to the workloads running it.
  • GitHub webhooks and Webhook automation show whether push rescans and pull-request checks can fire. See Pull-request checks and push rescans.

Repositories tab

Every repository the connections can see, with its scan status and open findings. Filter by name or finding class, or narrow to Critical or high, Partial coverage, Not scanned or Public.

Each row offers Rescan now, Download SBOM, View findings, Details, Exclude from scanning and Open on the provider. Select several rows to rescan, exclude or download SBOMs in bulk.

Exclude from scanning adds the repository to the exclude list of every enabled code-scanning policy. The next pass stops scanning it and resolves its open findings.

Details opens a drawer with the repository's coverage, the state of each engine (On, Off, Partial, Unknown or No result), the severity floor and the top open findings. If the repository is outside the GitHub App's installation, the drawer says so and links to the installation page.

Images and Registries tabs

Images lists container images by digest, with the repositories they are Built from, the workloads they are Running on, and their open findings. Select an image to open its findings in Risks. Registries groups images by image repository.

Risks

Code findings appear in the main worklist on Risks. Use the Repository filter for one repository, and Code source to separate Hosted scans from Pushed results (see Bring your own scanner).

A dependency finding's detail page has an Open AutoFix PR button. See AutoFix pull requests.

From the CLI

# Repositories with scan status and open-finding counts.
limacharlie cloudsec code repos
limacharlie cloudsec code repos --with-findings --all
limacharlie cloudsec code repos -q payments

# Has the lane run, and what happened last time?
limacharlie cloudsec code status

# The dependency upgrades that close the most findings.
limacharlie cloudsec code fixes

# What each GitHub connection is allowed to do.
limacharlie cloudsec code capabilities

# Findings for one repository.
limacharlie cloudsec finding list --repo acme/payments --class vulnerability
limacharlie cloudsec finding list --class secret --severity CRITICAL

code repos returns a repo key (<owner>/<name>) that the other commands accept. code status is the authoritative answer to "did the scan run". An empty code list there means the lane has never run in this organization.

Filter by where a finding came from

limacharlie cloudsec finding list --repo acme/payments --source hosted
limacharlie cloudsec finding list --repo acme/payments --source ingest
--source Findings from
hosted Scans LimaCharlie ran
ingest Results you pushed
other The source-control platform's own detectors, such as GitHub's Dependabot, code-scanning and secret-scanning alerts
none Findings with no code origin, which is most cloud findings
both No filter (the default)

Each finding also records the producer in code.detected_via: lc-code-scanner (hosted scan), lc-code-scanner-byo (a local scan you pushed), sarif-ingest:<tool> (a SARIF push, with the tool's name), cyclonedx-ingest, or dependabot, code_scanning and secret_scanning for GitHub's own alerts.

Scan status

Each repository has a scan_status:

Status Meaning
scanned The last scan completed.
partial A limit or an unavailable engine cut the scan short. The findings are a lower bound, not a clean result. The limits that were hit are listed on the repository.
unknown No scan state yet. scan_status_reason says why, for example repo_not_scanned.

Why a finding closed

A finding closes when a complete scan no longer sees it. Its closed_reason tells you when a policy change closed it instead: below_severity_floor (the floor was raised), scanner_disabled (the engine was turned off) or repo_out_of_scope (the repository was excluded).

If one scan would close a large share of a repository's findings at once, nothing closes until a second scan agrees. This protects against a broken scan wiping out a repository's findings, so a big fix can take one extra scan to show.

See Status and reason codes for every reason.

Software bill of materials

Every scanned repository gets a CycloneDX SBOM. Download it from the Repositories tab, or:

limacharlie cloudsec code sbom --repo acme/payments -o payments-sbom.json.gz

For GitLab and Bitbucket repositories, add --provider gitlab or --provider bitbucket to code sbom and code rescan. They default to GitHub.

The SBOM is kept as a downloadable file, not as inventory rows, so a repository with thousands of packages does not add thousands of rows to your estate. A repository that has not finished a scan yet reports sbom_not_generated_yet. One with no dependency manifest, such as a documentation repository, reports no_sbom_for_this_repository.

How code connects to your cloud

Repositories and container images are nodes in the security graph. Two edges connect them to what is running: built-from (image to the repository that produced it) and runs-image (workload to the image it runs).

That makes it possible to ask questions a repository scanner cannot answer on its own. These queries ship in the query pack:

Query Question
vulnerable_packages_on_exposed_workloads Which advisories are in images that internet-facing workloads run?
images_with_kev_on_exposed_workloads The same, limited to known-exploited vulnerabilities
secrets_in_repos_with_cloud_oidc Which federated identities can assume a cloud identity? This is the blast radius of a leaked repository credential.
eol_runtimes_in_production_images Which end-of-life runtimes reach a running workload?

These queries need image scanning of running workloads

The runs-image link (workload to image) only exists when the policy has scanners.images: true and workloads in image_sources. With the default dockerfile source alone, the three image queries return nothing, which does not mean nothing is affected. See Container images.

Compliance

Two frameworks are graded from code findings. Both apply only when a GitHub organization is connected, and grade GitHub repositories.

  • owasp-top10: OWASP Top 10:2021, mapped by CWE. Five categories depend on static analysis and report NOT_ASSESSED until a static-analysis scan has run.
  • cis-supply-chain: the Source Code and Dependencies sections of the CIS Software Supply Chain Security Guide, 60 controls. 10 can be assessed automatically. The others report NOT_ASSESSED with a reason, so read the coverage figure next to the score.
limacharlie cloudsec compliance report --framework owasp-top10
limacharlie cloudsec compliance report --framework cis-supply-chain

Controls that grade outcomes, such as "no secrets in source", wait until a scan has completed. They grade what was scanned. A repository your policy excludes produces no findings and cannot fail them, so compare the score with scanner coverage. See Compliance for how scoring works.

In your IDE

The LimaCharlie MCP server gives AI assistants in your editor the same view: repository findings, the fix queue, local scans and AutoFix. See Cloud Security in your IDE.