SecureChain Beta

User guide

Findings in the portal

The portal keeps each scan that you send, matches it with the advisory data and the TuxCare catalogue, and shows what to fix first. This page tells you how to read the findings, triage them, track the fix deadlines and the CRA clocks, record releases, and get alerts.

Open your workspace #

Go to your workspace address, for example https://name.sc.tuxcare.cloud, and select the button of your sign-in provider. If an admin added a single sign-on provider, the page shows its button too. You can also sign in at sc.tuxcare.cloud and open the workspace from Your workspaces. After a sign-in at the workspace address, sc.tuxcare.cloud can ask Continue as your email address: select it to sign in to sc.tuxcare.cloud too, or select Not now to go on to the workspace. Select Continue as only if you started the sign-in yourself. A person who has not accepted the terms sees the terms page after the first sign-in. On this page, you accept the SecureChain Portal Terms of Use, the SecureChain Portal License Agreement, and the SecureChain Portal Data Processing Addendum for the organization of the workspace, and you acknowledge the SecureChain Portal Privacy Policy. Read them, select the box to accept them, and select Continue. If the workspace has no legal name, an admin also types it in Legal name of your organization. The portal asks one time for each workspace, and again only when TuxCare publishes new versions of the documents. The acceptance covers the SecureChain CLI for this workspace. An admin sees the date of each person in the Terms accepted column of the Users page, and each acceptance under Settings › Organization.

The workspace menu is the button at the right of the header. It shows your role. It holds the pages that manage the workspace, Help (this guide), and Sign out.

A sign-in to a workspace lasts 14 days. If you do not use the workspace for 3 days, it asks you to sign in again. Select Sign out to end the session at once.

The header of the portal with the workspace menu open: the workspace, the email address and the role, the Manage list, My alerts, Help, and Sign out.
The workspace menu, open.
  1. The button of the menu. It shows the name of the workspace and your role, and on a wide screen your email address.
  2. Manage: the pages that manage the workspace. An admin sees all of them. The line above the list names the workspace and your address, and My alerts under it holds your watches.
  3. Help opens this guide. Sign out ends the session.
  4. The theme control: System, Light, or Dark. On a narrow screen, it is in the workspace menu.

To end a session on another device, open Access tokens in the workspace menu and select Sign out on the row of the session in Browser sessions.

When you ask TuxCare for help, a TuxCare engineer can open a read-only view of your workspace. A banner shows TuxCare staff — read only during that view.

Workspaces #

A workspace is one organization. Everybody in the workspace sees its repositories, except the repositories that a department hides from them. The button at the top right of the header names the workspace that you are in. It also shows your role. Open the button to see Workspace: and the name on the first line of the menu.

If you belong to more than one workspace, select Switch workspace in the menu and choose another one. Select Create workspace to start a new workspace for another organization. Check the name in the button before you triage a finding or make a token: the change applies to the workspace that the button names.

Roles #

Each user has one role for the whole workspace.

ActionAdminMemberViewer
Read repositories, scans, and findingsYesYesYes
Send scansYesYesNo
Triage findings, set the default branch, mark releases, record a CRA decisionYesYesNo
Make and revoke their own tokensYesYesYes
Make scoped tokens and tokens for other usersYesNoNo
Register, rename, and delete repositories; manage products and product releasesYesNoNo
Manage users, departments, notifications, fix deadlines, and settings; read the audit logYesNoNo

A member or a viewer with a seat in a department sees only the repositories of that department. A user with no seat sees every repository. Every number in the portal counts only the repositories that you can see.

Find your way #

The top bar has six pages. Each page answers one question:

PageThe question
OverviewHow is the workspace now, and does it get better or worse?
RepositoriesWhich repositories need work, and what is wrong in one repository?
VulnerabilitiesWhich advisories affect us, and where? Are we affected by a given CVE?
PackagesWhere do we use a package, and at which versions? What do the TuxCare builds cover?
RemediationDo the teams fix the findings before the fix deadline?
ComplianceWhich findings start a CRA clock, and which reports does an auditor need?

On a narrow screen, select Menu to see the six pages and the search field.

The search field in the header finds an advisory, a package, or a repository. Press / to go to it. Type the text, then select the page to search. Press Enter to open the first choice.

Most pages keep their filters in the page address. Copy the address to share a filtered view. Select the ? button next to a label to read what the label means.

Filter by asset kind #

The Overview, Vulnerabilities, Packages, and Remediation pages have the buttons All, Repositories, Images, and Hosts. Select a button to show the findings and the packages of that kind of asset only. All shows every kind. The selected button has a check mark. The page address keeps the choice, and the links from the Overview to the other pages keep it too.

Overview #

The Overview is the first page. It shows the security state of the workspace for a department and a period (the last 30, 90, or 180 days).

The Overview page, with five tiles, two charts of the open findings, and the Fix first table of five packages.
The Overview page.
  1. The department, the period, and Export.
  2. The five tiles. Select a tile to open the page that explains it.
  3. The two charts. Table shows the same numbers as a table.
  4. Fix first: the package upgrades that close the most risk.
Open findings
The open findings of every repository, the change in the period, and a bar of the severities.
Critical · known exploited
The open critical findings and the open known-exploited findings. The line under them counts the open CRA clocks.
Past fix deadline
The open findings that are older than their fix deadline, and the share of findings that closed in time.
Fixable now
The open findings that have a fix: an upstream version or a TuxCare build.
Scan coverage
The repositories that sent a scan in the last 7 days. It also counts the stale repositories (no scan for 14 days), the repositories with no scan, and the repositories that are not evaluated: a release that is not evaluated, or an operating-system release with no advisory data.

Repositories #

The Repositories page lists each repository of the workspace. A repository appears when its first scan arrives. An admin can also add one before the first scan with Register repository, and a member can on Set up CI: the member's repository goes where the member's first scan would put it. Set up CI, beside it, mints the CI token of one repository and shows the job for your CI system, with buttons that copy them. An admin and a member see it.

