Skip to main content

Scriban CVE-2026-74790

| EUVDEUVD-2026-59956 CRITICAL
Protection Mechanism Failure (CWE-693)
2026-08-16 VulnCheck GHSA-6w6f-93jg-2qf5
9.3
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Submit template to reused sandbox context
  2. Delivery
    Reference previously permitted member
  3. Exploit
    Stale cached accessor bypasses tightened filter
  4. Execution
    Read hidden property/field
  5. Impact
    Exfiltrate cross-tenant secret

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V15 - Secure Coding and Architecture Protection mechanism completeness
Exploitation Conditions

Exploitation requires that the host application reuse a single TemplateContext instance across more than one render AND tighten TemplateContext.MemberFilter (or otherwise rely on it as a sandbox) between renders for the same .NET Type, while EnableRelaxedMemberAccess/MemberFilter is the mechanism controlling member exposure. The vulnerable member is any property or field of a type whose permissive accessor was cached during an earlier, looser render; calling TemplateContext.Reset() between renders does not remediate it because Reset() leaves _memberAccessors populated. Limiting factors that reduce real-world risk: applications that instantiate a fresh TemplateContext per render, that never tighten MemberFilter on a reused context, or that do not use MemberFilter as their trust boundary are not exposed; the attacker must also be able to influence or supply the template (or the members referenced) in the later, more-restricted render.

Impact

The signals partly conflict and should be weighed honestly. The published CVSS 4.0 vector (9.3; AV:N/AC:L/PR:N/UI:N/VC:H/VI:H) portrays this as a trivially exploitable, unauthenticated, network-facing critical, but the described mechanism is conditional: it only bites applications that reuse one TemplateContext across renders AND tighten the MemberFilter between them, which is a specific developer usage pattern rather than a default remote attack surface - so real-world exploitability is narrower than AC:L implies, and the VI:H (integrity) rating is questionable since the flaw exposes members for reading rather than writing. No EPSS score and no CISA KEV entry were supplied, so there is no evidence of mass or active exploitation; however, a complete proof-of-concept is published in the GHSA advisory, so weaponization effort is low for anyone targeting a known-vulnerable multi-tenant deployment. Net assessment: a genuine and high-value bug for multi-tenant SaaS or template-sandbox use cases where MemberFilter is the trust boundary - such an operator should treat cross-tenant data leakage as urgent and patch promptly - but a low-to-moderate practical concern for apps that create a fresh context per render or do not rely on MemberFilter for isolation.

Exploit ScenarioDerived

A multi-tenant .NET service reuses one TemplateContext and, for a privileged first render, sets MemberFilter to allow all members of a model exposing a Secret property; it then tightens MemberFilter to allow only Public before rendering a second, lower-trust tenant's template. Because the permissive TypedObjectAccessor for that model type is already cached, the second render of '{{ model.secret }}' still returns the hidden value, leaking cross-tenant data. A public proof-of-concept demonstrating exactly this two-render leak is included in the vendor advisory.

Act Now Prioritize within 24-48h. Why: CRITICAL severity.
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Aug 16, 2026

Sandbox escape in the Scriban .NET templating engine (all versions before 7.0.0) lets attacker-influenced templates read object members that a tightened MemberFilter was meant to hide, because type accessors are cached by Type alone and survive both filter changes and TemplateContext.Reset(). Applications that reuse a single TemplateContext across requests or tenants and rely on MemberFilter as a security boundary can leak filtered properties and fields to a later, more-restricted render. Reported by VulnCheck with a working proof-of-concept in the vendor advisory; not listed in CISA KEV, and no EPSS score was provided in the source data.

RemediationAI

Upgrade to Scriban 7.0.0, which is the vendor-released patch (NuGet packages 'scriban' 7.0.0 and 'Scriban.Signed' 7.0.0); this is the primary and recommended fix. If an immediate upgrade is not possible, the most reliable compensating control is to stop sharing TemplateContext instances across renders that use different MemberFilter settings - construct a new TemplateContext per request or per tenant so no stale TypedObjectAccessor can be reused; note that TemplateContext.Reset() does NOT clear the accessor cache, so relying on Reset() as a workaround will not help. Alternatively, keep the MemberFilter constant (never tighten it on a reused context) and instead avoid exposing sensitive types at all, or wrap exposed models in purpose-built ScriptObject/DTO projections that contain only safe members, removing dependence on MemberFilter as a runtime gate. The trade-off of per-render contexts is loss of accessor-cache reuse (minor performance cost) in exchange for correct isolation. See the advisory at https://github.com/scriban/scriban/security/advisories/GHSA-5wr9-m6jw-xx44 for details.

Affected VersionsENISA

scriban 0 <7.0.0

Affected Packages

nuget scriban fix: 7.0.0
nuget scriban.signed fix: 7.0.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in nuget

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Scriban is a fast, sandbox-capable text templating engine for .NET, widely embedded in apps that render user- or tenant-supplied templates. Exposure of arbitrary .NET objects is meant to be constrained by TemplateContext.MemberFilter (and MemberRenamer), which the Scriban documentation explicitly recommends for indirect object exposure. Internally, TemplateContext.GetMemberAccessor() caches a TypedObjectAccessor per .NET Type in _memberAccessors (TemplateContext.cs ~L850-863), and the accessor precomputes its exposed-member set in its constructor/PrepareMembers() using whatever MemberFilter was active at creation time (TypedObjectAccessor.cs ~L33-40, L119-179). Because the cache key is Type only, a later MemberFilter change is ignored for any type already cached, and TemplateContext.Reset() (L877-902) does not clear _memberAccessors. This is a CWE-693 Protection Mechanism Failure: the sandbox control exists but is silently bypassed by stale caching rather than a memory-safety or injection flaw.

Know when Scriban 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

Vendor (VulnCheck) PRIMARY 9.3 CRITICAL
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N
vuln.today AI 6.8 MEDIUM

AC:H because it needs the specific reuse-then-tighten-filter pattern; S:C and C:H for sandbox escape leaking host data; I:N/A:N since members are only read, not modified.

3.1 AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N
4.0 AV:N/AC:H/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Aug 16, 2026 - 14:01 EUVD
CVE Published
Aug 16, 2026 - 13:14 cve.org
CRITICAL 9.3

DescriptionCVE.org

Scriban before 7.0.0 caches TypedObjectAccessor by Type only without considering MemberFilter changes, allowing reused TemplateContext instances to expose members that should be hidden. Attackers can access filtered properties and fields by reusing a TemplateContext after tightening its MemberFilter, bypassing sandbox policies across requests or tenants.

Executive ViewAI

Why It Matters

Scriban .NET templating engine (before version 7.0.0) contains a critical vulnerability with publicly available exploit code that could allow attackers to access sensitive data in multi-tenant deployments. The flaw bypasses security filters intended to isolate tenant data, creating direct risk to confidentiality and compliance. Immediate patching is essential to prevent cross-tenant information disclosure incidents.

Business Impact: Severe
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.3%
Top 79% exploitable
Prevalence
Medium
popular .NET templating library, but sandbox-reuse-dependent deployments narrower
Social Media
3
Sightings
Data Quality
6 sources
Confidence: High

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.

SignalValue
Severity CRITICAL
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Out-of-Cycle
Exploitation
Poc
System Exposure· derived
Open
Automatable
Yes
Human Impact
Very High
Technical Impact
Total

Priority Score

46
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +46
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

CVE-2026-73061 CRITICAL
9.3 Aug 16

Arbitrary CLR property writes in Scriban (the .NET templating engine) before 7.2.2 allow template code to mutate live ho

CVE-2026-74791 CRITICAL
9.2 Aug 16

Information disclosure and authorization bypass in Scriban (the .NET text templating engine) before 7.0.0 lets attackers

CVE-2026-73060 HIGH
8.7 Aug 16

Scriban template engine versions 3.0.0 through 7.2.5 expose any application accepting untrusted templates to complete CP

CVE-2026-74789 HIGH
8.7 Aug 16

Uncontrolled resource consumption in Scriban's .NET templating engine allows any party who can submit template input to

CVE-2026-74795 HIGH
8.7 Aug 16

Remote denial of service in Scriban before 6.6.0 allows unauthenticated attackers to crash the entire .NET hosting proce

CVE-2026-74792 HIGH
8.7 Aug 16

Process-terminating stack overflow in Scriban's template parser affects all versions before 7.0.0, allowing any attacker

CVE-2026-74794 HIGH
8.7 Aug 16

Scriban's template rendering engine before version 6.6.0 crashes the entire .NET hosting process when object graphs cont

CVE-2026-74788 HIGH
8.7 Aug 16

Uncontrolled memory allocation in Scriban's string.pad_left and string.pad_right template functions enables unauthentica

CVE-2026-74787 HIGH
8.7 Aug 16

Uncontrolled recursion in Scriban's `object.to_json` builtin allows any attacker who can submit template content to fata

CVE-2026-74783 HIGH
8.7 Aug 16

Process-terminating denial-of-service in Scriban 6.6.0-7.2.0 allows any network-reachable attacker to crash a host .NET

CVE-2026-73062 HIGH
8.7 Aug 16

Resource exhaustion in Scriban 3.0.0 through 7.2.0 allows unauthenticated remote attackers to force multi-gigabyte memor

CVE-2026-74784 HIGH
8.7 Aug 16

Unbounded memory allocation in Scriban's `array.insert_at` built-in function allows any template author to crash the hos

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy