fix(deps): rustls-webpki 0.103.16, webpki-root-certs 1.0.10 and vite 6.4.4 (RUSTSEC-2026-0382/0383, launch-editor) #485

Open
maximus wants to merge 3 commits from issue-484-security-bumps into main
Owner

Refs #484
Resolves #483

Ce que change cette PR

Deux montées de version dans les locks, et aucune ligne de code de l'application. Décision de Max (2026-10-20) : une seule PR pour #484 et #483, un commit par issue.

  • src-tauri/Cargo.lock : rustls-webpki 0.103.15 → 0.103.16 et webpki-root-certs 1.0.6 → 1.0.10 (RUSTSEC-2026-0382 et RUSTSEC-2026-0383), commit 4a04716.
  • package-lock.json : vite 6.4.3 → 6.4.4 (GHSA-587h-7wmj-h5pm, GHSA-698v-4r3x-3vcv, GHSA-r825-w8mm-5pxw, dans launch-editor), commit e66ae08. package.json reste à ^6.4.3 (décision de Max : lock seulement).
  • CHANGELOG EN et FR : une section Security / Sécurité créée sous la section non publiée, avec deux puces.
  • CLAUDE.md et docs/architecture.md : la lecture datée « npm audit à 0 » passe au 2026-10-20 (#483). Seuls la date et le lien changent, « (#358 en vient) » est gardé.

Ce que changent les nouvelles versions (lu, zone Dépendances de REVIEW.md)

  • rustls-webpki 0.103.16
    • Ce qui change : huit clés publiques d'intermédiaires emSign déclarés non fiables (src/data/distrusted), une erreur CertDistrusted, et le refus d'une chaîne qui les contient. Dépendances inchangées.
    • Où il agit : sous Linux, rustls-platform-verifier 0.6.2 valide la chaîne de l'updater par webpki (others.rs, racines du système). Sous Windows, windows.rs ne l'utilise pas : c'est l'API du système qui valide.
    • Limites de l'exposition : les paquets de mise à jour restent vérifiés par leur signature. Les appels de l'app (licence, authentification, cours, rétroaction) passent par reqwest 0.12 avec la TLS du système, non concernés.
  • webpki-root-certs 1.0.10
    • Ce qui change : la liste passe de 136 à 120 racines, et rust-version de 1.64 à 1.71.
    • Pourquoi c'est sans effet : c'est une dépendance de rustls-platform-verifier pour wasm32 seulement (et de développement). cargo tree --locked -i webpki-root-certs est vide pour x86_64-unknown-linux-gnu comme pour x86_64-pc-windows-msvc.
  • vite 6.4.4
    • Le paquet publié compte 35 fichiers, comme la 6.4.3, et seul dist/node change.
    • Le gros morceau du serveur de développement change de 671 lignes ajoutées et 483 retirées :
      • le launch-editor embarqué (escapeCmdArgs, existsSync, commande de lancement) ;
      • le contrôle d'accès du middleware de transformation : checkServingAccess et deniedServingAccessForTransform sont retirés au profit du contrôle au chargement, déjà présent ;
      • safeModulePaths avec cleanUrl.
    • Trois morceaux sont renommés. Dans le manifeste, seule sa dépendance de développement launch-editor-middleware change (^2.14.1 → ^2.14.2).
    • Aucune ligne ajoutée n'utilise process.env, child_process ni le réseau. Tout ce code sert au serveur de développement (vite dev, tauri dev).

Preuves

Contrôle main (45d8493) Branche
cargo-audit 0.22.2 (binaire de la CI, sha256 égal au digest GitHub), lancé depuis la racine code 1 : 2 vulnérabilités (0382, 0383), 18 avertissements autorisés code 0 : aucune vulnérabilité, 18 avertissements autorisés
Mutation : rustls-webpki remis en 0.103.15 (copie du lock) code 1 : RUSTSEC-2026-0382 seule
Mutation : webpki-root-certs remis en 1.0.6 (copie du lock) code 1 : RUSTSEC-2026-0383 seule
Cargo.lock git diff --numstat : 4 4 ; deux blocs changent de version, aucun ajouté ni retiré, même source crates.io ; cargo metadata --locked passe
Gardes de check-rust (texte exact de l'étape, bash -e -o pipefail) « Suppression guard: 2 checks, exit 0 » ; « windows-sys pinning: 9 checks, exit 0 »
cargo check --locked / cargo test --locked passe ; 269 réussis, 1 ignoré
cargo xwin check --locked (Windows) code 0 (témoin) code 0 (rustls-webpki 0.103.16 vérifié)
npm audit code 1 : 3 avis launch-editor, 1 haute code 0 : 0 vulnérabilité
Mutation : lock remis en vite 6.4.3 npm audit code 1, les 3 avis
package-lock.json git diff --numstat : 3 3 (version, resolved sur registry.npmjs.org, integrity égale à npm view) ; package.json inchangé ; clés de .packages identiques
npm ci passe sous npm 11.21.0 et npm 10.9.4, vite 6.4.4 installé ; npm@11.21.0 install --package-lock-only laisse le lock identique à l'octet (même témoin sur la base)
Build dist/ de référence identique, sauf les deux copies des CHANGELOG
vitest sonde rouge, code 1 ; 156 fichiers, 2560 tests verts

Méthode du lock npm. npm update vite gardait la 6.4.3 (« up to date »). npm install vite@^6.4.3 prenait bien la 6.4.4, mais réécrivait la borne en ^6.4.4 dans package.json et à la racine du lock. Seul son bloc node_modules/vite a donc été gardé : 3 lignes.

Niveau

Normal selon REVIEW.md :

  • aucun manifeste touché (package.json et Cargo.toml inchangés) ;
  • dans les locks, seulement des montées de version de paquets déjà présents, aucun ajouté ni retiré, même source de registre (décision de Max du 2026-10-17) ;
  • CLAUDE.md et docs/architecture.md, au moins normaux ;
  • CHANGELOG, bas.

Post-merge checklist (hence Refs, not a closing keyword)

  1. audit.yml par workflow_dispatch sur main : run vert (aucune vulnérabilité, 18 avertissements autorisés), numéro du run cité sur #484.
  2. #484 est fermée à la main ensuite, avec ce run.
  3. Release suivante, à reporter dans STATE.md (« Vérifications dues à la release suivante ») :
    • le cycle réel de mise à jour depuis la v0.17.2 télécharge le paquet et sa signature avec l'updater de la v0.17.2, donc avec l'ancien rustls-webpki ;
    • seul le check() final de la nouvelle version passe par la 0.103.16, et seul Linux valide la chaîne avec lui ;
    • le chemin de téléchargement avec le correctif s'exerce au premier cycle qui part de la release qui l'embarque (#463).

#483 se ferme au merge.

🤖 Generated with Claude Code

Refs #484 Resolves #483 ## Ce que change cette PR Deux montées de version dans les locks, et aucune ligne de code de l'application. Décision de Max (2026-10-20) : une seule PR pour #484 et #483, un commit par issue. - `src-tauri/Cargo.lock` : `rustls-webpki` 0.103.15 → 0.103.16 et `webpki-root-certs` 1.0.6 → 1.0.10 (RUSTSEC-2026-0382 et RUSTSEC-2026-0383), commit `4a04716`. - `package-lock.json` : `vite` 6.4.3 → 6.4.4 (GHSA-587h-7wmj-h5pm, GHSA-698v-4r3x-3vcv, GHSA-r825-w8mm-5pxw, dans `launch-editor`), commit `e66ae08`. `package.json` reste à `^6.4.3` (décision de Max : lock seulement). - CHANGELOG EN et FR : une section Security / Sécurité créée sous la section non publiée, avec deux puces. - `CLAUDE.md` et `docs/architecture.md` : la lecture datée « `npm audit` à 0 » passe au 2026-10-20 (#483). Seuls la date et le lien changent, « (#358 en vient) » est gardé. ## Ce que changent les nouvelles versions (lu, zone Dépendances de `REVIEW.md`) - **`rustls-webpki` 0.103.16** - Ce qui change : huit clés publiques d'intermédiaires emSign déclarés non fiables (`src/data/distrusted`), une erreur `CertDistrusted`, et le refus d'une chaîne qui les contient. Dépendances inchangées. - Où il agit : sous Linux, `rustls-platform-verifier` 0.6.2 valide la chaîne de l'updater par `webpki` (`others.rs`, racines du système). Sous Windows, `windows.rs` ne l'utilise pas : c'est l'API du système qui valide. - Limites de l'exposition : les paquets de mise à jour restent vérifiés par leur signature. Les appels de l'app (licence, authentification, cours, rétroaction) passent par `reqwest` 0.12 avec la TLS du système, non concernés. - **`webpki-root-certs` 1.0.10** - Ce qui change : la liste passe de 136 à 120 racines, et `rust-version` de 1.64 à 1.71. - Pourquoi c'est sans effet : c'est une dépendance de `rustls-platform-verifier` pour `wasm32` seulement (et de développement). `cargo tree --locked -i webpki-root-certs` est vide pour `x86_64-unknown-linux-gnu` comme pour `x86_64-pc-windows-msvc`. - **`vite` 6.4.4** - Le paquet publié compte 35 fichiers, comme la 6.4.3, et seul `dist/node` change. - Le gros morceau du serveur de développement change de 671 lignes ajoutées et 483 retirées : - le `launch-editor` embarqué (`escapeCmdArgs`, `existsSync`, commande de lancement) ; - le contrôle d'accès du middleware de transformation : `checkServingAccess` et `deniedServingAccessForTransform` sont retirés au profit du contrôle au chargement, déjà présent ; - `safeModulePaths` avec `cleanUrl`. - Trois morceaux sont renommés. Dans le manifeste, seule sa dépendance de développement `launch-editor-middleware` change (^2.14.1 → ^2.14.2). - Aucune ligne ajoutée n'utilise `process.env`, `child_process` ni le réseau. Tout ce code sert au serveur de développement (`vite dev`, `tauri dev`). ## Preuves | Contrôle | `main` (`45d8493`) | Branche | |---|---|---| | cargo-audit 0.22.2 (binaire de la CI, sha256 égal au digest GitHub), lancé depuis la racine | code 1 : 2 vulnérabilités (0382, 0383), 18 avertissements autorisés | code 0 : aucune vulnérabilité, 18 avertissements autorisés | | Mutation : `rustls-webpki` remis en 0.103.15 (copie du lock) | | code 1 : RUSTSEC-2026-0382 seule | | Mutation : `webpki-root-certs` remis en 1.0.6 (copie du lock) | | code 1 : RUSTSEC-2026-0383 seule | | `Cargo.lock` | | `git diff --numstat` : `4 4` ; deux blocs changent de version, aucun ajouté ni retiré, même source crates.io ; `cargo metadata --locked` passe | | Gardes de `check-rust` (texte exact de l'étape, `bash -e -o pipefail`) | | « Suppression guard: 2 checks, exit 0 » ; « windows-sys pinning: 9 checks, exit 0 » | | `cargo check --locked` / `cargo test --locked` | | passe ; 269 réussis, 1 ignoré | | `cargo xwin check --locked` (Windows) | code 0 (témoin) | code 0 (`rustls-webpki` 0.103.16 vérifié) | | `npm audit` | code 1 : 3 avis `launch-editor`, 1 haute | code 0 : 0 vulnérabilité | | Mutation : lock remis en `vite` 6.4.3 | | `npm audit` code 1, les 3 avis | | `package-lock.json` | | `git diff --numstat` : `3 3` (version, `resolved` sur registry.npmjs.org, `integrity` égale à `npm view`) ; `package.json` inchangé ; clés de `.packages` identiques | | `npm ci` | | passe sous npm 11.21.0 et npm 10.9.4, `vite` 6.4.4 installé ; `npm@11.21.0 install --package-lock-only` laisse le lock identique à l'octet (même témoin sur la base) | | Build | `dist/` de référence | identique, sauf les deux copies des CHANGELOG | | vitest | | sonde rouge, code 1 ; 156 fichiers, 2560 tests verts | Méthode du lock npm. `npm update vite` gardait la 6.4.3 (« up to date »). `npm install vite@^6.4.3` prenait bien la 6.4.4, mais réécrivait la borne en `^6.4.4` dans `package.json` et à la racine du lock. Seul son bloc `node_modules/vite` a donc été gardé : 3 lignes. ## Niveau Normal selon `REVIEW.md` : - aucun manifeste touché (`package.json` et `Cargo.toml` inchangés) ; - dans les locks, seulement des montées de version de paquets déjà présents, aucun ajouté ni retiré, même source de registre (décision de Max du 2026-10-17) ; - `CLAUDE.md` et `docs/architecture.md`, au moins normaux ; - CHANGELOG, bas. ## Post-merge checklist (hence `Refs`, not a closing keyword) 1. `audit.yml` par `workflow_dispatch` sur `main` : run vert (aucune vulnérabilité, 18 avertissements autorisés), numéro du run cité sur #484. 2. #484 est fermée à la main ensuite, avec ce run. 3. Release suivante, à reporter dans `STATE.md` (« Vérifications dues à la release suivante ») : - le cycle réel de mise à jour depuis la v0.17.2 télécharge le paquet et sa signature avec l'updater de la v0.17.2, donc avec l'ancien `rustls-webpki` ; - seul le `check()` final de la nouvelle version passe par la 0.103.16, et seul Linux valide la chaîne avec lui ; - le chemin de téléchargement avec le correctif s'exerce au premier cycle qui part de la release qui l'embarque (#463). #483 se ferme au merge. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
maximus added 2 commits 2026-10-21 01:34:40 +00:00
Refs #484

cargo update --precise for the two crates only: Cargo.lock moves four
lines (version and checksum of each), no package added or removed, same
crates.io source, Cargo.toml untouched. cargo-audit 0.22.2 (the CI
binary) goes from two vulnerabilities to none, with the same 18 allowed
warnings. rustls-webpki validates the updater's certificate chain on
Linux only; webpki-root-certs is compiled for neither shipped target.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix(deps): vite 6.4.4 for the launch-editor advisories (#483)
All checks were successful
PR Check — Frontend / frontend (pull_request) Successful in 1m59s
PR Check — Rust / rust (pull_request) Successful in 4m23s
e66ae08b13
Resolves #483

vite moves from 6.4.3 to 6.4.4 in package-lock.json only; package.json
keeps ^6.4.3 (decision of Max). The node_modules/vite stanza changes its
version, resolved URL and integrity (equal to npm view), nothing else:
npm update kept 6.4.3, and npm install vite@^6.4.3 resolved 6.4.4 but
rewrote the range to ^6.4.4, so only its vite stanza was kept. npm ci
passes under npm 11.21.0 and 10.9.4 and installs 6.4.4; npm 11.21.0
leaves the lock byte-identical. npm audit goes from the three
launch-editor advisories to none; the build output equals main's except
the two changelog copies. The dated npm audit reading in CLAUDE.md and
docs/architecture.md moves to 2026-10-20.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Author
Owner

CI lue sur la tête e66ae08, les deux contrôles sont verts (journaux lus, codes ANSI retirés).

  • check-frontend (run 604) : npm ci affiche found 0 vulnerabilities, et vitest donne 156 fichiers et 2560 tests verts.
  • check-rust (run 605) :
    • « Suppression guard: 2 checks, exit 0 » et « windows-sys pinning: 9 checks, exit 0 » ;
    • cargo test : 269 réussis, 1 ignoré ;
    • l'étape cargo audit informative porte sur 663 crates et rend 18 allowed warnings found, sans aucune ligne vulnerabilit(y|ies) found et sans RUSTSEC-2026-0382 ni -0383.

#484 et #483 passent en status:review. Une revue indépendante (/pr-review 485) reste à faire.

CI lue sur la tête `e66ae08`, les deux contrôles sont **verts** (journaux lus, codes ANSI retirés). - `check-frontend` (run 604) : `npm ci` affiche `found 0 vulnerabilities`, et vitest donne 156 fichiers et 2560 tests verts. - `check-rust` (run 605) : - « Suppression guard: 2 checks, exit 0 » et « windows-sys pinning: 9 checks, exit 0 » ; - `cargo test` : 269 réussis, 1 ignoré ; - l'étape `cargo audit` informative porte sur 663 crates et rend `18 allowed warnings found`, sans aucune ligne `vulnerabilit(y|ies) found` et sans RUSTSEC-2026-0382 ni -0383. #484 et #483 passent en `status:review`. Une revue indépendante (`/pr-review 485`) reste à faire.
Author
Owner

Niveau : normal

Verdict : APPROVE

Résumé. Les deux montées de version Rust et celle de vite sont exactement ce que la PR annonce : quatre lignes de Cargo.lock, trois de package-lock.json, mêmes origines de registre, aucun paquet ajouté ni retiré. Rejouées hors dépôt, les preuves tiennent : audit rouge sur main et vert sur la tête, chaque avis revient avec sa version d'origine, les phrases d'exposition du CHANGELOG sont confirmées par cargo tree et par le source, et le build est identique à celui de main hors des deux CHANGELOG. Quatre constats non bloquants : trois viennent de publications postérieures à l'ouverture de la PR (avis npm et vite 6.4.5 du 2026-10-21), le quatrième d'un ADR antérieur.

Calcul du niveau : package-lock.json et src-tauri/Cargo.lock ne remplissent pas leur ligne du tableau Haut (aucune clé node_modules/<nom> ni bloc [[package]] ajouté ou retiré, resolved et source inchangés en hôte et en schéma, integrity et checksum changés avec une nouvelle version) ; CLAUDE.md et docs/architecture.md restent au moins normaux ; les CHANGELOG sont bas.

Rejoué par la revue

Copies git archive de 45d8493 et de e66ae08 dans /tmp/pr485-review, hors dépôt, supprimées en fin de revue.

Contrôle Résultat
Lock Cargo R1 et R2 (ci-dessous) appliquées ensemble redonnent le lock de main à l'octet : le diff se limite aux deux paires version et checksum. Checksums de 0.103.16 et 1.0.10 égaux à l'index crates.io et au sha256 des .crate. build = false pour les deux crates. cargo metadata --locked passe.
Source de rustls-webpki 0.103.15 → 0.103.16 Cargo.toml du crate modifié par sa seule version (dépendances, features et MSRV identiques). Trois fichiers de src/ modifiés et huit .der ajoutés : variante CertDistrusted (enum #[non_exhaustive]), huit SPKI emSign en include_bytes!, refus d'un chemin qui en contient un, maillon ou ancre, plus un test. Rien d'autre.
webpki-root-certs 1.0.6 → 1.0.10 136 puis 120 racines, emSign ECC Root CA - G3 retirée ; dépendances identiques, MSRV 1.64 → 1.71.
cargo-audit 0.22.2 (asset officiel, sha256 égal au digest GitHub ; la CI installe le build musl de la même version), base d'avis clonée à neuf (1348 avis), lancé depuis la racine main : code 1, RUSTSEC-2026-0382 et RUSTSEC-2026-0383. Tête : code 0, 663 crates, 18 avertissements autorisés.
R1 : rustls-webpki remis en 0.103.15 (copie du lock) code 1, RUSTSEC-2026-0382 seule
R2 : webpki-root-certs remis en 1.0.6 (copie du lock) code 1, RUSTSEC-2026-0383 seule
R3 : lock de la tête audité hors de la racine, sans .cargo/audit.toml code 1 sur RUSTSEC-2023-0071 (rsa) seule : le vert de la tête ne doit rien à une suppression, la liste n'admet que rsa (règle 1 de l'ADR 0018 respectée)
cargo tree --locked -i <crate> --target <triple> -e normal Linux : rustls-webpki par rustls (← hyper-rustls et tokio-rustls ← reqwest 0.13.2 ← tauri-plugin-updater) et par rustls-platform-verifier. Windows : par rustls seulement. webpki-root-certs : rien pour les deux cibles.
Source de la vérification TLS rustls-platform-verifier 0.6.2 : others.rs (Linux) bâtit un WebPkiServerVerifier sur les racines du système, webpki-root-certs n'y sert que sous cfg(target_arch = "wasm32") ; windows.rs passe par CertGetCertificateChain et CertVerifyCertificateChainPolicy. reqwest 0.13.2 prend Verifier::new faute de racine ajoutée, tauri-plugin-updater 2.10.0 n'en ajoute pas, et tauri.conf.json n'a aucune option dangerous*. Le reqwest 0.12 de l'app est déclaré features = ["json"], donc TLS du système. Les phrases d'exposition des deux CHANGELOG tiennent.
Non-régression de l'updater La chaîne de git.lacompagniemaximus.com (Let's Encrypt YR2 → ISRG Root YR → ISRG Root X1) ne passe par aucun intermédiaire emSign : la défiance ajoutée par la 0.103.16 ne touche pas l'endpoint de latest.json.
Paquet vite 6.4.4 integrity du lock égale au registre et au sha512 du tarball téléchargé. Provenance SLSA : vitejs/vite, tag v6.4.4 (commit 5f0d9a4), .github/workflows/publish.yml, trusted publishing comme la 6.4.3. dependencies, optionalDependencies, peerDependencies, engines et bin identiques à la 6.4.3. npm audit signatures sur la tête : 176 signatures de registre et 72 attestations vérifiées.
Diff du paquet vite 6.4.3 → 6.4.4, renommages du bundler neutralisés Seul le gros morceau change (24 blocs) ; cli.js et index.js ne diffèrent que par les noms des morceaux. Contenu : launch-editor 2.14.2 et shell-quote embarqués, checkServingAccess et deniedServingAccessForTransform retirés au profit du contrôle au chargement, getHtmlFilename et devHtmlHook, safeModulePaths sur l'id résolu dans vite:import-analysis. Tout relève du serveur de développement, conformément aux quatre entrées du CHANGELOG amont de la 6.4.4.
Build npm ci (npm 10.9.4) puis npm run build sur main (vite 6.4.3) et sur la tête (vite 6.4.4) : dist/ identique fichier par fichier, sauf CHANGELOG.md et CHANGELOG.fr.md.
npx npm@11.21.0 install --package-lock-only sur la tête lock identique à l'octet
R4 : vite remis en 6.4.3 (copie du lock) le lock redevient celui de main à l'octet ; npm audit code 1, vite en haute avec cinq avis (constat 2)
Windows cargo xwin check --manifest-path src-tauri/Cargo.toml --locked --target x86_64-pc-windows-msvc (cargo-xwin déjà installé), témoin main puis tête : code 0 et code 0. Sur la tête, rustls-webpki v0.103.16, rustls, tokio-rustls, rustls-platform-verifier, hyper-rustls, reqwest 0.13.2 et tauri-plugin-updater revérifiés.
CI, journaux lus (ANSI retirés) Run 605 (check-rust, e66ae08) : Checking rustls-webpki v0.103.16, « Suppression guard: 2 checks, exit 0 », « windows-sys pinning: 9 checks, exit 0 », 269 réussis et 1 ignoré, audit sur 663 crates avec 18 allowed warnings found et aucune ligne `vulnerabilit(y

La suite vitest n'a pas été rejouée : le run 604 en fait foi, et la PR ne touche aucun code.

Constats non bloquants

  1. npm audit n'est plus à 0, sur la tête comme sur main. Deux avis modérés publiés le 2026-10-21 entre 19:48 et 19:54 UTC, après le run 604, visent @vitest/mocker 4.1.11, et vitest 4.1.11 par lui : GHSA-qxg6-89mg-rqv8 (« Code injection via unauthenticated manual mock registration ») et GHSA-xp26-3454-mjgp (« Windows backslash traversal bypasses the @vitest/mocker redirect allowlist fix »). Correctif en 4.1.12 (publiée le 2026-10-15), dans la plage ^4.1.9 de package.json. Hors du périmètre de la PR. La phrase « npm audit à 0 au 2026-10-20 » de CLAUDE.md et de docs/architecture.md reste exacte comme constat daté, mais sera dépassée au merge, et le npm ci du prochain check-frontend imprimera deux vulnérabilités. Suite : une issue pour vitest 4.1.12 (lock à générer par npx npm@11, npm 10 plantant sur les montées de vitest), ou le prochain scan du Défenseur.
  2. La 6.4.4 corrige cinq avis de vite, pas trois. GHSA-rq7h-c2jc-7f22 (modéré, « Files outside server.fs.allow could be served when project paths match system paths on non-Windows machine ») et GHSA-9jrq-w75r-8gcw (faible, « Cross origin script execution through Vite custom middleware »), publiés le 2026-10-21 vers 16:48 UTC, visent <= 6.4.3 avec la 6.4.4 pour correctif ; R4 les fait reparaître. Tous deux concernent aussi le serveur de développement. Les puces vite des deux CHANGELOG peuvent les nommer, en parlant du serveur de développement plutôt que de la seule fonction « ouvrir dans l'éditeur ».
  3. vite 6.4.5 est publiée (2026-10-21, 05:35 UTC, après l'ouverture de la PR), avec une seule entrée : « check server.fs after stripping query as well ». Aucun avis publié ne vise la 6.4.4 à l'heure de cette revue. Au choix de Max : garder la 6.4.4, un avis pouvant suivre, ou passer à la 6.4.5 par la même méthode (trois lignes du lock).
  4. ADR 0018, section « Liens » : la ligne de l'ADR 0009 présente la récupération de cours via reqwest comme « l'un des deux chemins qui rendent rustls-webpki atteignable ». C'est faux : le reqwest 0.12 de l'app passe par la TLS du système, et c'était déjà le cas le 2026-07-27 (lock de 81804bb). La puce de cette PR dit juste ; l'ADR est à corriger dans une PR de documentation.

Fermeture des issues (timeline)

  • #483 : pull_ref de #485 en closes, et Resolves #483 dans le message de e66ae08 : elle se ferme au merge, par l'API comme en avance rapide locale.
  • #484 : pull_ref en ref_action: none, Refs #484 dans 4a04716, aucun mot-clé de fermeture dans le corps ni dans les commentaires : elle reste ouverte, conformément à la checklist post-merge.

Commits au format conventionnel, un par issue, comme décidé.

Actions faites

  • #483 et #484 : status:review → status:approved.
  • Copies hors dépôt supprimées (/tmp/pr485-review).
Niveau : normal **Verdict : APPROVE** **Résumé.** Les deux montées de version Rust et celle de `vite` sont exactement ce que la PR annonce : quatre lignes de `Cargo.lock`, trois de `package-lock.json`, mêmes origines de registre, aucun paquet ajouté ni retiré. Rejouées hors dépôt, les preuves tiennent : audit rouge sur `main` et vert sur la tête, chaque avis revient avec sa version d'origine, les phrases d'exposition du CHANGELOG sont confirmées par `cargo tree` et par le source, et le build est identique à celui de `main` hors des deux CHANGELOG. Quatre constats non bloquants : trois viennent de publications postérieures à l'ouverture de la PR (avis npm et `vite` 6.4.5 du 2026-10-21), le quatrième d'un ADR antérieur. Calcul du niveau : `package-lock.json` et `src-tauri/Cargo.lock` ne remplissent pas leur ligne du tableau Haut (aucune clé `node_modules/<nom>` ni bloc `[[package]]` ajouté ou retiré, `resolved` et `source` inchangés en hôte et en schéma, `integrity` et `checksum` changés avec une nouvelle version) ; `CLAUDE.md` et `docs/architecture.md` restent au moins normaux ; les CHANGELOG sont bas. ### Rejoué par la revue Copies `git archive` de `45d8493` et de `e66ae08` dans `/tmp/pr485-review`, hors dépôt, supprimées en fin de revue. | Contrôle | Résultat | |---|---| | Lock Cargo | R1 et R2 (ci-dessous) appliquées ensemble redonnent le lock de `main` à l'octet : le diff se limite aux deux paires version et checksum. Checksums de 0.103.16 et 1.0.10 égaux à l'index crates.io et au sha256 des `.crate`. `build = false` pour les deux crates. `cargo metadata --locked` passe. | | Source de `rustls-webpki` 0.103.15 → 0.103.16 | `Cargo.toml` du crate modifié par sa seule version (dépendances, features et MSRV identiques). Trois fichiers de `src/` modifiés et huit `.der` ajoutés : variante `CertDistrusted` (enum `#[non_exhaustive]`), huit SPKI emSign en `include_bytes!`, refus d'un chemin qui en contient un, maillon ou ancre, plus un test. Rien d'autre. | | `webpki-root-certs` 1.0.6 → 1.0.10 | 136 puis 120 racines, `emSign ECC Root CA - G3` retirée ; dépendances identiques, MSRV 1.64 → 1.71. | | cargo-audit 0.22.2 (asset officiel, sha256 égal au digest GitHub ; la CI installe le build musl de la même version), base d'avis clonée à neuf (1348 avis), lancé depuis la racine | `main` : code 1, RUSTSEC-2026-0382 et RUSTSEC-2026-0383. Tête : code 0, 663 crates, 18 avertissements autorisés. | | R1 : `rustls-webpki` remis en 0.103.15 (copie du lock) | code 1, RUSTSEC-2026-0382 seule | | R2 : `webpki-root-certs` remis en 1.0.6 (copie du lock) | code 1, RUSTSEC-2026-0383 seule | | R3 : lock de la tête audité hors de la racine, sans `.cargo/audit.toml` | code 1 sur RUSTSEC-2023-0071 (`rsa`) seule : le vert de la tête ne doit rien à une suppression, la liste n'admet que `rsa` (règle 1 de l'ADR 0018 respectée) | | `cargo tree --locked -i <crate> --target <triple> -e normal` | Linux : `rustls-webpki` par `rustls` (← `hyper-rustls` et `tokio-rustls` ← `reqwest` 0.13.2 ← `tauri-plugin-updater`) et par `rustls-platform-verifier`. Windows : par `rustls` seulement. `webpki-root-certs` : rien pour les deux cibles. | | Source de la vérification TLS | `rustls-platform-verifier` 0.6.2 : `others.rs` (Linux) bâtit un `WebPkiServerVerifier` sur les racines du système, `webpki-root-certs` n'y sert que sous `cfg(target_arch = "wasm32")` ; `windows.rs` passe par `CertGetCertificateChain` et `CertVerifyCertificateChainPolicy`. `reqwest` 0.13.2 prend `Verifier::new` faute de racine ajoutée, `tauri-plugin-updater` 2.10.0 n'en ajoute pas, et `tauri.conf.json` n'a aucune option `dangerous*`. Le `reqwest` 0.12 de l'app est déclaré `features = ["json"]`, donc TLS du système. Les phrases d'exposition des deux CHANGELOG tiennent. | | Non-régression de l'updater | La chaîne de `git.lacompagniemaximus.com` (Let's Encrypt YR2 → ISRG Root YR → ISRG Root X1) ne passe par aucun intermédiaire emSign : la défiance ajoutée par la 0.103.16 ne touche pas l'endpoint de `latest.json`. | | Paquet `vite` 6.4.4 | `integrity` du lock égale au registre et au sha512 du tarball téléchargé. Provenance SLSA : `vitejs/vite`, tag `v6.4.4` (commit `5f0d9a4`), `.github/workflows/publish.yml`, trusted publishing comme la 6.4.3. `dependencies`, `optionalDependencies`, `peerDependencies`, `engines` et `bin` identiques à la 6.4.3. `npm audit signatures` sur la tête : 176 signatures de registre et 72 attestations vérifiées. | | Diff du paquet `vite` 6.4.3 → 6.4.4, renommages du bundler neutralisés | Seul le gros morceau change (24 blocs) ; `cli.js` et `index.js` ne diffèrent que par les noms des morceaux. Contenu : `launch-editor` 2.14.2 et `shell-quote` embarqués, `checkServingAccess` et `deniedServingAccessForTransform` retirés au profit du contrôle au chargement, `getHtmlFilename` et `devHtmlHook`, `safeModulePaths` sur l'id résolu dans `vite:import-analysis`. Tout relève du serveur de développement, conformément aux quatre entrées du CHANGELOG amont de la 6.4.4. | | Build | `npm ci` (npm 10.9.4) puis `npm run build` sur `main` (vite 6.4.3) et sur la tête (vite 6.4.4) : `dist/` identique fichier par fichier, sauf `CHANGELOG.md` et `CHANGELOG.fr.md`. | | `npx npm@11.21.0 install --package-lock-only` sur la tête | lock identique à l'octet | | R4 : `vite` remis en 6.4.3 (copie du lock) | le lock redevient celui de `main` à l'octet ; `npm audit` code 1, `vite` en haute avec cinq avis (constat 2) | | Windows | `cargo xwin check --manifest-path src-tauri/Cargo.toml --locked --target x86_64-pc-windows-msvc` (cargo-xwin déjà installé), témoin `main` puis tête : code 0 et code 0. Sur la tête, `rustls-webpki v0.103.16`, `rustls`, `tokio-rustls`, `rustls-platform-verifier`, `hyper-rustls`, `reqwest` 0.13.2 et `tauri-plugin-updater` revérifiés. | | CI, journaux lus (ANSI retirés) | Run 605 (`check-rust`, `e66ae08`) : `Checking rustls-webpki v0.103.16`, « Suppression guard: 2 checks, exit 0 », « windows-sys pinning: 9 checks, exit 0 », 269 réussis et 1 ignoré, audit sur 663 crates avec `18 allowed warnings found` et aucune ligne `vulnerabilit(y|ies) found`. Run 604 (`check-frontend`) : `found 0 vulnerabilities` à 01:35 UTC, `vite v6.4.4 building for production`, 156 fichiers et 2560 tests. | La suite vitest n'a pas été rejouée : le run 604 en fait foi, et la PR ne touche aucun code. ### Constats non bloquants 1. **`npm audit` n'est plus à 0, sur la tête comme sur `main`.** Deux avis modérés publiés le 2026-10-21 entre 19:48 et 19:54 UTC, après le run 604, visent `@vitest/mocker` 4.1.11, et `vitest` 4.1.11 par lui : GHSA-qxg6-89mg-rqv8 (« Code injection via unauthenticated manual mock registration ») et GHSA-xp26-3454-mjgp (« Windows backslash traversal bypasses the @vitest/mocker redirect allowlist fix »). Correctif en 4.1.12 (publiée le 2026-10-15), dans la plage `^4.1.9` de `package.json`. Hors du périmètre de la PR. La phrase « `npm audit` à 0 au 2026-10-20 » de `CLAUDE.md` et de `docs/architecture.md` reste exacte comme constat daté, mais sera dépassée au merge, et le `npm ci` du prochain `check-frontend` imprimera deux vulnérabilités. Suite : une issue pour `vitest` 4.1.12 (lock à générer par `npx npm@11`, npm 10 plantant sur les montées de vitest), ou le prochain scan du Défenseur. 2. **La 6.4.4 corrige cinq avis de `vite`, pas trois.** GHSA-rq7h-c2jc-7f22 (modéré, « Files outside `server.fs.allow` could be served when project paths match system paths on non-Windows machine ») et GHSA-9jrq-w75r-8gcw (faible, « Cross origin script execution through Vite custom middleware »), publiés le 2026-10-21 vers 16:48 UTC, visent `<= 6.4.3` avec la 6.4.4 pour correctif ; R4 les fait reparaître. Tous deux concernent aussi le serveur de développement. Les puces `vite` des deux CHANGELOG peuvent les nommer, en parlant du serveur de développement plutôt que de la seule fonction « ouvrir dans l'éditeur ». 3. **`vite` 6.4.5 est publiée** (2026-10-21, 05:35 UTC, après l'ouverture de la PR), avec une seule entrée : « check `server.fs` after stripping query as well ». Aucun avis publié ne vise la 6.4.4 à l'heure de cette revue. Au choix de Max : garder la 6.4.4, un avis pouvant suivre, ou passer à la 6.4.5 par la même méthode (trois lignes du lock). 4. **ADR 0018, section « Liens »** : la ligne de l'ADR 0009 présente la récupération de cours via `reqwest` comme « l'un des deux chemins qui rendent `rustls-webpki` atteignable ». C'est faux : le `reqwest` 0.12 de l'app passe par la TLS du système, et c'était déjà le cas le 2026-07-27 (lock de `81804bb`). La puce de cette PR dit juste ; l'ADR est à corriger dans une PR de documentation. ### Fermeture des issues (timeline) - #483 : `pull_ref` de #485 en `closes`, et `Resolves #483` dans le message de `e66ae08` : elle se ferme au merge, par l'API comme en avance rapide locale. - #484 : `pull_ref` en `ref_action: none`, `Refs #484` dans `4a04716`, aucun mot-clé de fermeture dans le corps ni dans les commentaires : elle reste ouverte, conformément à la checklist post-merge. Commits au format conventionnel, un par issue, comme décidé. ### Actions faites - #483 et #484 : `status:review` → `status:approved`. - Copies hors dépôt supprimées (`/tmp/pr485-review`).
maximus added 1 commit 2026-10-21 23:49:47 +00:00
docs: name the five vite advisories and fix the price-fetching link of ADR 0018 (#483, #484)
All checks were successful
PR Check — Frontend / frontend (pull_request) Successful in 2m13s
PR Check — Rust / rust (pull_request) Successful in 4m1s
e82422ffb3
Review of PR #485 (comment 26321): vite 6.4.4 also clears GHSA-rq7h-c2jc-7f22
and GHSA-9jrq-w75r-8gcw, published after the PR was opened; both concern
the development server. ADR 0018's link to ADR 0009 said the price fetch
reaches rustls-webpki: it uses the app's reqwest 0.12 with the system TLS,
only tauri-plugin-updater's reqwest 0.13 reaches rustls-webpki.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Author
Owner

Suites de la revue (commentaire 26321), 2026-10-21 :

  • Ajouté après la revue, non relu : e82422f, de la documentation seulement.
    • Les puces vite des deux CHANGELOG nomment maintenant les cinq avis que la 6.4.4 corrige : les trois de launch-editor, plus GHSA-rq7h-c2jc-7f22 et GHSA-9jrq-w75r-8gcw, parus après l'ouverture de la PR.
    • Le lien de l'ADR 0018 vers l'ADR 0009 est corrigé : la récupération des cours n'atteint pas rustls-webpki.
  • Décision de Max : on garde vite 6.4.4. La 6.4.5 ne corrige que le contrôle d'accès du serveur de développement, et aucun avis ne vise la 6.4.4.
  • Décision de Max : les avis vitest / @vitest/mocker (GHSA-qxg6-89mg-rqv8, GHSA-xp26-3454-mjgp) sont suivis par #486, hors de cette PR.
  • Hors périmètre, conservé : la lecture datée « npm audit à 0 au 2026-10-20 » reste exacte pour sa date ; #486 la mettra à jour.

#483 et #484 repassent en status:review : la revue couvrait la tête précédente (e66ae08).

Suites de la revue (commentaire 26321), 2026-10-21 : - **Ajouté après la revue, non relu** : `e82422f`, de la documentation seulement. - Les puces `vite` des deux CHANGELOG nomment maintenant les cinq avis que la 6.4.4 corrige : les trois de `launch-editor`, plus GHSA-rq7h-c2jc-7f22 et GHSA-9jrq-w75r-8gcw, parus après l'ouverture de la PR. - Le lien de l'ADR 0018 vers l'ADR 0009 est corrigé : la récupération des cours n'atteint pas `rustls-webpki`. - **Décision de Max** : on garde `vite` 6.4.4. La 6.4.5 ne corrige que le contrôle d'accès du serveur de développement, et aucun avis ne vise la 6.4.4. - **Décision de Max** : les avis `vitest` / `@vitest/mocker` (GHSA-qxg6-89mg-rqv8, GHSA-xp26-3454-mjgp) sont suivis par #486, hors de cette PR. - **Hors périmètre, conservé** : la lecture datée « `npm audit` à 0 au 2026-10-20 » reste exacte pour sa date ; #486 la mettra à jour. #483 et #484 repassent en `status:review` : la revue couvrait la tête précédente (`e66ae08`).
All checks were successful
PR Check — Frontend / frontend (pull_request) Successful in 2m13s
PR Check — Rust / rust (pull_request) Successful in 4m1s
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin issue-484-security-bumps:issue-484-security-bumps
git checkout issue-484-security-bumps
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: maximus/Simpl-Resultat#485
No description provided.