The Repositories page, with the filters and a table of repositories, each with a grade, its open findings, a trend line, and its last scan.
The Repositories page.
  1. Register repository adds a repository before its first scan. On this page, only an admin sees it; a member registers a repository on Set up CI. Paste the address of the repository, for example https://github.com/acme/web-shop. The portal keeps the address that the CLI sends, so the first scan lands on the repository. Set up CI mints the CI token of one repository and shows its job; an admin and a member see it.
  2. The search field, the lists, the quick filters, and the sort order.
  3. Each row is a repository. Select its name to open it.
  4. The rule of the grade.

Each row shows the grade, the open findings by severity (for example 1 C · 4 H · 7 M · 0 L), the fixable findings, a 6-week trend, the branch that the row counts, and the age of the last scan. A last scan older than 14 days shows in an amber chip: check the CI job of that repository. When the newest scan is on another branch than the one the row counts, the cell names that branch and its time instead (feature-x · today 17:39); when the counted branch is stale, its amber chip and date show under that line. A run that repeats a scan of the same commit and the same dependencies moves the time of that scan; it does not add a scan.

The quick filters keep the rows of one kind: Has critical, Known exploited, Stale scan, or Never scanned. Sort sorts by Risk, Last scan, or Name.

The grade #

Each repository gets a grade from A (good) to F (bad), from the open findings of its tracked refs. The worst rule that applies sets the grade.

GradeRule
ANo open critical or high finding, and at most 10 open medium findings.
BOne or more open high findings, all within the fix deadline.
CAn open high finding is past the fix deadline, or more than 10 medium findings are open.
DOne or more open critical findings.
FAn open critical finding is past the fix deadline, or an open finding is known to be exploited.

A repository with no complete, matched scan has no grade. A repository with a release whose match failed, or with an operating-system release that has no advisory data, never gets grade A: when no other rule of the table applies, it has no grade, and the page shows —. The rules use the fix deadlines of your workspace.

The page of a repository shows the same grade as the list. When you open a branch, a project of a branch, or an older scan, the grade reads the scan that the page shows, by the same rules. A scan that is clean but cannot prove it has no grade: its release has no advisory data, or a later scan of that project failed its match, and no later scan of it matched. The page names the cause under Not evaluated.

The Hosts page #

The Hosts page lists the machines scanned with tuxcare-radar3 (Getting started tells you how), one row each: the operating system and its release, the TuxCare support of the host (TuxCare ESU, TuxCare Essential Support, or TuxCare ELS; Read a host tells how the portal tells ESU from Essential Support) or, with none, how long the vendor's own security support runs, the kernel the host was running, the open vulnerabilities by severity, and the time of the last scan. The cards at the top count the hosts, those under TuxCare support, those past the end of their vendor's support, and the open and the known-exploited vulnerabilities across them. Search by host name, or filter by department. A host that the TuxCare Radar agent scans can send tags: each row shows them. To show only some hosts, select an operating system or a tag; with two or more tags, the page keeps the hosts that hold every tag. The page address keeps these filters. Select a host to open its page, which opens with the host's facts: the operating system, the tags, the support, the kernel, the address the scan came from, the agent or the CLI version, and the last scan. A host that the TuxCare Radar agent scans shows Agent: tuxcare-radar 1.2.3; a host last scanned with securechain-host, the earlier name of the agent, shows its version as the CLI version. It has the same tabs as a repository. On both lists, the Last scan date turns amber after 14 days without a scan and red after 30, with the age written beside it.

A host is a repository of kind host underneath, so departments, tokens scoped to one asset, alerts and the export treat it as one. The Repositories page shows repositories and images only.

The TuxCare Radar agent also sends the machine ID of the host. The portal then keeps one host for each machine: a host that changes its name stays the same host and shows its new name. Two machines with the same name are two hosts, and the second shows its name with the first eight characters of its machine ID, for example web#fedcba98.

The agent sends every installed kernel, and the kernel that runs. The Vulnerabilities tab hides the findings of the kernels that do not run. To see them, select Show findings of kernels that are not running; the number in the label is the count of their vulnerabilities. Such a finding has the status kernel not running. It is not open, so it does not count in the grade, the totals, the trend, or the alerts. When the host boots one of those kernels, the next scan makes its findings open again. A host last scanned with securechain-host sent no running kernel, and the tab shows all its findings.

A repository #

Select a repository to open its page. The header shows the grade, the name, the departments, the count of components, the last scan, and the commit. It also names the token and the CLI version that sent the scan, for example sent by ci-main (tux_…ab12), CLI 0.1.18.

The page of the repository github.com/acme/web-shop, with the Findings tab open, the findings grouped by package, and one package selected for bulk triage.
The page of a repository, with the Findings tab open and one package selected.
  1. Watch and the branches that your watch covers, the count of the watchers, the branch selector, Compliance reports, and More.
  2. The four tiles.
  3. The tabs. Each tab shows its count.
  4. The filters of the findings, and the choice By package or Flat list.
  5. The bar of the bulk triage. It shows when you select a finding.
  6. The header row of a package: the findings, the worst severity, the upgrade, and how many findings the upgrade closes.
Branch
Selects a branch or a tag. All refs (tracked branch) shows the tracked branch: the default branch, else main, else master, else the newest complete scan. The default branch shows · default. When the CLI names a default branch that has no scan yet, the page says No scan of that branch yet and links to the branch with the newest scan.
Slot
A slot is one project path and one set of ecosystems. A monorepo branch can have one slot for each CI job that scans it. When a branch has two or more slots, the page shows a Slot list. See More than one project in a repository.
More
Opens the export and the download of the SBOM of the scan. A member or an admin can make the selected branch the default branch. An admin can rename the repository, set its departments, or delete it. A delete removes all scans, findings, and repository tokens of the repository, and cannot be undone.

Right after a scan, the page says that the scan is being matched and shows the last matched scan. The page updates by itself when the match is done.

The tiles show the open findings, the changes since the previous scan (see Changes), the findings that you can fix now, and the findings past their fix deadline.

The Findings tab #

The tab lists each known vulnerability in the scan, the worst first.

The Fix plan tab #

The fix plan has one row for each package to change: the current version, the version to move to, the source of the fix (a TuxCare build or upstream), the findings that the change closes, and the worst severity. The packages with the worst severity come first: critical, high, medium, low, then no rating. Inside one severity, a package with a known-exploited finding comes first. A known-exploited medium never comes above a critical or a high. A finding that lists several packages counts for each of them. The version to move to is the one version that closes the most findings of the package. Each finding has its own fix, and the plan takes the highest of them. The plan names a TuxCare build only when that build closes every finding of the package. To apply the plan, see Fix vulnerabilities.

The Fix plan tab, with one row for each package: the current version, the version to move to, and the source of the fix.
The Fix plan tab: one row for each package to change.

The Dependencies tab lists each package of the scan with its version, its ecosystem, its scope (direct or transitive, with the packages that pull it in; scope unknown when the scan could not tell), its open findings, and its TuxCare status: TuxCare build, TuxCare build available, No TuxCare build, or Not assessed.

A package that your lockfile fetches from a git repository has no advisory source, so the portal does not evaluate it. When this workspace also scans that repository, the row says so: Scanned in this workspace: repository at commit: N open findings. Select the link to see the findings of that scan. When the workspace has no scan of that commit, the row names the newest scan of the repository and says another commit. When the repository has more than one project at that commit, the count covers each project and says how many: N open findings in 2 projects. These findings stay in the scan of that repository: they are not in the counts or the CI gate of the scan that lists the package. The component export has the same link in its workspace_scan_* columns, and the compliance report counts these packages.

