| Status | Draft — awaiting maintainer review |
| Package in scope | IgniteUI.Blazor.GridLite (net8.0 / net9.0 / net10.0) |
| Repository | https://github.com/IgniteUI/IgniteUI.Blazor.GridLite |
| Reviewed commit | |
| Document owner | |
| Last updated | 2026-08-11 |
| Method | STRIDE per trust boundary |
This document records the package's security boundaries, assumptions, and controls. It is a living document and must be updated whenever the JS interop surface, serialization boundary, bundled JavaScript, or release process changes.
Individual threat findings, their severities, and their remediation status are not published. They are tracked privately by the maintainers and are not included in this document.
It is not a penetration test, not an audit, and not an attestation of security.
In scope
- The
IgniteUI.Blazor.GridLiteNuGet package: managed code undersrc/IgniteUI.Blazor.GridLite/. - The static web asset it ships:
wwwroot/js/blazor-igc-grid-lite.js(Vite bundle ofigc-grid-lite-entry.jsand theigniteui-grid-litenpm package). - The build and release pipeline that produces and signs the package.
Out of scope
- The consuming application (its authentication, authorization, CSP, data access).
- Internal implementation of the upstream
igniteui-grid-litenpm package, except for its behavior at the rendering boundary. - The ASP.NET Core Blazor framework itself. Framework-level behavior is treated as an assumption (§5).
- The demo application under
demo/.
flowchart LR
subgraph SRV["Server circuit / WASM runtime — trusted"]
C["IgbGridLite<TItem>"]
H["JSHandler<TItem><br/>[JSInvokable] callbacks"]
A["Consuming app<br/>Sorting / Filtering handlers"]
end
subgraph BR["Browser — untrusted"]
M["blazor-igc-grid-lite.js<br/>window.blazor_igc_grid_lite"]
W["igc-grid-lite custom element<br/>(shadow DOM)"]
end
C -- "TB1: JSON.Serialize(Data, options)" --> M
M -- "TB2: invokeMethodAsync(e.detail)" --> H
H --> A
M --> W
W -- "user sorts / filters" --> M
The two package-specific trust boundaries are:
- TB1 — server → client. Everything crossing it is visible to the end user, forever.
- TB2 — client → server. In Blazor Server, callback data originates in the browser and must be treated as untrusted input. In Blazor WebAssembly, it remains client-controlled but does not cross into a server circuit.
| Asset | Objective |
|---|---|
Consumer data bound to Data (IEnumerable<TItem>) |
Confidentiality — only intended serializable properties reach the browser |
| The Blazor circuit (server-side rendering) | Availability — a client cannot exhaust CPU/memory |
| The consuming app's browser origin | Integrity — the component never introduces script execution |
| The published NuGet package | Integrity — signed, reproducible, no unintended content |
The model is only valid if these assumptions hold. Consumer-facing responsibilities must be documented where they affect secure use of the package.
| # | Assumption |
|---|---|
| A1 | The consuming app enforces authentication/authorization; the grid performs none. |
| A2 | The consuming app enforces a Content Security Policy appropriate to its render mode. |
| A3 | The consuming app prevents untrusted script execution. The component must avoid introducing script execution and avoid unnecessarily widening access available to other scripts running in the same origin. |
| A4 | Data bound to Data has already passed the app's own authorization filter. |
| A5 | IgbGridLiteOptions.JavascriptPath is a compile-time constant controlled by the app, never derived from user input or untrusted configuration. |
| A6 | Blazor Server hosts retain appropriate SignalR message-size and circuit resource limits. Applications that increase those limits must reassess the availability impact of client-driven interop callbacks. |
STRIDE analysis is performed against each trust boundary described in §3, covering:
- TB2 — client → server: the JS interop callback surface.
- TB1 — server → client: the serialization and rendering surface.
- Supply chain, build and release: dependency bundling and the publish pipeline.
Severity is assessed as residual severity given assumptions A1–A6.
The resulting findings, severities, remediation status, and any accepted risks are maintained in a private maintainer-only record and are deliberately omitted here. Suspected vulnerabilities should be reported through GitHub Private Vulnerability Reporting on this repository rather than in a public issue.
Controls already in place, verified in the repository files, evaluated build properties, and repository-level GitHub settings:
- Code scanning — GitHub CodeQL default setup is configured with the extended query suite for Actions, C#, and JavaScript/TypeScript; analyses run for the default branch and pull requests.
- Repository protection — secret scanning, push protection, Dependabot security updates, vulnerability alerts, and Private Vulnerability Reporting are enabled.
- Release integrity — Authenticode signing of all DLLs with a post-sign verification gate; NuGet package signing followed by
dotnet nuget verify. - Credential hygiene — Azure OIDC federation and NuGet Trusted Publishing use short-lived credentials rather than stored cloud or NuGet publishing secrets.
- Workflow permissions — job-scoped
permissions: { id-token: write, contents: read }. - Reproducible dependency install —
npm ciagainst a committedpackage-lock.json. - Dependency updates — Dependabot is configured for weekly GitHub Actions version updates, and repository-level Dependabot security updates are enabled.
- Managed-code determinism — the evaluated SDK property
Deterministicistrue, and portable PDBs are generated. - No unsafe primitives — no
eval,new Function,MarkupString,AddMarkupContent, orAllowUnsafeBlocksin first-party code.
| Version | Commit | Reviewers | Date | Outcome |
|---|---|---|---|---|
Release gate: no open finding of severity High or above may ship. Findings themselves are tracked privately (§6).
- Threat mitigation guidance for ASP.NET Core Blazor interactive server-side rendering
- Call .NET methods from JavaScript functions in ASP.NET Core Blazor
- Call JavaScript functions from .NET methods in ASP.NET Core Blazor
- Enforce a Content Security Policy for ASP.NET Core Blazor
- Microsoft SDL — Threat Modeling
- OWASP Threat Modeling Cheat Sheet
- GitHub — About code scanning with CodeQL
- GitHub — Configuring default setup for code scanning
- GitHub — Privately reporting a security vulnerability
- GitHub — Security hardening for GitHub Actions
- NuGet Trusted Publishing