[security] deps: RUSTSEC-2026-0367 à -0369 (zip) — l’audit quotidien est rouge depuis le 2026-10-17 #455
Labels
No labels
autopilot:pending-human
source:analyste
source:defenseur
source:human
source:medic
status:approved
status:blocked
status:in-progress
status:needs-clarification
status:needs-fix
status:ready
status:review
status:triage
type:bug
type:feature
type:infra
type:refactor
type:schema
type:security
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: maximus/Simpl-Resultat#455
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Constat
audit.ymléchoue depuis le 2026-10-17 à 06:00 UTC (run 558, sur065f580). Le dernier vert est leworkflow_dispatchdu 2026-10-16 à 23:15 UTC (run 556, sur1763a9f).src-tauri/Cargo.lockn'a pas bougé entre les deux : la base d'avis est passée de 1329 à 1334 entrées, et trois des nouvelles visentzip4.6.1.#447 n'est pas en cause : ses quatre avis sur
rustlsn'apparaissent plus.Les avis
Les trois visent
zip< 9.0.0, sont datés des 9 et 10 octobre 2026 et ne sont corrigés qu'en>= 9.0.0. Aucune version 4.x n'est corrigée : la 4.6.1 est la dernière.AV:L/AC:L/PR:L/UI:R)ZipArchive::extract()et l'extraction en flux conservent les bits SUID, SGID et sticky desexternal_attributes: extraite par un processus privilégié, une archive malveillante crée des fichiers setuid-root.ZipArchive::extract()crée des liens symboliques dont la cible, choisie par l'archive, sort du dossier de destination (vérifié sous macOS et Linux).AV:N/AC:L/PR:N/UI:N)ZipStreamReader::extract()etZipArchive::extract()appliquent les permissions Unix à travers des liens symboliques, sans confiner leur cible.Atteignabilité
cargo tree -i zip --lockedpar triple livré :x86_64-unknown-linux-gnu: absent ;x86_64-pc-windows-msvc:zipvient de la featurezipdetauri-plugin-updater, activée par défaut (default = ["rustls-tls", "zip"], etzip = ["dep:zip", "dep:tar", "dep:flate2"]). L'app déclaretauri-plugin-updater = "2"(src-tauri/Cargo.toml:26), donc avec ses features par défaut.Le seul usage est
Updater::extract(src/updater.rs:882-911de la 2.10.0) : sous#[cfg(feature = "zip")], il n'extrait que si les octets sont une archive zip (infer::archive::is_zip), sinon il passe àextract_exe. Etdownload()vérifie la signature du paquet (updater.rs:712) avant queinstall()ne l'extraie.Aucun des trois n'est déclenchable aujourd'hui :
.exeNSIS, jamais des zip (lelatest.jsonles sert en.exe, ce queverify-release.shcontrôle) : la brancheextract_zipn'est pas prise ;zipn'est compilé que pour Windows.Correctif
La règle 1 de
.cargo/audit.tomlinterdit de supprimer ces avis : le crate est dans le graphe d'une cible livrée, et un correctif est publié (zip9). Ce correctif n'est pourtant pas atteignable parcargo update:tauri-plugin-updater2.14.0, sa dernière version, exige toujourszip ^4, et un[patch]ne peut pas remplacer^4par une version 9.Piste : déclarer l'updater sans ses features par défaut, en gardant TLS.
zipettarquittent alors le graphe, etflate2reste, tiré aussi parpng→ico→tauri-codegen. Le code de l'updater qui touchezipettarest souscfg: la variante d'erreurExtractest sous#[cfg(all(target_os = "windows", feature = "zip"))](error.rs:62-65), et le bloctar.gzdes AppImage sous#[cfg(feature = "zip")](updater.rs:1004). Sous Windows,extractne garde queextract_exe, notre cas.À vérifier à l'analyse :
zip, sous Linux et sous Windows ;Cargo.lock(paquets retirés), et la gardewindows-sys(ADR 0023) ;tarest le canari de la garde des suppressions decheck-rust.yml(« a crate known to be present », surx86_64-unknown-linux-gnu). Il n'est présent que par l'updater : la garde rougira par construction. Choisir un autre canari ;tar:docs/qa-update-cycle.md(« Non prouvé : l'extraction d'archive, donctar»), commentaires decheck-rust.yml, ADR 0018 ;Alternatives écartées d'avance, à confirmer : attendre une
tauri-plugin-updaterenzip ^9(aucune trace à ce jour) ; supprimer les trois IDs (règle 1) ; un[patch]dezip(impossible).Analyse (2026-10-17)
Décisions
tauri-plugin-updater = { version = "2", default-features = false, features = ["rustls-tls"] }. Écartés : attendre unetauri-plugin-updaterenzip ^9, et supprimer les trois IDs (règle 1).cargo xwin check --locked --target x86_64-pc-windows-msvc. Max a accepté la licence Microsoft du CRT et du SDK Windows ;cargo-xwin0.23.1 est installé sur le poste de développement, avecclang,lldetllvm18.tauriremplacetar, puisqu'une app Tauri ne peut pas le perdre.Refs #455: un critère se vérifie après le merge (leworkflow_dispatchd'audit.yml).Mesures
Faites le 2026-10-17 dans des worktrees jetables sur
main589aee0.zip4.6.1,arbitrary1.4.2,derive_arbitrary1.4.2), de 666 à 663 paquets, aucun ajouté.tarreste dans le lock, où il n'est plus tiré que pour macOS, mais quitte les graphes Linux et Windows (cargo tree -i tarvide sur les deux cibles).flate2reste, tiré parpng→ico→tauri-codegen.windows-sys:windows-sys pinning: 9 checks, exit 0, aucune version ne bouge.FAIL: canary 'tar' was not found, comme attendu.cargo check --locked --all-targetsvert ;cargo test --locked --all-targets267 passed, 0 failed.cargo-audit0.22.2, exit 0, 1334 advisories chargées, 663 crates, les 12 mêmes warnings autorisés.cargo-xwin0.23.1) : témoin surmaintel quel, exit 0, avecChecking zip v4.6.1; avec le correctif, exit 0, etzipn'est plus compilé.createUpdaterArtifacts: truedanstauri.conf.json,build-latest-json.shpublie le-setup.exe, et les assets de la v0.17.1 sont.exe,.deb,.rpm, leurs.sigetlatest.json.Travail à faire
src-tauri/Cargo.toml:26: la déclaration ci-dessus ; régénérer le lock, dont le diff doit retirer ces 3 paquets et rien d'autre..forgejo/workflows/check-rust.yml: canaritar→tauri(étape « Verify suppressed advisories are still unreachable », l. 180-188, et son commentaire). Prouver que la garde rougit avec un canari absent du graphe.docs/qa-update-cycle.md: la liste des dépendances de la l. 3 (tarn'en fait plus partie) et le paragraphe « Non prouvé » (l'extraction d'archive n'est plus compilée, ni zip sous Windows nitar.gzd'AppImage sous Linux).### Security/### Sécuritédans les deux CHANGELOG (texte proposé ci-dessous).cargo-audit0.22.2 rouge sur l'ancien lock et vert sur le nouveau, depuis la racine du dépôt ;cargo checketcargo testsous Linux ;cargo xwin check --locked --target x86_64-pc-windows-msvc.workflow_dispatchd'audit.ymlsurmain, lecture du log, fermeture à la main, puis retrait du blocker dansSTATE.md.zip. Le cycle de la prochaine release part de la v0.17.1 et ne l'exécute pas (revue 24757 de la PR #459, suivi #463).Fichiers concernés
src-tauri/Cargo.toml,src-tauri/Cargo.lock,.forgejo/workflows/check-rust.yml,docs/adr/0018-suppression-advisories-non-atteignables.md,docs/qa-update-cycle.md,CHANGELOG.md,CHANGELOG.fr.md.Surface de test
Pas de test applicatif : ce sont les étapes de
check-rust(les deux gardes,cargo check,cargo test,cargo audit) etaudit.ymlqui vérifient. Seule nouveauté à éprouver : la garde avec son nouveau canari, par une mutation qui le rend absent.Critères d'acceptation
zipabsent desrc-tauri/Cargo.lock; le diff du lock ne retire quezip,arbitraryetderive_arbitrary, et n'ajoute rien.cargo audit0.22.2 : 0 vulnérabilité, les 12 mêmes warnings autorisés.tauriet rouge sans lui ; gardewindows-sys9/9.cargo checketcargo testverts sous Linux ;cargo xwin checkvert pour Windows.qa-update-cycle.mdet les deux CHANGELOG à jour.workflow_dispatchd'audit.ymlsurmainvert, vérifié dans le log.Complexité
Simple.
Entrées CHANGELOG proposées
CHANGELOG.md, sous### Security:CHANGELOG.fr.md, sous### Sécurité:Hors périmètre
Le Défenseur ne voit pas les avis RustSec (maximus/agent-defenseurs#186) : seul
audit.ymla signalé ce rouge.PR #459 ouverte. Un écart avec l'analyse, relevé par le contrôle du plan : le nouveau canari de la garde des suppressions est
webkit2gtk, pastauri.tarétait une dépendance conditionnelle de l'updater (cfg(target_os = "linux")), si bien que le trouver prouvait aussi quecargo tree --target x86_64-unknown-linux-gnurésout les arêtes conditionnelles, propriété sur laquelle repose la règle 1 de l'ADR 0018.tauriest inconditionnel et l'aurait perdue ;webkit2gtk, la webview Linux de Tauri, est présent sous Linux et absent sous Windows. Le critère « garde verte avec son canari et rouge sans lui » est vérifié avecwebkit2gtk(détail dans la PR).Fermée à la main après la checklist d'après merge de la PR #459.
main(contenu identique à l'octet à la tête relue85b7ef9), mergée en avance rapide le 2026-10-18 ;main=c5efc38.check-rustrun 563 sur cette tête : canariwebkit2gtktrouvé, garde des suppressions2 checks, exit 0, gardewindows-sys9 checks, exit 0, 267 tests, audit informatif à 663 crates, lock non réécrit.main:workflow_dispatchd'audit.yml(204), run 564 vert surc5efc38. Journal lu, codes ANSI retirés :cargo-audit-audit 0.22.2,Loaded 1338 security advisories,(663 crate dependencies),18 allowed warnings found, aucune ligneerror: N vulnerabilities found, aucun de RUSTSEC-2026-0367, -0368 et -0369. Les 18 avertissements sont les 12 d'avant et sixunmaintainedparus le 2026-10-18 (RUSTSEC-2026-0370 à -0372), non bloquants./pr-reviewde niveau haut (commentaire 24757), REQUEST_CHANGES sur une fausse preuve du corps de PR, corrigée dans le texte (commentaire 24806) ; merge sans second tour, sur décision de Max.Reste dû, hors de cette issue :
zip(#463).Rouvrir si l'un des trois identifiants réapparaît dans
audit.yml, ou siziprevient dansCargo.lock(la featurezipde l'updater remise, oucreateUpdaterArtifacts: "v1Compatible").