A GitHub Action of your workflows (uses: owner/repo@ref) is a package of the scan too. Its row says Pinned to a commit when the ref is a full commit hash of 40 characters, else Not pinned: a tag, a branch, or a short hash can move to other code between the check and the run. A warning above the table counts the actions that are not pinned, and each such row gives the advice: pin the action to a full commit hash and keep the tag in a comment (uses: owner/repo@<sha> # v4.2.2), and turn on the GitHub policy that requires SHA pinning for the organization or the repository. This is a warning, not a vulnerability: it does not change the counts or the grade. The portal checks each action against the GitHub Actions advisories: the ref goes to the commit that it named when the portal received the scan, the commit to its release version, and the version through the ranges of the advisories. A commit that an advisory names as malicious is vulnerable whatever its version. A checked action says Checked at version 4.2.2, and a vulnerable one has its finding in the Findings tab, with the upstream fix. An action that the portal cannot check says Not checked with the reason: the tag data has not reached the workspace yet, the ref is a branch, the ref is not a known tag or commit, the commit has no version tag, or the scan is older than the tag history. An action that is not checked is never counted as clean. An action of a repository that no advisory names has nothing to check. The component export has the same state in its action_* columns.

A tag of an action can point at a malicious commit for a short time and then move back, as the tags of tj-actions/changed-files did on 14 and 15 March 2025. A check after that time reads clean, but a build in that time ran the bad code. When the advisories name such a commit, the Overview and the page of each repository that used the action show the card GitHub Actions: past exposure. A branch of a repository is Possibly exposed when the scan in force at a time in the window (the newest scan at or before that time) holds the action at a tag that pointed at the bad commit, or pins the bad commit. When the branch has no scan before the window and its first scan holds the tag, the card says so. When your jobs run the gate step of the CLI, the card also lists each run in the window: Exposed when the runner downloaded the bad commit and the job went on, Blocked by the gate when the gate stopped it, and Not exposed when the run got another commit. The card gives the days to review (UTC), and the advice: review the runs of the workflow in those days, and rotate the repository and organization secrets that the jobs with the action can read, and the tokens that those jobs wrote. The export GitHub Actions: past exposure holds the same list.

The Dependencies tab of a repository, with seven packages. The TuxCare column names the TuxCare build of each package.
The Dependencies tab. The TuxCare column names the build that each package can move to.

Changes since the last scan #

The tile Since scan #N compares the scan with the previous scan of the same branch: for example +3 new and −3 resolved findings. Select Show the changes to see the lists. When a new advisory comes out, the portal checks the stored scans again, so a new finding can show with no new scan.

The Scans tab #

The tab lists each scan of the repository, with its branch, commit, path, status, and dates. Select a scan number to see its findings, dependencies, and fix plan, read only. Select Back to the newest scan to leave that view. Select SBOM to download the scan as a CycloneDX file. A member or an admin can select Mark as release on a complete scan. See Releases.

Only a complete scan feeds the findings and the comparisons. A partial, empty, or failed scan is not a clean result, and the page shows a warning for it.

The base image of a container image #

The page of a container image shows the Base image panel above the tabs. The panel shows:

The Base image panel: the base node:20-bookworm, an outdated build, 2 of 7 open findings from the base, and three upgrade rows: Rebuild with the same tag, Next major version, and Smaller variant.
The Base image panel of an image with an outdated node:20-bookworm base.

TuxCare keeps a list of known base images: the official Docker images, with the layers and the packages of each build. The portal finds the base of your image in two ways:

  1. By the layers. The portal compares the layers of your image with the layers of each known base image. The base image whose layers start your image, with the most layers, is the base. A match needs two layers or more.
  2. By the declared base. When no layers match, the portal reads the base that the image declares: the annotations org.opencontainers.image.base.name and org.opencontainers.image.base.digest. A digest must be the digest of a known build. A name alone selects the build that the tag points at now.

A finding comes from the base when its package is in the base image. With a match by the layers, a finding also comes from the base when its package is in a layer of the base. The other findings with a known layer come from your layers.

Each row of the table is one kind of upgrade. A row shows only when it removes a finding, except Rebuild with the same tag. When two rows name the same image, the image shows once.

Rebuild with the same tag
The newest build of your tag. It shows when your image uses an older build. Often a rebuild of your image is enough.
Newest in the same line
The newest version with the same major version and variant, for example node:20.18.0-bookworm for node:20-bookworm.
Next major version
The newest build of the highest major version above yours, with the same variant, for example node:22.11.0-bookworm. A major version can change how your application runs: test it.
Smaller variant
A slim or alpine variant of the same major version. It has fewer packages, so it can have fewer findings.
Keep this base with TuxCare ELS
Shows when the operating system of the base is past its end of life and TuxCare Endless Lifecycle Support covers it. The count is the base findings that have an ELS fix. The row links to the ELS page.

Removes counts the open findings of the base that the upgrade does not have. Adds counts the findings of the upgrade that the base of your image does not have now. Critical and High count the removed findings of that severity. The counts compare the advisory and the package, not the version. An ignored finding does not count. Select Copy to copy the FROM line of the upgrade, for example FROM node:22.11.0-bookworm.

When the portal cannot give advice, the panel tells you why:

The panel saysWhyWhat to do
This scan has no layer data.The scan does not list the layers of the image.Scan the image again with a current scan-worker or CLI.
The base image is not in the list of known base images.No known base image matches the layers, and the declared base, if any, is not in the list.Nothing in the portal. The findings of the image still show, with the origin Unknown.
The scan does not say which layer holds each package.The portal found the base, but the scan does not give the layer of each package, and no package with a finding is in the base image. The portal cannot split the findings.Scan the image again with a current scan-worker or syft.
Base-image advice is not set up for this workspace.The portal does not read the list of known base images.The list is not published yet, or the portal does not read the TuxCare feed. On your own install, the operator sets sync.feed_url, or imports a feed bundle on an air-gapped install.
The portal could not match this scan.The match of the scan failed.Scan the image again. If the error stays, get help.

When the list of known base images is more than 3 days old, the panel says that the advice may be out of date.

On the page of an image, the Findings tab has an Origin filter: All, Base image, Your layers, and Unknown. Unknown is a finding whose package is not in the base image and whose layer the scan does not give, or a finding of an image with no known base.

A finding #

A finding is one advisory in one package of one scan. Its page tells you how to fix it and where else it is.

The page of the finding CVE-2021-23337 in lodash, with How to fix, the description, the list Affected in this workspace, the triage card with Ignored and 90 days selected, and the timeline.
The page of a finding.
  1. How to fix: the recommended fix, the alternatives, and the command.
  2. Affected in this workspace: each repository that has this advisory.
  3. The triage card: the state, the reason, and for an ignore, the time.
  4. The timeline of the finding.

A viewer sees the same page with no triage controls.

Triage findings #

A member or an admin sets the triage state of a finding. The state stays with the finding in later scans of the same branch.

new
Nobody has looked at the finding yet.
acknowledged
Somebody looked at it and accepts it for now. It stays open: it still sends alerts and counts toward its fix deadline.
ignored
The finding is muted. It is not open, sends no alerts, and is never past its deadline. Choose why, and give a reason. The ignore ends after 30 days, after 90 days, on a date, or never. Then the finding goes back to new.

To triage one finding, open its page. In the Triage card, select the state. For Ignored, answer Why?, type the Reason, and select the time under Ignore for. Select Save.

Why do you ignore it? #

Each ignore has a reason category. The category does not change what the portal counts: every category removes the finding from the totals, the grades, the alerts, and the fix deadlines. It changes the VEX file and the labels that other people read.

The advisory data is wrong
The advisory is wrong for this package or these versions, and the same is true for everyone. Select What is wrong?: the bug is in another package, the version range is too wide, the vulnerable code is not in the package, the CVE is disputed or rejected, or another problem. The VEX file says false positive. See Report wrong advisory data.
We are not affected
The advisory is right, but your project does not run the vulnerable code. Select a Justification (see below). The VEX file says not affected.
We accept the risk
Your project is affected, and your team accepts the risk for now. The VEX file says exploitable and will not fix.
Other reason
Another reason. Write it in the reason field. The VEX file says not affected, with no justification.

Under Where?, This finding sets the decision on this finding only. The other choices make a rule that also covers later scans and new versions. See Suppress a vulnerability with a rule.

Triage many findings #

  1. Open the Findings tab of a repository, and filter it.
  2. Select the check box of each finding. The box of a package header row selects all findings of the package. A finding with several packages is one finding: one selection triages it for all its packages. The box in the table header selects every finding that the filters show.
  3. In the bar above the table, select Acknowledge, Ignore…, or Mark new.
  4. For Ignore…, choose Why?, type the Reason, select the time, and select Ignore.

One change applies to at most 500 findings. If the portal refuses one finding, no finding changes, and the page shows the error.

The justification of an ignore #

An ignore of the category We are not affected can also have a Justification. It tells a reader why the finding does not affect you, and the VEX file uses it. The values come from CycloneDX: the code is not present; the code is not reachable; it needs a configuration, a dependency, or an environment that you do not have; or it is protected by the compiler, at run time, at the perimeter, or by another control.

Suppress a vulnerability with a rule #

A rule ignores one vulnerability for more than one finding. It also applies to the scans, the versions, and the repositories that come later. A rule has a scope:

This repository
Every finding of the advisory in the repository. A member of the repository can make this rule.
A department
Every finding of the advisory in the repositories of the department.
The workspace
Every finding of the advisory on every asset of the workspace.

A narrower rule wins over a wider rule. A decision of a person on one finding wins over every rule.

  1. Open the page of a finding or of the vulnerability. On the page of the vulnerability, select Suppress this advisory. A member selects Ask to suppress this advisory.
  2. Answer Why? (see Why do you ignore it?). For wrong data, select What is wrong?.
  3. Under Where?, select the scope. The form selects the narrowest scope that fits.
  4. Optional: change the Package. It shows the package of the finding. A rule with a package does not cover the other packages of the same advisory. Clear it to cover every package.
  5. Optional: select Versions. Type the versions with commas between them. With Every version, the rule also covers new versions.
  6. Type the Reason. It is necessary.
  7. Optional: select 30 days, 90 days, or Until a date. The rule ends at the end of that day (UTC). Or select Until a fix is available: the rule ends when the advisory has an upstream fix version for the package. A TuxCare build does not end it.
  8. Optional: select the asset kinds: Repositories, Images, or Hosts. With no kind selected, the rule applies to every kind. TuxCare Radar applies the rule to hosts only.
  9. Select Add the rule. If the scope needs an approval, the button is Ask an admin.

Ask an admin #

A member can make a rule for one repository. A rule for a department or for the workspace needs an admin. A member who selects one of these scopes sends a request. For a department, the member needs a seat in that department.

The list of rules #

When the advisory changes #

When the affected packages or versions of the advisory change, the rule goes to Needs review. The rule stays in force while it waits. A change of the score or of the text does not move a rule.

Report wrong advisory data #

Advisory data from outside sources has errors. If the data is wrong for everyone, tell TuxCare. TuxCare checks the advisory. If the data is wrong, TuxCare corrects it for every workspace and tells the source of the advisory.

Report wrong data #

There are two ways. Both send the same report.

A workspace sends 50 reports in a day (UTC) at most. After that, a report without a rule is refused until the next day. A rule still saves and works, but it sends no report: the rule list shows Not sent to TuxCare: daily limit.

What goes to TuxCare #

The form shows the exact text before you send it. A report holds:

A report holds no name, no email address, no repository name, and no commit. TuxCare does not tell other workspaces that you reported the advisory, and does not show them your text.

Do not enter personal data in the reason.

TuxCare staff read that text. Write what is wrong with the advisory, and nothing about people or your projects.

What happens next #

The rule list and the finding show the state of the report:

Sent to TuxCare
TuxCare has the report. Nobody has looked at it yet.
TuxCare is checking
Staff check the advisory data.
TuxCare reported it upstream
TuxCare sent a correction to the source of the advisory. The note has a link.
TuxCare corrected the data
The advisory data is right now, in every workspace. The false findings close at the next match, and the page of the advisory says TuxCare corrected this advisory, with the reason. Your rule then has no finding to cover. You can end it.
TuxCare: the data is right
TuxCare checked the data and did not change it. The note says why. The rule stays in force until you end it.

The note of TuxCare shows next to the state.

Turn the reports off #

An admin can turn the reports off in Settings › Reports to TuxCare. The switch is on at first. When it is off, a rule of wrong data sends nothing, and the report form does not show. The rule still works. Without a report, TuxCare cannot check the advisory for you. When the advisory changes, an admin confirms or ends the rule.

Vulnerabilities #

The Vulnerabilities page lists each advisory one time, with every repository that it affects. Use it to answer are we affected by this CVE?

The Vulnerabilities page, with the four steps of the funnel, the filters, and the table of advisories. One advisory shows its three repositories.
The Vulnerabilities page.
  1. The four steps of the funnel. Select a step to set its filters.
  2. The search field and the filters.
  3. An advisory with its list of repositories open.

Search for an advisory id that no scan has, and the page says Not affected.

To save the list, select XLSX or CSV next to Export, or PDF for a page to print or save as PDF. The file has every advisory that the filters keep, not only the page, with the hosts and the other assets that have each one, the counts of open, triaged, and late findings, the fix, and the other names of the advisory. An XLSX file has a filter on each column, and a second sheet, About, with the filters and the time of the export.

Packages #

The Packages page lists every package of the tracked refs. A finding that lists several packages counts on each of them. The Inventory tab shows where each package is used.

The Inventory tab of the Packages page, with the package lodash selected and its usage panel open: five repositories and one image, each with its version.
The Inventory tab, with the package lodash selected.
  1. The two tabs.
  2. The search field and the filters.
  3. The versions in use of a package.
  4. The usage panel of the selected package.

TuxCare coverage #

The TuxCare coverage tab counts the packages by TuxCare verdict:

Covered
You already ship a TuxCare build.
Hardenable
A TuxCare build with the fixes exists, and your subscription includes it. Run securechain harden.
Unprotected
A TuxCare build with the fixes exists, and your subscription does not include it.
No coverage
No TuxCare release line covers the package. TuxCare counts it as a request for coverage.
Frozen, Sunset
A frozen line keeps its last build and gets no new fixes. A sunset line gets no more fixes.

Remediation #

The Remediation page shows how fast the teams fix findings, against the fix deadlines.

The Remediation page, with the share fixed in time, one card for each severity, the findings past the fix deadline, and the table by department.
The Remediation page.
  1. The period, the department, and Edit deadlines.
  2. Fixed in time for the whole period.
  3. One card for each severity.
  4. The open findings that are past their fix deadline.
  5. The fix state of each department. Below it, the section Time to remediate and SLA.
Fixed in time
The findings that closed before their deadline, divided by the findings that closed in the period.
Mean time to fix
The mean time from open to close of the findings that closed in the period. A finding opens at its first sighting in its slot, and closes at the first complete, matched scan of the slot that does not have it.
Past the fix deadline
The open findings that are older than their deadline, the worst severity first. Inside one severity, a known-exploited finding comes first. Fix these first.
Top fixes across hosts
Shown when the page shows hosts only: with the asset-kind filter on Hosts, and in a TuxCare Radar workspace. Each row is one package update on the hosts: the package, the version to update to, the advisories and the open findings that the update closes (a finding that lists several packages counts on each package), and the hosts that it touches. The rows that close the most advisories come first, then those on the most critical hosts, then those on the most hosts. On each host, the update goes to the highest fix version of the open findings of the package. A finding that KernelCare or LibCare live-patches, a finding of a kernel that the host does not run, an ignored finding, and a finding with no fix do not count.

Time to remediate and SLA #

The section Time to remediate and SLA at the end of the Remediation page is the remediation report for managers and auditors. It uses the department and the asset-kind filter of the page. Report period selects the last 30, 90, 180, or 365 days. Until you change it, it follows the period of the page.

Mean time to remediate by month
One row for each calendar month (UTC) of the period, and a last row for the whole period. The first and the last month are cut to the period: the row shows the days, for example 4–31 Aug 2026. For each severity, the table shows the mean and the median number of days from the first sighting to the close, and the number of findings that closed. A finding counts in the month in which it closed. — means that no finding of that severity closed. The column No rating shows only when a finding with no rating closed.
Fixed in time against the deadline sets
One row for each deadline set, with the deadline of each severity. Fixed in time is the share of the findings that closed in the period on or before their deadline, with the counts (for example 92% (23 of 25)). Open past the deadline counts the findings that are open now and older than their deadline. Out of scope counts the findings that the set leaves out. The portal computes every deadline and count.
Deadline setSourceDeadlinesOut of scope
WorkspaceThe fix deadlines of the workspaceThe deadlines of Settings › Fix deadlines. A known-exploited finding takes the critical deadline.Nothing
PCI DSSPCI DSS v4.0 requirement 6.3.3Critical 30 days, high 30 days, medium 90 days, low 90 days. PCI DSS sets no time for medium and low: 90 days is the common choice of assessors.A finding with no rating
CISA KEVCISA Binding Operational Directive 22-01Critical 14 days, high 14 days, medium 14 days, low 14 days, no rating 14 days. The clock starts at the later of the first sighting and the date when CISA added the vulnerability to its KEV catalogue. The directive binds US federal civilian agencies only: for a company it is a reference.A finding that is not known exploited
NIST / FedRAMPNIST SP 800-53 RA-5, with the FedRAMP Continuous Monitoring timesCritical 30 days, high 30 days, medium 90 days, low 180 daysA finding with no rating

To save a table, select Download MTTR (CSV) or Download SLA (CSV). The files have the filters of the page. The MTTR file has a row for each month, asset kind (hosts, repositories, images, and all), and severity. The SLA file has a row for each deadline set and severity, and a total row for each set. To make a PDF, select Print or save as PDF: a page opens with the workspace, the period, the filters, the date, and the two tables. Select Print or save as PDF on that page, then Save as PDF as the printer.

Fix deadlines #

A fix deadline is the number of days to fix an open finding, from its first sighting.

SeverityDefault deadline
Critical, and every known-exploited finding7 days
High30 days
Medium90 days
Low, and a finding with no rating180 days

An acknowledged finding can pass its deadline. An ignored finding cannot. An admin changes the deadlines in Settings › Fix deadlines: 1 to 3650 days, and a worse severity cannot have a longer deadline. The grades and the counts use the new values at once.

The Fix deadlines card of the Settings page, with one field for each severity and the Save button.
Settings › Fix deadlines.

Releases #

A release is a scan that you mark as a build that you ship. The portal keeps it and checks it against each new advisory. Record a release from CI with securechain sca --release NAME (see Record a release), or select Mark as release on the Scans tab.

StateAlertsIn the workspace viewsChecked against new advisories
SupportedYesYesYes
DeprecatedNoYesYes
ArchivedNoNoNo: the portal freezes the findings in a snapshot.
The Releases tab of the repository web-shop with two releases. v2.3.1 is deprecated, and its row has Report, VEX with the formats CycloneDX, OpenVEX, and CSAF, a state control, and Delete. v2.4.0 is supported, from Acme 3.2, and its state control is off, with the text The state comes from Acme 3.2.
The Releases tab of a repository, as an admin sees it.
  1. The Releases tab. The number counts the releases that are not archived.
  2. Show archived adds the archived releases to the list.
  3. The state of each release, for example supported, from Acme 3.2.
  4. Report opens the release report. After VEX, CycloneDX, OpenVEX, and CSAF save the VEX file in that format.
  5. The state control and Delete. Only an admin sees Delete.
  6. A product release decides the state of this release, so its state control is off.

A release that is not evaluated #

When the portal checks a release again and the check fails or has not finished, the release is not evaluated. The row of the repository shows Not evaluated, the release, and the cause: matching or match failed. Its findings are not in the counts, and it is not clean. matching is normal for some seconds after a CI job sends the release. After match failed, the repository cannot get grade A until a later check succeeds. If the mark stays, contact TuxCare.

An operating-system release with no advisory data shows the same mark: Not evaluated: centos-8 (no advisory data). The portal has no advisory of TuxCare or of the vendor for that release, so it cannot check the operating-system packages of the scan. The repository or host cannot get grade A, and the Overview counts it as not evaluated. See The Hosts page.

Product releases #

A product release is the set of releases that you ship together, one release of each repository of a product. For example, Acme 3.2 holds v1.3 of the web repository and v2.0 of the api repository.

  1. Open Compliance and select Releases on the product.
  2. As an admin, type a name under Name of the new product release, and select New product release.
  3. Select Edit members, pick one release for each repository, and save.
The product Acme Shop on the Compliance page with its Releases panel open. The panel has Show archived, the field Name of the new product release with the button New product release, and the product release Acme 3.2: state supported, members web-shop v2.4.0 and billing-api v1.8.0, with Report, VEX with the formats CycloneDX, OpenVEX, and CSAF, a state control, Edit members, and Delete.
The product releases of a product, as an admin sees them.
  1. Releases opens and closes the list of product releases.
  2. The name of a new product release, and New product release. Only an admin sees them.
  3. A product release: its name, its state, its date, and its members.
  4. Report opens the product release report. After VEX, CycloneDX, OpenVEX, and CSAF save the VEX file in that format.
  5. The state control, Edit members, and Delete. Only an admin sees them.

Export VEX #

A VEX file tells your customers which known advisories affect a release. On a release or a product release, select a format after VEX: CycloneDX (CycloneDX 1.6), OpenVEX (OpenVEX 0.2.0), or CSAF (a CSAF 2.0 VEX document). The three files state the same thing. Give the reader the format that it asks for: many buyers and the guidance of the EU Cyber Resilience Act read CSAF, and the Sigstore tools read OpenVEX. Every role can export the file. The state of each advisory comes from the triage:

What the portal knowsCycloneDXOpenVEXCSAF
Open and new, or an ignore that has endedin_triageunder_investigationunder_investigation
Acknowledged, or ignored as We accept the risk (CycloneDX adds will not fix, CSAF no fix planned)exploitableaffectedknown_affected
Ignored as We are not affected or Other reason, and the ignore has not endednot_affected, with the justification and the reasonnot_affected, with the justificationknown_not_affected, with the justification as a flag
Ignored as The advisory data is wrongfalse_positivenot_affectedknown_not_affected
Fixed by a TuxCare buildresolved, with the response updatefixedfixed

OpenVEX and CSAF have fewer justifications than CycloneDX. It needs a configuration, a dependency, or an environment becomes the vulnerable code cannot be controlled by an adversary, and the four protected values become inline mitigations already exist. The OpenVEX author and the CSAF publisher is your workspace. An OpenVEX or CSAF file needs at least one advisory: for a release with no advisory, only the CycloneDX file is available.

An advisory in two packages of the release has one entry, with the most open state. A known-exploited advisory has the property tuxcare:exploited. The file of an archived release is frozen at the time of the archive (tuxcare:frozen_at). A script gets the file at GET /api/v1/releases/{id}/vex or /api/v1/product-releases/{id}/vex, with ?format=openvex or ?format=csaf for the other formats.

The release report #

Select Report on a release or a product release to open its compliance report. The report of a supported or deprecated release shows the findings of today. The report of an archived release shows Frozen at and the findings at the time of the archive. A script gets the data at GET /api/v1/releases/{id}/report.

Compliance #

The Compliance page holds the EU Cyber Resilience Act (CRA) clocks, the products, and the reports for an auditor.

The Compliance page, with two CRA clocks and the list of two products.
The Compliance page.
  1. A CRA clock, with its three times.
  2. Record decision records what you did about the clock.
  3. The products of the workspace.

CRA clocks #

Article 14 of the CRA tells a manufacturer to report an actively exploited vulnerability in a product: an early warning in 24 hours, and a notification in 72 hours. The portal starts a clock for each open known-exploited finding.

The portal shows the candidates. You decide if a finding is in a product that you sell and if you must report it.

Products #

A product is a named set of repositories that you place on the market. The CRA applies to a product. An admin selects New product, types the name, selects the repositories, and selects Save. A product does not change who can see a repository: departments do that. A delete keeps the repositories, and removes the product releases of the product.

Compliance reports #

A compliance report is a document about one repository for an auditor, made when you open it. Open the repository and select Compliance reports: the page lists what a report can be about. One row for each scanned branch or tag (by project, when the repository holds several), with the date of its last scan, the commit, and the counts of its open and known-exploited findings; the branch the repository page counts is marked tracked and comes first. The counts of a row are the counts of the report it opens. A repository with many branches shows the rows in pages: choose the rows per page, then Previous and Next. Below it, one row for each release. Select Open report on the row you want, then Print or save as PDF. Every role can open it. A report has these sections:

The section Known-exploited vulnerabilities links to the single reporting platform of the Cyber Resilience Act, where a manufacturer files the early warning with its CSIRT and ENISA.

A script gets the list at GET /api/v1/repos/{id}/reports, one page of the branch and tag rows at a time (?limit= and ?offset=; next_offset is absent on the last page), and a report at GET /api/v1/repos/{id}/report, with ?ref= for a branch.

Export findings and dependencies #

Download the findings or the dependencies as CSV or JSON. For one repository, select More on its page. For all repositories that you can see, select Export on the Overview. Select Findings or Dependencies, then CSV or JSON, then Download.

Each scan also has a CycloneDX SBOM: see The Scans tab.

Alerts #

An admin sets up alerts on the Notifications page of the workspace menu. The portal sends an alert when a scan adds a vulnerable package, when a new advisory affects a package that you already ship, when a host stops sending scans, and when an open finding comes near its fix deadline. Alerts cover the default branch and the supported releases. A person can also watch every branch of a repository (see Choose the alerts that you get). For a feature branch, use the pull request gate. A source repository alerts on its default branch: the default branch that you set, else main, else master. A repository with none of these has no alert branch. Its branch scans then send no alert, except to a person with an All branches watch. Its supported releases still send alerts. The Watchers section shows No alert branch. Set the default branch on the repository page to fix it. An upgrade or a new build of a package that leaves an advisory open sends no alert, and neither does a fix that waits for a restart: the package had the finding before. The first scan of a repository, branch, or project path sends no alert. The exception is a person with an All branches watch: the first scan of a feature branch alerts that person. The subject of each alert names the workspace after the product, for example SecureChain [acme]: 3 new finding(s) across 1 repo(s).

The Notifications page, with the alert settings, the Watchers section, the Email delivery section, and one outbound webhook.
The Notifications page.
  1. Minimum severity, Delivery, the digest, the host and deadline alerts, and the CIS drift alert.
  2. The email addresses that get the alerts.
  3. The Slack webhook.
  4. Send test sends a test alert with the saved settings.
  5. Watchers: how many repositories have a watcher, and the repositories that nobody watches, whose watchers get no alert email, or that show No alert branch.
  6. Email delivery: the addresses that email does not reach.
  7. Outbound webhooks: your own endpoints.
Minimum severity
Findings below this level send no alert. A known-exploited finding always sends one. An ignored finding never does.
Delivery
immediate, or a daily digest: all alerts of the day in one message, 30 minutes before the daily time of the workspace. This is the choice of the workspace. Each person also has a choice of their own.
Digest
off, weekly (a summary of the last 7 days), or daily (a summary of the last 24 hours), at the daily time of the workspace. The portal sends the digest also when nothing changed. The digest starts with the new findings that a source lists as exploited in the wild. Then it shows the counts, the project to start with, the projects with the most severe new findings, and the new advisories, most severe first. It also counts a finding that a new advisory opened on an older scan.
Host not seen (days, 0 = off)
A host that sends no scan for more than this many days sends one alert. The subject names the host and the days. When the host sends a scan again, the alert starts again. The default is 3 days.
Fix deadline warning (days, 0 = off)
An open finding sends one alert when its fix deadline is at most this many days away. A change of the fix deadlines gives a new deadline, and a new alert. The portal checks the deadlines once a day. One message lists the findings of the check, with the asset and the due date. The minimum severity applies; a known-exploited finding always alerts. The default is 0: the alert is off until an admin sets the days. TuxCare Radar used 30 days.
CIS drift
A host sends one alert when a CIS rule that passed in its previous OpenSCAP run fails in the new run. One message lists the rules of the run, each with why it matters and how to fix it, and links to the CIS page of the host. The alert compares only runs with the same content, level, and scanner version: the first run of a host, the first run after a new content, level, or scanner version, and a rule that was manual before send no alert. The minimum severity does not apply. The default is on.
Email to
At most 10 addresses, separated by commas. These addresses get every alert of the default branch and the supported releases, as the Slack channel does. They do not replace the people who watch a repository: those people get their email also when this field is set. An address that is also a watcher gets one email. Empty means no extra address. In a hosted workspace, each address must be an active user who signed in at least once with the TuxCare sign-in.
Slack incoming webhook
An https Slack webhook URL.

The Notifications page and My alerts show the daily time of the workspace, in UTC and in your time zone. The portal picks a fixed time for each workspace, so the workspaces do not all send at one time.

A new scan sends its alert at once. After a feed update, the portal waits until the rechecks end (at most about 30 minutes), then sends one message for each repository. Select Send test to check the setup: at most 5 tests an hour. The test email goes to Email to, to the people who watch a repository, and to you. When nobody watches a repository and Email to is empty, it goes to every admin.

Choose the alerts that you get #

A person gets alert email only for the repositories that they watch. Each person sets this for themselves. A viewer can do it too.

A watch never shows a repository that the seats of your department hide. The email of a person lists the watched repositories only.

A watch of All branches also sends the alerts of a feature branch and of a deprecated or archived release. These alerts list only the findings that the default branch does not hold. A finding that is open on the default branch sends one alert, from the default branch.

When nobody watches a repository, its alerts go to the admins. The email says Nobody watches this repository. The Notifications page lists the repositories that nobody gets alerts for.

Immediate email or daily summary #

On My alerts, each person chooses how the email arrives.

Automatic
The default. Immediate email while you watch 3 repositories or fewer. A daily summary when you watch more. A watch of all repositories counts as more than 3.
Immediate
One email for each alert.
Daily summary
One email a day, at the daily time of the workspace. It holds new findings, silent hosts, and fix deadlines only. On a day of the workspace digest, the same email also holds the digest: one email, not two. It lists the alerts that the portal delivered since the last summary, at most 7 days. It shows at most 50 findings for each repository and 200 in total, then and N more. An address that is also in Email to gets no summary: that address gets every alert at once.
Off
No alert email. You still count as a watcher of the repository.

A known-exploited finding sends its email at once, for every choice except Off. The one exception is a workspace whose delivery is daily digest: there the portal holds every alert, also a known-exploited one, until 30 minutes before the daily time of the workspace.

In a hosted workspace, the portal sends alert email only to a person who signed in at least one time with the TuxCare sign-in. Until then, your watches stay as you set them, and My alerts says that you get no alert email.

Act on a finding from the email #

Each finding in an alert email has links that act on it. Each new advisory of a digest has one link.

Ignore
Ignores the finding on its branch, with the reason category other.
Accept risk
Ignores the finding with the reason category risk accepted.
Not affected
Ignores the finding with the reason category not affected. A VEX export then says not_affected.
Suppress in this repository
Makes a suppression rule of the advisory for the repository. It needs the member role on the repository.
Suppress in the workspace
The link of an advisory in the digest. An admin makes a rule of the workspace. A member asks an admin for it.

A link opens a page of the portal that shows the finding or the advisory and what the action does. Nothing changes until you select Confirm. Sign in first if the portal asks you to. The action has the same rules as in the portal: a triage needs the member role on the repository, and a rule needs a reason. The audit log names you.

Outbound webhooks #

Add an https endpoint under Outbound webhooks. Copy the signing secret: the portal shows it one time. Each alert arrives as a JSON POST with id, kind, created_at, and payload, and two headers:

Compute the HMAC, compare it with the header, and refuse an old timestamp. Select Test in the row of an endpoint to send it a signed test event: at most 5 tests an hour for the workspace. The portal does not follow redirects. When the endpoint does not answer 2xx, the portal tries again after 1, 5, and 15 minutes. When no channel of the workspace got the alert, it then tries once an hour for about a day. Then it stops, and the audit log names the alerts that did not go out. Each finding has a stable_key. In a feed-update alert, each finding has a refs list and no stable_key.

Answer each POST quickly: one try gives an endpoint one minute for all of its alerts. After a failed delivery, or when the minute ends, the endpoint gets no more alerts until the next try. When the deliveries to an endpoint fail again and again for a day or more, the portal turns the endpoint off and writes the reason to the audit log. Correct the endpoint, then turn it on again.

Email that does not arrive #

The portal stops email to an address at once after a hard bounce or a spam report, and after three failed deliveries in a row over at least three days. The other admins get an email. Email delivery lists each address and the reason, and the Users page marks the user Email stopped. Correct the address, then select Resume email. Resume an address that reported spam only when the person asks for the email.

Terms #

Severity
The highest CVSS score of the group of records that describe one vulnerability (a CVE and its aliases). The advisory of an operating-system vendor can rate the vulnerability higher than the score. That rating applies to the packages of the operating system only: a language package (npm, PyPI, Go, and the other ecosystems) takes the band of the CVSS score, and its finding page shows severity from the CVSS score.
open
The advisory applies to the version that you ship, and the finding is not ignored.
new, reopened
new: the finding is on this branch for the first time. reopened: the previous scan did not have it, and this scan has it again.
fixed by TuxCare
You ship a TuxCare build (a version that ends in -tuxcare.N) that has the fix.
Known exploited
A named source, for example CISA KEV or ENISA EUVD, says that attackers use the vulnerability. It passes any alert severity filter, uses the critical fix deadline, and starts a CRA clock. A finding that is not open keeps the mark on its row, muted and with the reason, for example closed by the TuxCare build you are on or, on a host, live-patched by KernelCare: the claim is about the vulnerability, and the finding is not open work, so the Exploited filter and the counts leave it out. An ignored finding is not open either: its mark is muted with ignored, and they leave it out in every triage view, also in all. The exploitation block of the finding page is muted the same way and says why.
Not assessed
The portal could not check the package, for example because no advisory source covers its ecosystem. It is not clean.
Tracked refs
The default branch and the supported and deprecated releases of a repository. The workspace views count these only.
Slot
One project path and one set of ecosystems on a branch.

Next: Fix