Cyber Resilience

CVE-2026-31976

RCE in Xygeni-Action 5.38.0 – 6.4.0

Published
11 March 2026
Modified
16 March 2026
Patch / advisory
CVSS Score v4 9.3
Click a component to see what it means
Raw vectorCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
EPSS Score 0.0050 40th percentile
Risk Priority 46 floored blend · peak EPSS

Summary

CVE-2026-31976 is a critical-severity Embedded Malicious Code (CWE-506) vulnerability in Xygeni Xygeni-Action. Its CVSS base score is 9.3 (Critical).

Operationally, exploitation aligns with the MITRE ATT&CK technique Embedded Payloads (T1027.009); ranked at the 40th percentile by exploit likelihood (below the median); it is not currently listed in the CISA KEV catalog.

The strongest mitigations our analysis identified map to SA-11 (Developer Testing and Evaluation) and SC-44 (Detonation Chambers) — see the control section below for these in your framework.

Deeper analysis AI-assisted summary

Synthesised by an AI model from the NVD description and linked references — a reading aid, not an authoritative source.

CVE-2026-31976 is a supply chain compromise vulnerability affecting the xygeni-action GitHub Action, specifically the mutable v5 tag of the xygeni/xygeni-action repository. On March 3, 2026, an attacker with compromised credentials created pull requests (#46, #47, #48) injecting obfuscated shell code into action.yml. Although branch protection rules prevented these PRs from merging into the main branch, the attacker used compromised GitHub App credentials to retag the v5 reference to point at the malicious commit (4bf1d4e19ad81a3e8d4063755ae0f482dd3baf12), which persisted in the repository's git object store. This tag poisoning (CWE-506) enabled remote code execution for any GitHub Actions workflow referencing xygeni/xygeni-action@v5, with a CVSS v3.1 score of 9.8 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H).

Any GitHub Actions workflow referencing xygeni/xygeni-action@v5 between approximately March 3 and March 10, 2026, would fetch and execute the malicious commit, deploying a command-and-control (C2) implant. This granted the attacker arbitrary command execution on the affected CI runner for up to 180 seconds per workflow run, allowing potential data exfiltration, persistence, or further compromise of the runner environment. Exploitation required no privileges beyond public access to the action, targeting users of the xygeni-action in their workflows.

Mitigation details are available in the GitHub security advisory (GHSA-f8q5-h5qh-33mh) and issue tracker (#54) at https://github.com/xygeni/xygeni-action/security/advisories/GHSA-f8q5-h5qh-33mh and https://github.com/xygeni/xygeni-action/issues/54, published following the incident detection on March 11, 2026.

OWASP Top 10 for Web (2025)

EU & UK References

Vulnerability Data

xygeni-action is the GitHub Action for Xygeni Scanner. On March 3, 2026, an attacker with access to compromised credentials created a series of pull requests (#46, #47, #48) injecting obfuscated shell code into action.yml. The PRs were blocked by branch…

more

protection rules and never merged into the main branch. However, the attacker used the compromised GitHub App credentials to move the mutable v5 tag to point at the malicious commit (4bf1d4e19ad81a3e8d4063755ae0f482dd3baf12) from one of the unmerged PRs. This commit remained in the repository's git object store, and any workflow referencing @v5 would fetch and execute it. This is a supply chain compromise via tag poisoning. Any GitHub Actions workflow referencing xygeni/xygeni-action@v5 during the affected window (approximately March 3–10, 2026) executed a C2 implant that granted the attacker arbitrary command execution on the CI runner for up to 180 seconds per workflow run.

CWE(s)

Related Threats

MITRE ATT&CK Enterprise Techniques

T1027.009 Embedded Payloads Stealth
Adversaries may embed payloads within other files to conceal malicious content from defenses.
T1195 Supply Chain Compromise Initial Access
Adversaries may manipulate products or product delivery mechanisms prior to receipt by a final consumer for the purpose of data or system compromise.
T1195.002 Compromise Software Supply Chain Initial Access
Adversaries may manipulate application software prior to receipt by a final consumer for the purpose of data or system compromise.
T1505 Server Software Component Persistence
Adversaries may abuse legitimate extensible development features of servers to establish persistent access to systems.
T1525 Implant Internal Image Persistence
Adversaries may implant cloud or container images with malicious code to establish persistence after gaining access to an environment.
T1554 Compromise Host Software Binary Persistence
Adversaries may modify host software binaries to establish persistent access to systems.
Derived from this CVE’s CWE(s) via the direct CWE→ATT&CK cross-walk.

CVEs Like This One

CVE-2024-3094Shared CWE-506
CVE-2025-30066Shared CWE-506
CVE-2023-2003Shared CWE-506
CVE-2025-59145Shared CWE-506
CVE-2025-10894Shared CWE-506
CVE-2025-54313Shared CWE-506
CVE-2026-46421Shared CWE-506
CVE-2025-59144Shared CWE-506
CVE-2026-67595Shared CWE-506
CVE-2025-32965Shared CWE-506

Affected Assets

xygeni
xygeni-action
5.38.0 — 6.4.0

Mitigating Controls

Control response

Prevent
Stop it (NIST 800-53)

Detect
Catch it (NIST detect / respond)

Harden
Shrink the surface (DISA STIG)
  • 3 hardening rules · 2 OS baselines
Validate
Prove the fix (OWASP ASVS)

Mitigating Controls (NIST 800-53 r5) AI

Developer testing and evaluation can discover embedded malicious code before release.

Detonation chambers can reveal embedded malicious code through controlled execution analysis.

Integrity verification tools directly detect unauthorized or malicious code insertions.

Tamper-resistance and detection mechanisms identify malicious code introduced via the supply chain.

Component authenticity requirements reduce the chance malicious code is embedded by developers or suppliers.

Component authenticity controls stop introduction of malicious or counterfeit code into the product.

Mitigating Controls (NIST CSF 2.0) AI

Derived directly from the weakness types (CWEs) cited in the NVD entry via our AI-authored CWE→CSF cross-walk (authority under review) — links open the control.

ID.RA-09 mostly match
prevents

Assessing authenticity and integrity before acquisition catches embedded malicious code.

PR.PS-06 mostly match
prevents

Secure SDLC practices directly prevent introduction of malicious code during development.

GV.SC-06 partial match
prevents

Due diligence prior to supplier relationships helps avoid sources of embedded malicious code.

GV.SC-07 partial match
prevents

Supplier risk assessment reduces likelihood of receiving products containing malicious code.

ID.RA-10 partial match
prevents

Pre-acquisition assessment of critical suppliers mitigates risk of malicious code in procured software.

Mitigating Controls (ISO/IEC 27001:2022 Annex A) AI

Derived directly from the weakness types (CWEs) cited in the NVD entry via our AI-authored CWE→ISO cross-walk (authority under review) — links open the control.

prevents

Requiring suppliers to furnish component lists, attestations, and cryptographic verification of delivered artefacts makes it harder for an attacker to embed hidden malicious code that would otherwise go undetected through the supply chain.

finds

Checks that executed code has not been tampered with and monitoring for malware-associated activity reduce the likelihood that hidden malicious code remains active.

none

Banning unapproved or unknown software and requiring testing plus authorization reduces the chance that hidden malicious code will be introduced into production environments.

Hardening callouts derived

Configuration rules from DISA STIG baselines that bear on weaknesses of the type cited by this CVE. Each rule is shown with the relationship its mapping actually records, against the CWE it was authored against. Derived via CVE→CWE over `controls_xwalks` (authoritative rows only; rows rated `none` are excluded).

Oracle Linux 9 (1 rule)
  • V-271452 OL 9 must use a Linux Security Module configured to enforce limits on system services. prevents CWE-506
RHEL 9 (1 rule)
  • V-258078 RHEL 9 must use a Linux Security Module configured to enforce limits on system services. prevents CWE-506

References