Skip to content

fix(security): pin transitive AngleSharp to 1.5.2 (mXSS advisory)#98

Merged
andregoepel merged 1 commit into
mainfrom
security/pin-anglesharp
Jul 18, 2026
Merged

fix(security): pin transitive AngleSharp to 1.5.2 (mXSS advisory)#98
andregoepel merged 1 commit into
mainfrom
security/pin-anglesharp

Conversation

@andregoepel

Copy link
Copy Markdown
Owner

The CI vulnerability gate (dotnet list package --vulnerable) fails: bunit 2.7.2AngleSharp.Diffing 1.1.1 resolves AngleSharp 1.4.0, which carries a moderate mXSS advisory (GHSA-pgww-w46g-26qg / CVE-2026-54570).

Fix

Mirrors the temporary pin done in marten-identity (#106/#107): enable CentralPackageTransitivePinningEnabled and pin AngleSharp 1.5.2 in Directory.Packages.props, overriding the transitive resolution without a direct PackageReference.

Transitive pinning enforces every central version as a pin, which surfaced two previously-unused stale central entries sitting below their transitive requirement (via Marten.Identity 1.3.1). Both are aligned to the versions already resolved transitively — no behavioural change:

  • Marten.AspNetCore 9.0.2 → 9.14.1
  • Quartz.Extensions.Hosting 3.18.1 → 3.18.2

Verification

  • dotnet restore --force-evaluate succeeds; AngleSharp now resolves to 1.5.2 (CentralTransitive).
  • dotnet list package --vulnerable --include-transitive reports no vulnerable packages across all projects (previously flagged AngleSharp in AndreGoepel.AppFoundation.Tests).
  • Lockfile changes are limited to the three affected packages — no broad re-resolution, so --locked-mode restore stays reproducible.

Follow-up

Temporary. Tracked for removal in #97 once bUnit ships a transitive chain that resolves AngleSharp to ≥ 1.5.0 on its own.

Closes nothing — the tracking issue (#97) stays open by design until the pin can be dropped.

bUnit 2.7.2 -> AngleSharp.Diffing 1.1.1 resolves AngleSharp to 1.4.0,
which carries a moderate mXSS advisory (GHSA-pgww-w46g-26qg /
CVE-2026-54570) and trips the CI vulnerability gate.

Enable CentralPackageTransitivePinningEnabled and pin AngleSharp to the
patched 1.5.2 via Directory.Packages.props (no direct PackageReference
needed). Temporary — tracked for removal in #97 once bUnit resolves to
>= 1.5.0 on its own.

Transitive pinning enforces every central version as a pin, which
surfaced two previously-unused stale entries sitting below their
transitive requirement: Marten.AspNetCore (9.0.2 -> 9.14.1) and
Quartz.Extensions.Hosting (3.18.1 -> 3.18.2). Both are aligned to the
versions already resolved transitively — no behavioural change.

`dotnet list package --vulnerable --include-transitive` is clean.
@andregoepel
andregoepel merged commit 8fc754d into main Jul 18, 2026
4 checks passed
@andregoepel
andregoepel deleted the security/pin-anglesharp branch July 18, 2026 03:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant