Skip to content

Update vulnerable client-side libraries and resource manifests#19326

Merged
MikeAlhayek merged 3 commits into
mainfrom
ma/update-client-libraries
Jun 4, 2026
Merged

Update vulnerable client-side libraries and resource manifests#19326
MikeAlhayek merged 3 commits into
mainfrom
ma/update-client-libraries

Conversation

@MikeAlhayek
Copy link
Copy Markdown
Member

@MikeAlhayek MikeAlhayek commented Jun 2, 2026

PR description

Summary

Addresses the “Vulnerable Client-Side Library Discovered (Medium)” finding from the 2026 web application penetration test by upgrading the affected client-side libraries and refreshing the related OrchardCore resource metadata.

Changes in this PR

  • Upgraded jQuery UI from 1.12.1 to 1.14.2
  • Upgraded Vue 2 from 2.6.14 to 2.7.16
  • Upgraded Monaco Editor from 0.46.0 to 0.52.2
  • Updated local vendor assets and generated wwwroot output
  • Updated resource manifest version metadata, CDN URLs, and SRI hashes
  • Updated Monaco-related editor integration for compatibility with newer Monaco APIs
  • Resolved merge conflicts and rebuilt the affected frontend assets

Why Monaco was updated to 0.52.2 instead of 0.55.1

Monaco 0.55.1 is newer, but it introduces a different worker/module architecture that is not compatible with OrchardCore’s current AMD-based Monaco integration. In practice, that caused runtime failures in the admin editor, including worker loading issues and missing language-service handlers.

Monaco 0.52.2 is the highest version that preserves the older AMD-compatible structure OrchardCore expects, while still remediating the security concern that triggered this work.

Specifically:

  • The original issue came from Monaco 0.46.0 bundling DOMPurify 3.0.5
  • Monaco 0.52.2 upgrades the bundled DOMPurify to 3.1.7
  • This removes the vulnerable DOMPurify version without breaking OrchardCore’s Monaco-based admin editors
  • Monaco 0.55.1 was evaluated, but it caused editor worker/runtime regressions and was therefore not adopted

Resource/CDN updates

This PR also updates the related OrchardCore resource definitions so the library metadata stays accurate:

  • jQuery UI CDN updated to 1.14.2
  • Vue 2 CDN updated to 2.7.16
  • SRI hashes refreshed for the updated CDN-hosted jQuery UI and Vue 2 assets

Monaco is served from local OrchardCore assets rather than a CDN, so there is no Monaco CDN/SRI entry to update in the resource manifest.

Result

This change remediates the vulnerable client-side library finding while preserving working OrchardCore admin editor behavior.

I reviewed comment from #15666 and ensure that there is no console errors on the UI such as Templates editor UI.

MikeAlhayek and others added 3 commits June 2, 2026 13:01
Upgrade jQuery UI 1.12.1 to 1.14.2, Vue 2.6.14 to 2.7.16, and
Monaco Editor 0.46.0 to 0.52.2 to address medium-severity findings
from the 2026 penetration test (vulnerable client-side libraries).

- jQuery UI 1.14.2: refreshed vendor files, CDN URLs and SRI hashes
- Vue 2.7.16: updated npm alias, vendor copy, CDN URLs and SRI hashes
- Monaco Editor 0.52.2: upgrades bundled DOMPurify from 3.0.5 to 3.1.7
- Applied KeyCode.KEY_S -> KeyCode.KeyS rename (breaking in Monaco 0.47+)
- Fixed Worker URL resolution for multi-tenant paths (prepend origin)
- Updated Assets.json copy paths and documentation references

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…rdCMS/OrchardCore into ma/update-client-libraries

# Conflicts:
#	src/OrchardCore.Modules/OrchardCore.Liquid/Assets/package.json
#	src/OrchardCore.Modules/OrchardCore.Resources/Assets/package.json
#	src/OrchardCore.Modules/OrchardCore.Resources/ResourceManagementOptionsConfiguration.cs
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/base/browser/ui/codicons/codicon/codicon.ttf
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/base/worker/workerMain.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/abap/abap.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/apex/apex.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/azcli/azcli.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/bat/bat.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/bicep/bicep.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/cameligo/cameligo.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/clojure/clojure.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/coffee/coffee.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/cpp/cpp.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/csharp/csharp.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/csp/csp.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/cypher/cypher.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/dart/dart.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/dockerfile/dockerfile.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/ecl/ecl.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/elixir/elixir.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/flow9/flow9.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/freemarker2/freemarker2.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/fsharp/fsharp.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/go/go.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/graphql/graphql.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/handlebars/handlebars.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/hcl/hcl.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/html/html.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/ini/ini.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/java/java.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/javascript/javascript.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/julia/julia.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/kotlin/kotlin.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/less/less.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/lexon/lexon.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/liquid/liquid.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/lua/lua.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/m3/m3.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/markdown/markdown.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/mdx/mdx.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/mips/mips.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/msdax/msdax.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/mysql/mysql.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/objective-c/objective-c.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/pascal/pascal.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/pascaligo/pascaligo.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/perl/perl.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/pgsql/pgsql.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/php/php.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/pla/pla.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/postiats/postiats.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/powerquery/powerquery.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/powershell/powershell.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/pug/pug.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/python/python.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/qsharp/qsharp.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/r/r.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/razor/razor.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/redis/redis.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/redshift/redshift.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/restructuredtext/restructuredtext.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/ruby/ruby.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/rust/rust.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/sb/sb.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/scala/scala.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/scheme/scheme.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/shell/shell.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/solidity/solidity.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/sophia/sophia.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/sparql/sparql.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/sql/sql.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/st/st.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/swift/swift.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/systemverilog/systemverilog.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/tcl/tcl.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/twig/twig.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/typescript/typescript.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/vb/vb.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/xml/xml.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/basic-languages/yaml/yaml.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/css-CaeNmE3S.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/editor/editor.main.css
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/editor/editor.main.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/language/css/cssMode.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/language/css/cssWorker.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/language/html/htmlMode.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/language/html/htmlWorker.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/language/json/jsonMode.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/language/json/jsonWorker.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/language/typescript/tsMode.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/language/typescript/tsWorker.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/loader.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/protobuf-BmtuEB1A.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/scss-C1cmLt9V.js
#	src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/vs/wgsl-BhLXMOR0.js
#	src/docs/reference/modules/Resources/README.md
#	yarn.lock
@MikeAlhayek MikeAlhayek requested a review from agriffard June 2, 2026 21:20
@Skrypt
Copy link
Copy Markdown
Contributor

Skrypt commented Jun 3, 2026

We need to refactor the Monaco Editor in OC. Probably with ESM.

@MikeAlhayek
Copy link
Copy Markdown
Member Author

MikeAlhayek commented Jun 3, 2026

We need to refactor the Monaco Editor in OC. Probably with ESM.

@Skrypt I think that would be required to upgrade to 0.55.1 which is outside the scope of this PR. This PR is to fix the vulnerability found in the packages but keep things as is.

@Skrypt
Copy link
Copy Markdown
Contributor

Skrypt commented Jun 3, 2026

We don't have functional tests much to rely on to make sure these still work. I guess that we need to trust that nothing is broken. Merge it but beware regressions. 😉

@MikeAlhayek
Copy link
Copy Markdown
Member Author

Yeah. I poked around to make sure nothing is broken but feel free to test it as well.

@gvkries
Copy link
Copy Markdown
Member

gvkries commented Jun 4, 2026

Some time ago I tried to update Monaco to v55, but as far as I remember, I couldn't get our Liquid functionality running correctly as before. So I stopped working on it.

@MikeAlhayek
Copy link
Copy Markdown
Member Author

@gvkries provably because of the loader. This PR upgrades it to 0.52.2 which is the last version before they change how the loader work. 0.52.2 is the latest compatible version with out the vulnerability.

If you can, please test drive it to see if you can repo the issue you had when you tried to upgrade it then

@gvkries
Copy link
Copy Markdown
Member

gvkries commented Jun 4, 2026

I think you're right, this version is from before the problematic changes. I just did a quick check and the Liquid Intellisense worked as expected.

@MikeAlhayek MikeAlhayek merged commit 504d2fb into main Jun 4, 2026
13 checks passed
@MikeAlhayek MikeAlhayek deleted the ma/update-client-libraries branch June 4, 2026 19:48
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.

4 participants