Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessView public GitHub Actions run
-
ExploitOpen persisted GITHUB_STEP_SUMMARY artifact
-
ImpactHarvest cleartext secret() credential
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A09:2025 - Security Logging & Alerting Failures
ASVS 5.0
V16 - Security Logging and Error Handling Log data sanitization
|
| Exploitation Conditions | Three concrete prerequisites must all hold: (1) the build runs under GitHub Actions (runs outside Actions write no job summary and are unaffected); (2) the build calls reportSummary(...) with a note whose value derives from a secret() parameter, e.g. a deploy target reporting an endpoint or image reference that embeds a resolved credential (builds that never place secret-derived text in a summary are unaffected); and (3) the workflow run is viewable by the attacker - on a public repository this is everyone with no account, while a private repository limits exposure to those who can already view the run. GitHub Actions ::add-mask:: directives do NOT limit this because they filter only the runner log stream, not the summary file the build writes. The principal limiting factor is that placing secret-derived text in a summary note is a non-default build-authoring choice, not behavior of a stock configuration. |
| Impact | CVSS 3.1 base score is 7.5 (HIGH) driven entirely by a confidentiality impact (C:H, I:N, A:N) over a network vector with no privileges or user interaction (AV:N/AC:L/PR:N/UI:N), which is consistent with CWE-532 information exposure: on a public repository anyone - including unauthenticated viewers - can read the leaked secret() value from the persisted GITHUB_STEP_SUMMARY artifact. However, the raw CVSS understates an important precondition: this only occurs when a build running under GitHub Actions actually places secret-derived text in a reportSummary(...) note, so the network-unauthenticated profile applies only to that specific, non-default authoring pattern. The vuln.today decision label is 'this_week' (not act_now/emergency). No EPSS score, no CISA KEV listing, and no public exploit code are present in the input - the only references are the GHSA advisory, PR #547, the fix commit, and the release tag, all of which are remediation artifacts rather than exploit code. The signals are therefore internally consistent and point to a real but conditional disclosure issue rather than mass-exploitable RCE: treat it as a credible leak-and-rotate priority for teams that run Zuke in public GitHub Actions workflows, and lower priority for everyone else. Note that absence of EPSS/KEV does not imply safety; it reflects a niche product that automated exploitation telemetry is unlikely to cover. |
| Exploit ScenarioDerived | A public GitHub repository runs a Zuke (@zuke/core < 1.51.0) build under GitHub Actions that reports a summary note whose value embeds a secret() - for example a deploy target reporting the published image reference or endpoint that contains a resolved registry token. writeJobSummary appends that note to GITHUB_STEP_SUMMARY without the redactor, so the credential appears in cleartext in the durable run summary while the console and run record show [redacted]. Any unauthenticated person who opens the workflow run reads the secret, and it stays exposed until the run is deleted. No public exploit identified at time of analysis; reproduction is trivial and requires only viewing the run. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 30, 2026
Zuke's @zuke/core package before 1.51.0 writes rendered reportSummary(...) notes straight into the GitHub Actions job summary file without passing them through the run's secret redactor, so a note built from a resolved secret() value is published in cleartext. Anyone who can view the workflow run can read it - on a public repository that means unauthenticated viewers - and the summary artifact persists on the run until it is deleted. Exposure requires a build running under GitHub Actions that deliberately places secret-derived text in a summary note; builds that never summarize secrets, and runs outside GitHub Actions, are unaffected, and no public exploit has been identified at time of analysis (the issue is a disclosure defect rather than something an attacker triggers remotely).
RemediationAI
Vendor-released patch: upgrade to @zuke/core 1.51.0, where writeJobSummary applies the run's redactor to the rendered Markdown before appending it to GITHUB_STEP_SUMMARY, matching the console and persisted-run sinks; see the advisory at https://github.com/zuke-build/zuke/security/advisories/GHSA-42wp-rrh6-vc23 and the release at https://github.com/zuke-build/zuke/releases/tag/core-v1.51.0. If upgrading is not immediately possible, the vendor's stated workaround is to stop placing secret-derived values in reportSummary(...) notes - compose the note from non-secret parts or report a fingerprint rather than the value; note that this is a change in build authoring and does not retroactively cover runs already published. Relying on ::add-mask:: is not a mitigation, since it masks only the runner log stream and not the summary file. If a secret may already have been leaked this way, rotate the credential: the job summary remains attached to the run and stays readable until the run is deleted, and editing the workflow does not retract what a previous run published.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
This is CWE-532 (Insertion of Sensitive Information into Log File) applied to a CI artifact. Zuke's secret() parameters carry a documented guarantee that the resolved value is redacted from all output; that guarantee is implemented by a Redactor that the reporter applies to console output and that the run-state writer applies before persisted notes are stored. The GitHub Actions job summary sink bypassed that pipeline: writeJobSummary serialised the rendered Markdown directly into the file referenced by GITHUB_STEP_SUMMARY, so the same value that printed as [redacted] on the terminal and in the run record appeared verbatim in the summary. The ::add-mask:: workflow commands Zuke emits are irrelevant to this path because they filter only the runner's log stream, not a file the build itself writes, and the runner performs no filtering on that file. The fix (PR #547, commit a46fd72) threads the run's Redactor into the single writeJobSummary call site and redacts the Markdown before appending; the same pull request also adds workflow-command escaping helpers (escapeData, escapeLine, escapeProperty) that neutralise ::command:: and legacy ##[command] sequences in failure messages and summary rows. Confirmed prerequisites: the build must run under GitHub Actions, must call reportSummary(...) with a note whose value derives from a secret() parameter (for example a deploy target reporting an endpoint or image reference that embeds a credential), and the run must be viewable by the party who reads the summary. The trigger is a build-authoring choice, not stock behaviour.
Know when Zuke gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Once a secret-derived summary note exists, any public-run viewer reads it unauthenticated (PR:N), but that note-authoring precondition is outside the attacker's control, so AC:H; only confidentiality is affected.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Zuke is a code-first, strongly typed build automation system for Deno. Prior to 1.51.0, @zuke/core writes rendered reportSummary(...) notes to GITHUB_STEP_SUMMARY through writeJobSummary without applying the redactor that protects resolved secret() values in console and persisted run output. A GitHub Actions build that places secret-derived text in a summary note can publish credentials in cleartext to everyone able to view the workflow run, including unauthenticated viewers of a public repository, and the durable summary remains exposed until the run is deleted. GitHub Actions masking directives do not protect the summary file, while runs outside GitHub Actions and builds that do not summarize secret-derived text are not affected. This issue is fixed in version 1.51.0.
Technical POC Analysis
CWE-532, insertion of sensitive information into a log file.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
The @zuke/core package (versions before 1.51.0) exposes secret values in GitHub Actions job summaries, making them visible to anyone who can view the workflow run-including unauthenticated users on public repositories-and these summaries persist until deleted. This defect could leak credentials used in builds that summarize secret-derived text, potentially compromising sensitive systems and data.
Apply vendor patch: upgrade to @zuke/core 1.51.0 or later. As an interim measure, avoid including secret-derived text in summary notes and restrict access to workflow runs.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Arbitrary command execution on hosts running the @zuke/core MCP server in registry mode is possible because command-form
Release-gate substitution in the Zuke GitHub orchestration package @zuke/gh before 1.10.0 lets a party who can dispatch
Argument injection in Zuke's @zuke/core package (all versions before 1.51.0) on Windows lets attacker-influenced text pa
Symbolic-link following in Zuke CLI (@zuke/cli prior to 1.4.0) allows a repository, template, or archive supplied by an
EUVD-2026-114136
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB