chore(deps): clear all critical + high npm advisories and CVE-2026-67434 - #756
Merged
Conversation
npm audit on `development` (measured with --package-lock-only; the Dependabot alert count is computed on the stale default branch `main` and is meaningless here): before: 1 critical, 2 high, 7 moderate, 5 low (15) after: 0 critical, 0 high, 5 moderate, 5 low (10) Bumps: - vitest + @vitest/coverage-v8 1.6.1 -> ^3.2.7 (same version on both). Clears the CRITICAL Vitest UI arbitrary file read/exec (<=3.2.5) and drags vite 5.4.21 -> 7.3.6, clearing the HIGH `server.fs.deny` bypass (GHSA-fx2h-pf6j-xcff, <=6.4.2). 3.2.7 is outside every current advisory range and is one major less disruptive than vitest 4. - @cyclonedx/cyclonedx-npm 4.2.1 -> ^6.0.0. Clears the HIGH shell injection via --workspace (2.1.0 - 4.2.1). - @vitejs/plugin-vue 5.2.4 -> ^6.0.0. Not cosmetic and not optional: v5 declares `peer vite ^5.0.0 || ^6.0.0`, so once vite hoisted to 7.3.6 the tree carried an invalid peer (`npm ls` ELSPROBLEMS) on a plugin vitest.config.js actually requires at line 40. v6 declares `^5 || ^6 || ^7 || ^8`, which makes the single hoisted vite valid for every consumer. Removes the blanket `minimatch: ^3.1.2` override. test-exclude@7, pulled in by @vitest/coverage-v8 3.x, does `const { minimatch } = require(...)` — the v10 named export — so forcing v3's bare-function export yields `TypeError: minimatch is not a function`. Deleted rather than widened to `>=`, which would force v10 everywhere. Verified nothing in the tree now resolves below 3.1.2 (3.1.5, 9.0.9, 10.2.6 present). composer: squizlabs/php_codesniffer 3.13.5 -> 3.13.6 for CVE-2026-67434 / GHSA-hmqg-cxww-wqhq (OS command injection, <3.13.6). Advisory published 2026-08-05, i.e. after this branch was last measured clean. All lockfile operations were done with `npx npm@10.8.2` to match CI (node 20 / npm 10.8.2); local npm 11 prunes optional entries CI needs.
rubenvdlinde
requested review from
SudoThijn,
WilcoLouwerse,
bbrands02,
remko48 and
rjzondervan
as code owners
August 6, 2026 11:58
Contributor
Quality Report — ConductionNL/procest @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| check-manifest | ✅ | ||||
| check-vue3-compile | ✅ | ||||
| test-l10n | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 552/552 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ✅ | ||||
| Hydra gates | ✅ |
Quality workflow — 2026-08-06 12:24 UTC
Download the full PDF report from the workflow artifacts.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this clears
npm audit --package-lock-onlyondevelopment(the Dependabot alert count is computed on the stale default branchmainand is meaningless for this branch):composer audit --locked: 1 advisory → 0.What was bumped
vitest^3.2.7<=3.2.5)@vitest/coverage-v8^3.2.7@cyclonedx/cyclonedx-npm^6.0.0--workspace(2.1.0 - 4.2.1)vite(transitive)server.fs.denybypass, GHSA-fx2h-pf6j-xcff (<=6.4.2)@vitejs/plugin-vue^6.0.0squizlabs/php_codesniffer<3.13.6)3.2.7 rather than vitest 4: it is outside every current advisory range and one major less disruptive.
Why
@vitejs/plugin-vuehad to move tooThis one is not cosmetic and not optional.
@vitejs/plugin-vue@5declarespeer vite ^5.0.0 || ^6.0.0. Once the vitest bump let npm hoist a singlevite@7.3.6(which@nextcloud/vue→vue-router@5.2.0independently requires at^7.3.0 || ^8.0.0), that peer became unsatisfiable andnpm lsreported ELSPROBLEMS /invalid: vite@7.3.6— on a plugin thatvitest.config.jsgenuinely requires at line 40.@vitejs/plugin-vue@6declares^5 || ^6 || ^7 || ^8, which makes the single hoisted vite valid for every consumer. Verified after the bump: novite-related entries innpm ls --all.Removed the blanket
minimatch: ^3.1.2overridetest-exclude@7(pulled in by@vitest/coverage-v83.x) doesconst { minimatch } = require('minimatch')— the v10 named export. Forcing v3's bare-function export yieldsTypeError: minimatch is not a function. Deleted the line rather than widening it to>=, which would force v10 on everything. Confirmed nothing in the tree now resolves below 3.1.2: present versions are 3.1.5, 9.0.9, 10.2.6.Verification — every exit code, measured locally
All lockfile operations used
npx --yes npm@10.8.2to match CI (node 20 / npm 10.8.2). Local npm 11 prunes optional entries CI's npm 10 demands, so a barenpm installwould have produced a lockfile that failsnpm ciin CI.npm@10.8.2 install --no-audit --no-fundnpm@10.8.2 ci --no-audit --no-fundcid304cad4…→d304cad4…unchanged (npm-version hazard check)npm run test:unit(vitest)npm run test:coveragebash tests/coverage-ratchet.sh vitest coverage-vitest/coverage-summary.jsonvitest: 1.03); 9.87% > 1.03% → ratchets upnpm run buildjs/npm run lintnpm run check:manifest(CI frontend-check leg)npm run check:vue3-compile(CI frontend-check leg)npm run test:l10n(CI frontend-check leg)npx @cyclonedx/cyclonedx-npm --package-lock-only --ignore-npm-errors --output-file … --spec-version 1.5 --omit devspecVersion 1.5, 567 components, CLI reports6.0.0composer audit --lockedvendor/bin/phpcs --versioncomposer phpcsphpcs positive control
A green checker that cannot fail is not evidence. Dropped a deliberately non-conforming
lib/ZzPhpcsProbe.php, rancomposer phpcs: rc=2, 19 errors and 2 warnings reported against the probe. Deleted the probe, re-ran: back to rc=1 (the pre-existing error below).git statusafterwards shows onlypackage.json,package-lock.json,composer.lock.Pre-existing failure, not caused by this PR
composer phpcsexits 1 on a single error:I did not have a phpcs baseline for this repo (no
vendor/in a fresh worktree), so rather than assume, I A/B'd it: revertedcomposer.lockto the base commit, reinstalled to get phpcs 3.13.5, and re-ran — same rc=1, same single error. So the 3.13.6 bump did not introduce it. Deliberately not fixed here; a dependency PR is the wrong place for a named-parameters refactor.Deliberately not bumped
moderateadvisories —dompurify,fast-xml-parser,@toast-ui/editor,@nextcloud/eslint-plugin,@conduction/nextcloud-vue. Out of scope for a critical+high sweep;@conduction/nextcloud-vuein particular is pinned to2.2.0-vue3.3and moving it is a separate, behaviour-affecting change.lowadvisories — all one chain undernode-polyfill-webpack-plugin; clearing them needs a major bump of that package, which touches the webpack build.Licence check (read from the lockfile, not the manifest)
vitest3.2.7 MIT ·@vitest/coverage-v83.2.7 MIT ·vite7.3.6 MIT ·@vitejs/plugin-vue6.0.8 MIT ·@cyclonedx/cyclonedx-npm6.0.0 Apache-2.0. Cross-checked against the installed tree.vue3-apexchartsis 1.8.0 / MIT andapexchartsis 4.7.0 / MIT — both unchanged from the base commit, i.e.vue3-apexchartshas not drifted to 1.9.0, which went proprietary.