CVE-2026-62847
Metalama: Local code execution via DLL planting in world-writable temporary directories (Linux/macOS)
Metalama is a Roslyn-based open-source patterns and architecture toolkit for C#. Prior to 2025.1.18, 2026.0.25 and 2026.1.19, Metalama.Framework and Metalama.Tool load and execute compile-time assemblies, auxiliary executable tools and embedded helper assemblies from predictable temporary directories. On Linux and macOS, the default Path.GetTempPath() location is world-writable, and existing artifacts are trusted based on sentinel or .completed marker files rather than integrity verification. A local unprivileged user on a shared machine or CI/build agent can pre-create the deterministic directory structure and plant a malicious DLL with the matching sentinel. When a higher-privileged developer or build account subsequently builds, Metalama skips regeneration and executes the planted artifact in the compiler, IDE or MSBuild process as the building user. This permits cross-user privilege escalation, reading source and secrets, supply-chain tampering with build output, or disrupting builds. Default Windows per-user temporary directories are protected by ACLs and are not affected. Deployer-selected insecure cache locations are outside the vulnerability's scope. This issue is fixed in versions 2025.1.18, 2026.0.25 and 2026.1.19.
Attack profile
How easy it is to exploit
- Attack vector
- Local
- Complexity
- Low
- Privileges needed
- Low
- User interaction
- Required
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
8.2
Metalama: Local code execution via DLL planting in world-writable temporary directories (Linux/macOS)
Metalama is a Roslyn-based open-source patterns and architecture toolkit for C#. Prior to 2025.1.18, 2026.0.25 and 2026.1.19, Metalama.Framework and Metalama.Tool load and execute compile-time assemblies, auxiliary executable tools and embedded helper assemblies from predictable temporary directories. On Linux and macOS, the default Path.GetTempPath() location is world-writable, and existing artifacts are trusted based on sentinel or .completed marker files rather than integrity verification. A local unprivileged user on a shared machine or CI/build agent can pre-create the deterministic directory structure and plant a malicious DLL with the matching sentinel. When a higher-privileged developer or build account subsequently builds, Metalama skips regeneration and executes the planted artifact in the compiler, IDE or MSBuild process as the building user. This permits cross-user privilege escalation, reading source and secrets, supply-chain tampering with build output, or disrupting builds. Default Windows per-user temporary directories are protected by ACLs and are not affected. Deployer-selected insecure cache locations are outside the vulnerability's scope. This issue is fixed in versions 2025.1.18, 2026.0.25 and 2026.1.19.
- Record
CVE-2026-62847- CVSS 3.1
- 8.2 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H - Weakness
- CWE-377, CWE-427
- Updated
- 2026-11-02
EUVDEUVD-2026-114452
8.2
Metalama is a Roslyn-based open-source patterns and architecture toolkit for C#. Prior to 2025.1.18, 2026.0.25 and 2026.1.19, Metalama.Framework and Metalama.Tool load and execute compile-time assemblies, auxiliary executable tools and embedded helper assemblies from predictable temporary directories. On Linux and macOS, the default Path.GetTempPath() location is world-writable, and existing artifacts are trusted based on sentinel or .completed marker files rather than integrity verification. A local unprivileged user on a shared machine or CI/build agent can pre-create the deterministic directory structure and plant a malicious DLL with the matching sentinel. When a higher-privileged developer or build account subsequently builds, Metalama skips regeneration and executes the planted artifact in the compiler, IDE or MSBuild process as the building user. This permits cross-user privilege escalation, reading source and secrets, supply-chain tampering with build output, or disrupting builds. Default Windows per-user temporary directories are protected by ACLs and are not affected. Deployer-selected insecure cache locations are outside the vulnerability's scope. This issue is fixed in versions 2025.1.18, 2026.0.25 and 2026.1.19.
- Record
EUVD-2026-114452- CVSS 3.1
- 8.2 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-m6wq-39m7-9xpp
6.0
Metalama allows local code execution through DLL planting in shared temporary directories
Summary
Metalama loaded and executed compile-time assemblies, auxiliary executable tools, and embedded helper assemblies from predictable temporary directories. On Linux and macOS the default cache location was the world-writable system temporary directory (Path.GetTempPath(), i.e. /tmp), and previously-generated artifacts were trusted based on the presence of a sentinel/.completed marker file rather than on any integrity verification.
A local, unprivileged user on a shared machine or CI/build agent can pre-create the deterministic cache directory structure and plant a malicious DLL together with the matching sentinel file. When a higher-privileged user (or build/service account) subsequently runs a build, Metalama finds the sentinel, skips regeneration, and loads and executes the attacker-supplied assembly inside the compiler / IDE / MSBuild process.
Affected load-and-execute paths:
- the cache of compile-time assemblies that Metalama generates from your aspects;
- auxiliary executable tools that Metalama extracts to a local directory and then launches;
- embedded .NET helper assemblies that Metalama extracts to a local directory and loads into the build / IDE process.
Impact
Arbitrary code execution in the security context of the building user — i.e. a local privilege escalation across user accounts on shared POSIX systems (multi-user developer machines, CI/build agents). The attacker obtains code execution as the victim without holding the victim's privileges, and can read source/secrets, tamper with build output (supply-chain injection), or disrupt builds.
Affected configurations
- Linux and macOS, default configuration — affected. The shipped default uses the world-writable system temp directory.
- Windows, default configuration — not affected. The default per-user temporary directory is protected by OS ACLs, so cross-user planting is not possible.
- The
METALAMA_TEMPenvironment variable is a deployer-controlled override and is out of scope: pointing it at an insecure (e.g. world-writable or attacker-owned) location is a deployment misconfiguration, not a defect in the product.
Severity
CVSS v3.1: AV:L/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H = 8.2 (High) for the affected POSIX default configuration (Scope:Changed reflects the cross-user privilege escalation).
CVSS v4.0 cross-check: CVSS:4.0/AV:L/AC:L/AT:P/PR:L/UI:P/VC:L/VI:H/VA:L/SC:L/SI:H/SA:H = 6.0 (Medium), which more granularly attributes low impact to the cache itself and high impact to the subsequent build process. The honest range is therefore Medium-High depending on the scoring model and platform.
Fix
Caches and extraction directories were relocated from the world-writable system temp directory to per-user application-data locations ($XDG_CACHE_HOME / ~/.cache/Metalama on POSIX), relying on OS-enforced per-user ownership as the trust boundary. Fixed in 2026.1.19.
Weaknesses
- CWE-377: Insecure Temporary File
- CWE-427: Uncontrolled Search Path Element
Affected packages
- Metalama.Framework < 2026.1.19,
- Metalama.Tool < 2026.1.19
Internal tracking: metalama/Metalama#1650.
- Record
GHSA-m6wq-39m7-9xpp- CVSS 4.0
- 6.0 Medium
CVSS:4.0/AV:L/AC:L/AT:P/PR:L/UI:P/VC:L/VI:H/VA:L/SC:L/SI:H/SA:H - CVSS 3.1
- 8.2 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H - Weakness
- CWE-377, CWE-427
- Updated
- 2026-11-02
NVD
8.2
Metalama is a Roslyn-based open-source patterns and architecture toolkit for C#. Prior to 2025.1.18, 2026.0.25 and 2026.1.19, Metalama.Framework and Metalama.Tool load and execute compile-time assemblies, auxiliary executable tools and embedded helper assemblies from predictable temporary directories. On Linux and macOS, the default Path.GetTempPath() location is world-writable, and existing artifacts are trusted based on sentinel or .completed marker files rather than integrity verification. A local unprivileged user on a shared machine or CI/build agent can pre-create the deterministic directory structure and plant a malicious DLL with the matching sentinel. When a higher-privileged developer or build account subsequently builds, Metalama skips regeneration and executes the planted artifact in the compiler, IDE or MSBuild process as the building user. This permits cross-user privilege escalation, reading source and secrets, supply-chain tampering with build output, or disrupting builds. Default Windows per-user temporary directories are protected by ACLs and are not affected. Deployer-selected insecure cache locations are outside the vulnerability's scope. This issue is fixed in versions 2025.1.18, 2026.0.25 and 2026.1.19.
- Record
CVE-2026-62847- CVSS 3.1
- 8.2 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H - Weakness
- CWE-377, CWE-427
- Updated
- 2026-11-03
OSV
8.2
Metalama: Local code execution via DLL planting in world-writable temporary directories (Linux/macOS)
Metalama is a Roslyn-based open-source patterns and architecture toolkit for C#. Prior to 2025.1.18, 2026.0.25 and 2026.1.19, Metalama.Framework and Metalama.Tool load and execute compile-time assemblies, auxiliary executable tools and embedded helper assemblies from predictable temporary directories. On Linux and macOS, the default Path.GetTempPath() location is world-writable, and existing artifacts are trusted based on sentinel or .completed marker files rather than integrity verification. A local unprivileged user on a shared machine or CI/build agent can pre-create the deterministic directory structure and plant a malicious DLL with the matching sentinel. When a higher-privileged developer or build account subsequently builds, Metalama skips regeneration and executes the planted artifact in the compiler, IDE or MSBuild process as the building user. This permits cross-user privilege escalation, reading source and secrets, supply-chain tampering with build output, or disrupting builds. Default Windows per-user temporary directories are protected by ACLs and are not affected. Deployer-selected insecure cache locations are outside the vulnerability's scope. This issue is fixed in versions 2025.1.18, 2026.0.25 and 2026.1.19.
- Record
CVE-2026-62847- CVSS 3.1
- 8.2 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H - Weakness
- CWE-377, CWE-427
- Updated
- 2026-11-07
OSVGHSA-m6wq-39m7-9xpp
6.0
Metalama allows local code execution through DLL planting in shared temporary directories
Summary
Metalama loaded and executed compile-time assemblies, auxiliary executable tools, and embedded helper assemblies from predictable temporary directories. On Linux and macOS the default cache location was the world-writable system temporary directory (Path.GetTempPath(), i.e. /tmp), and previously-generated artifacts were trusted based on the presence of a sentinel/.completed marker file rather than on any integrity verification.
A local, unprivileged user on a shared machine or CI/build agent can pre-create the deterministic cache directory structure and plant a malicious DLL together with the matching sentinel file. When a higher-privileged user (or build/service account) subsequently runs a build, Metalama finds the sentinel, skips regeneration, and loads and executes the attacker-supplied assembly inside the compiler / IDE / MSBuild process.
Affected load-and-execute paths:
- the cache of compile-time assemblies that Metalama generates from your aspects;
- auxiliary executable tools that Metalama extracts to a local directory and then launches;
- embedded .NET helper assemblies that Metalama extracts to a local directory and loads into the build / IDE process.
Impact
Arbitrary code execution in the security context of the building user — i.e. a local privilege escalation across user accounts on shared POSIX systems (multi-user developer machines, CI/build agents). The attacker obtains code execution as the victim without holding the victim's privileges, and can read source/secrets, tamper with build output (supply-chain injection), or disrupt builds.
Affected configurations
- Linux and macOS, default configuration — affected. The shipped default uses the world-writable system temp directory.
- Windows, default configuration — not affected. The default per-user temporary directory is protected by OS ACLs, so cross-user planting is not possible.
- The
METALAMA_TEMPenvironment variable is a deployer-controlled override and is out of scope: pointing it at an insecure (e.g. world-writable or attacker-owned) location is a deployment misconfiguration, not a defect in the product.
Severity
CVSS v3.1: AV:L/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H = 8.2 (High) for the affected POSIX default configuration (Scope:Changed reflects the cross-user privilege escalation).
CVSS v4.0 cross-check: CVSS:4.0/AV:L/AC:L/AT:P/PR:L/UI:P/VC:L/VI:H/VA:L/SC:L/SI:H/SA:H = 6.0 (Medium), which more granularly attributes low impact to the cache itself and high impact to the subsequent build process. The honest range is therefore Medium-High depending on the scoring model and platform.
Fix
Caches and extraction directories were relocated from the world-writable system temp directory to per-user application-data locations ($XDG_CACHE_HOME / ~/.cache/Metalama on POSIX), relying on OS-enforced per-user ownership as the trust boundary. Fixed in 2026.1.19.
Weaknesses
- CWE-377: Insecure Temporary File
- CWE-427: Uncontrolled Search Path Element
Affected packages
- Metalama.Framework < 2026.1.19,
- Metalama.Tool < 2026.1.19
Internal tracking: metalama/Metalama#1650.
- Record
GHSA-m6wq-39m7-9xpp- CVSS 4.0
- 6.0 Medium
CVSS:4.0/AV:L/AC:L/AT:P/PR:L/UI:P/VC:L/VI:H/VA:L/SC:L/SI:H/SA:H - CVSS 3.1
- 8.2 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H - Weakness
- CWE-377, CWE-427
- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
Metalama.FrameworkNuGet |
2026.1.0-preview up to 2026.1.19 | 2026.1.19 |
Metalama.ToolNuGet |
2026.1.0-preview up to 2026.1.19 | 2026.1.19 |
Metalama.FrameworkNuGet |
before 2025.1.18 | 2025.1.18 |
Metalama.ToolNuGet |
before 2025.1.18 | 2025.1.18 |
Metalama.ToolNuGet |
2026.0.0-preview up to 2026.0.25 | 2026.0.25 |
Metalama.FrameworkNuGet |
2026.0.0-preview up to 2026.0.25 | 2026.0.25 |
Metalama.FrameworkNuGet |
2026.1.0-preview up to 2026.1.19, plus listed versions 2026.1.1-preview2026.1.10-preview2026.1.11-preview2026.1.12-preview2026.1.13-preview Show 13 moreShow less2026.1.14-rc2026.1.15-rc2026.1.162026.1.172026.1.182026.1.2-preview2026.1.3-preview2026.1.4-preview2026.1.5-preview2026.1.6-preview2026.1.7-preview2026.1.8-preview2026.1.9-preview |
2026.1.19 |
Metalama.ToolNuGet |
2026.1.0-preview up to 2026.1.19, plus listed versions 2026.1.1-preview2026.1.10-preview2026.1.11-preview2026.1.12-preview2026.1.13-preview Show 13 moreShow less2026.1.14-rc2026.1.15-rc2026.1.162026.1.172026.1.182026.1.2-preview2026.1.3-preview2026.1.4-preview2026.1.5-preview2026.1.6-preview2026.1.7-preview2026.1.8-preview2026.1.9-preview |
2026.1.19 |
Metalama.FrameworkNuGet |
before 2025.1.18, plus listed versions 0.5.0-preview0.5.1-preview0.5.10-preview0.5.11-preview0.5.12-preview Show 45 moreShow less0.5.13-preview0.5.15-preview0.5.16-preview0.5.17-preview0.5.18-preview0.5.19-preview0.5.2-preview0.5.20-preview0.5.21-preview0.5.22-preview0.5.23-preview0.5.24-preview0.5.25-preview0.5.26-preview0.5.27-preview0.5.28-preview0.5.29-preview0.5.3-preview0.5.30-preview0.5.31-preview0.5.32-preview0.5.33-preview0.5.34-preview0.5.35-preview0.5.36-preview0.5.37-preview0.5.38-preview0.5.39-preview0.5.4-preview0.5.40-preview0.5.41-preview0.5.42-preview0.5.43-preview0.5.44-preview0.5.45-preview0.5.46-preview0.5.47-preview0.5.48-preview0.5.49-preview0.5.5-preview0.5.50-preview0.5.51-preview0.5.52-preview0.5.53-preview0.5.54-preview |
2025.1.18 |
Metalama.ToolNuGet |
before 2025.1.18, plus listed versions 0.5.77-preview0.5.78-preview0.5.79-preview0.5.80-preview0.5.81-preview Show 45 moreShow less0.5.82-preview0.5.83-preview2023.0.101-rc2023.0.102-rc2023.0.103-rc2023.0.104-rc2023.0.105-rc2023.0.106-rc2023.0.107-rc2023.0.108-rc2023.0.109-rc2023.0.110-rc2023.0.111-rc2023.0.112-rc2023.0.113-rc2023.0.1142023.0.1152023.0.1162023.0.1172023.0.1182023.0.1192023.0.1202023.0.1212023.1.1-preview2023.1.102023.1.112023.1.122023.1.2-preview2023.1.3-preview2023.1.4-preview2023.1.5-preview2023.1.6-rc2023.1.7-rc2023.1.8-rc2023.1.92023.2.1-preview2023.2.2-rc2023.2.3-rc2023.2.42023.2.52023.3.1-preview2023.3.102023.3.2-preview2023.3.3-preview2023.3.4-preview |
2025.1.18 |
Metalama.ToolNuGet |
2026.0.0-preview up to 2026.0.25, plus listed versions 2026.0.1-preview2026.0.10-rc2026.0.112026.0.122026.0.13 Show 19 moreShow less2026.0.142026.0.152026.0.162026.0.172026.0.182026.0.192026.0.2-preview2026.0.202026.0.212026.0.222026.0.232026.0.242026.0.3-preview2026.0.4-preview2026.0.5-preview2026.0.6-rc2026.0.7-rc2026.0.8-rc2026.0.9-rc |
2026.0.25 |
Metalama.FrameworkNuGet |
2026.0.0-preview up to 2026.0.25, plus listed versions 2026.0.1-preview2026.0.10-rc2026.0.112026.0.122026.0.13 Show 19 moreShow less2026.0.142026.0.152026.0.162026.0.172026.0.182026.0.192026.0.2-preview2026.0.202026.0.212026.0.222026.0.232026.0.242026.0.3-preview2026.0.4-preview2026.0.5-preview2026.0.6-rc2026.0.7-rc2026.0.8-rc2026.0.9-rc |
2026.0.25 |
History
| Recorded | Changed | Sources |
|---|---|---|
| facts | NVD, OSV | |
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-62847 is a high vulnerability (CVSS 8.2) in Metalama, published October 14, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.15%, the 4th percentile. Fixed in Metalama.Framework 2026.1.19.
References
github.com/metalama/Metalama/security/advisories/GHSA-m6wq-39m7-9xpp
github.com/metalama/Metalama/pull/1650
github.com/metalama/Metalama/commit/09911349a916e82194b1cfaa6d0a38acad928fc9
github.com/metalama/Metalama/commit/92c4feecfce86d18fcb007ab6d3a1b4383326a2e
github.com/metalama/Metalama/releases/tag/release/2025.1.18
github.com/metalama/Metalama/releases/tag/release/2026.0.25
Show 7 moreShow less
github.com/metalama/Metalama/releases/tag/release/2026.1.19
github.com/metalama/Metalama/pull/1719
github.com/metalama/Metalama/commit/ab9407263203c66d7c5680a34c28dba31f9951c9
github.com/advisories/GHSA-m6wq-39m7-9xpp
github.com/CVEProject/cvelistV5/tree/main/cves/2026/62xxx/CVE-2026-62847.json
nvd.nist.gov/vuln/detail/CVE-2026-62847
github.com/metalama/Metalama
Left out here: 318 versions. The JSON record has them.