fix: planchers de sécurité pip-audit — brotli, filelock, opentelemetry-api, pypdf #224
This commit is contained in:
@@ -180,7 +180,13 @@ jobs:
|
||||
# PYSEC-2026-3910 / PYSEC-2026-3911 (pypdf, DoS de ressources sur
|
||||
# l'extraction de texte et la lecture d'outlines — donc atteignables
|
||||
# via backend/pdf_reader.py) sont corrigés par le plancher
|
||||
# pypdf>=6.16.1 (BUG-093).
|
||||
# pypdf>=6.16.1 (BUG-093), relevé à pypdf>=6.21.2 par #224 (11 CVE
|
||||
# sur la 6.19.0 de la toolcache, corrigées au plus tard en 6.21.2).
|
||||
# #224 ajoute les planchers brotli>=1.2.1 (PYSEC-2026-4322,
|
||||
# GHSA-9v8h-qqgm-4m35), filelock>=4.2.1 (CVE-2026-112940,
|
||||
# CVE-2026-112913, CVE-2026-112907) et opentelemetry-api>=1.45.1
|
||||
# (CVE-2026-114603) : paquets transitifs ou préinstallés dans la
|
||||
# toolcache, audités mais jamais alignés sans plancher explicite.
|
||||
# CVE-2026-97687 / CVE-2026-97688 / CVE-2026-97689 (urllib3 2.7.0)
|
||||
# corrigés par le plancher urllib3>=2.8.0.
|
||||
# CVE-2026-104874 (multidict 6.7.x) corrigé par le plancher
|
||||
|
||||
+21
-1
@@ -6,7 +6,7 @@ Format basé sur [Keep a Changelog](https://keepachangelog.com/fr/1.1.0/),
|
||||
et [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
> **En cours de développement** : les changements à venir sont listés dans la section
|
||||
> [Unreleased](#unreleased). La dernière version livrée est **2.78.0**.
|
||||
> [Unreleased](#unreleased). La dernière version livrée est **2.78.1**.
|
||||
|
||||
---
|
||||
|
||||
@@ -14,6 +14,26 @@ et [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
---
|
||||
|
||||
## [2.78.1] — 2026-10-25
|
||||
|
||||
### Corrigé
|
||||
|
||||
- **Sécurité des dépendances — `pip-audit` rouge sur 2.78.0 (#224)** —
|
||||
le job `security` du run CI 2303 signalait 17 vulnérabilités dans
|
||||
4 paquets hérités de l'environnement du runner (versions
|
||||
préinstallées dans la toolcache, jamais alignées car « already
|
||||
satisfied » — même piège que BUG-093). Planchers explicites dans
|
||||
`backend/requirements.txt` : `pypdf>=6.21.2` (11 CVE sur la 6.19.0,
|
||||
dont CVE-2026-113786 et CVE-2026-115572/115585/115580),
|
||||
`brotli>=1.2.1` (PYSEC-2026-4322, GHSA-9v8h-qqgm-4m35),
|
||||
`filelock>=4.2.1` (CVE-2026-112940, CVE-2026-112913,
|
||||
CVE-2026-112907) et `opentelemetry-api>=1.45.1`
|
||||
(CVE-2026-114603). Garde-fou `TestDependencySecurityFloors`
|
||||
étendu ; aucun code applicatif touché, aucun nouvel ignore
|
||||
`pip-audit`. Redéploiement Docker requis.
|
||||
|
||||
---
|
||||
|
||||
## [2.78.0] — 2026-10-25
|
||||
|
||||
### Modifié
|
||||
|
||||
+3
-3
@@ -4,7 +4,7 @@
|
||||
|
||||
**Porte d'entrée web ultra-léger pour vos vaults Obsidian** — Accédez, naviguez et recherchez dans toutes vos notes Obsidian depuis n'importe quel appareil via une interface web moderne et responsive.
|
||||
|
||||
[]()
|
||||
[]()
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
[](https://www.docker.com/)
|
||||
[](https://www.python.org/)
|
||||
@@ -977,8 +977,8 @@ Ce projet est sous licence **MIT** — voir le fichier [LICENSE](LICENSE) pour l
|
||||
|
||||
## 📝 Changelog
|
||||
|
||||
Consultez le [CHANGELOG.md](./CHANGELOG.md) pour l'historique complet de toutes les versions (v1.0.0 → v2.78.0).
|
||||
Consultez le [CHANGELOG.md](./CHANGELOG.md) pour l'historique complet de toutes les versions (v1.0.0 → v2.78.1).
|
||||
|
||||
---
|
||||
|
||||
*Projet : ObsiGate | Version : 2.78.0 | Dernière mise à jour : Septembre 2026*
|
||||
*Projet : ObsiGate | Version : 2.78.1 | Dernière mise à jour : Septembre 2026*
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
**Ultra-light web gateway for your Obsidian vaults** — Access, browse, and search all your Obsidian notes from any device via a modern, responsive web interface.
|
||||
|
||||
[]()
|
||||
[]()
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
[](https://www.docker.com/)
|
||||
[](https://www.python.org/)
|
||||
@@ -1152,8 +1152,8 @@ This project is licensed under the **MIT License** - see the [LICENSE](LICENSE)
|
||||
|
||||
## 📝 Changelog
|
||||
|
||||
See [CHANGELOG.md](./CHANGELOG.md) for the complete version history (v1.0.0 → v2.78.0).
|
||||
See [CHANGELOG.md](./CHANGELOG.md) for the complete version history (v1.0.0 → v2.78.1).
|
||||
|
||||
---
|
||||
|
||||
*Project: ObsiGate | Version: 2.78.0 | Last updated: September 2026*
|
||||
*Project: ObsiGate | Version: 2.78.1 | Last updated: September 2026*
|
||||
|
||||
@@ -16,13 +16,16 @@ sortedcontainers>=2.4.0
|
||||
snowballstemmer>=2.2.0
|
||||
weasyprint>=70.0
|
||||
httpx>=0.27.0
|
||||
# Plancher de sécurité (BUG-093) : 6.16.0 est vulnérable à deux DoS de
|
||||
# ressources (PYSEC-2026-3910 outlines, PYSEC-2026-3911 XForm, fix 6.16.1),
|
||||
# atteignables via backend/pdf_reader.py (PDF fournis par l'utilisateur).
|
||||
# Le plancher doit être >= 6.16.1 : l'image Act du runner embarque 6.16.0
|
||||
# dans sa toolcache Python, donc un plancher trop bas est « already satisfied »
|
||||
# et n'est jamais mis à niveau.
|
||||
pypdf>=6.16.1
|
||||
# Plancher de sécurité (BUG-093, relevé par #224) : 6.16.0 est vulnérable à
|
||||
# deux DoS de ressources (PYSEC-2026-3910 outlines, PYSEC-2026-3911 XForm,
|
||||
# fix 6.16.1), atteignables via backend/pdf_reader.py (PDF fournis par
|
||||
# l'utilisateur). #224 : la version préinstallée dans la toolcache du
|
||||
# runner (6.19.0) est frappée par 11 CVE supplémentaires (dont
|
||||
# CVE-2026-113786, CVE-2026-115572, CVE-2026-115585, CVE-2026-115580),
|
||||
# corrigées au plus tard en 6.21.2 — le plancher doit être >= 6.21.2 :
|
||||
# en dessous, pip répond « already satisfied » pour la toolcache et
|
||||
# n'aligne jamais (même piège que BUG-093).
|
||||
pypdf>=6.21.2
|
||||
pyotp>=2.10.0
|
||||
segno>=1.5.0
|
||||
webauthn==2.6.0
|
||||
@@ -55,3 +58,18 @@ multidict>=6.9.1
|
||||
# transitive (httpx/requests) — sans plancher explicite, pip-audit
|
||||
# signale la version héritée de l'environnement.
|
||||
certifi>=2026.10.19
|
||||
# Planchers de sécurité (#224) : paquets transitifs ou préinstallés dans
|
||||
# la toolcache du runner, audités par pip-audit (CI, bloquant) mais jamais
|
||||
# alignés sans plancher explicite — « already satisfied » (même piège que
|
||||
# BUG-093). Versions relevées par le job security du run sur 2.78.0 :
|
||||
# brotli 1.2.0 (transitive fonttools[woff] via weasyprint) — PYSEC-2026-4322
|
||||
# et GHSA-9v8h-qqgm-4m35, corrigées en 1.2.1.
|
||||
brotli>=1.2.1
|
||||
# filelock 3.32.3 (transitive de CacheControl, outil pip-audit, et
|
||||
# préinstallée dans la toolcache) — CVE-2026-112940, CVE-2026-112913 et
|
||||
# CVE-2026-112907, corrigées en 4.2.1.
|
||||
filelock>=4.2.1
|
||||
# opentelemetry-api 1.37.0 (préinstallée dans la toolcache du runner,
|
||||
# aucune dépendance directe d'ObsiGate) — CVE-2026-114603, corrigée
|
||||
# en 1.45.1.
|
||||
opentelemetry-api>=1.45.1
|
||||
|
||||
Generated
+1
-1
@@ -2626,7 +2626,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "obsigate-desktop"
|
||||
version = "2.78.0"
|
||||
version = "2.78.1"
|
||||
dependencies = [
|
||||
"chrono",
|
||||
"env_logger",
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "obsigate-desktop"
|
||||
version = "2.78.0"
|
||||
version = "2.78.1"
|
||||
description = "ObsiGate Desktop — Porte d'entrée native pour vos vaults Obsidian"
|
||||
authors = ["Bruno Charest"]
|
||||
edition = "2021"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/nicedoc/obsigate/main/desktop/tauri.conf.schema.json",
|
||||
"productName": "ObsiGate",
|
||||
"version": "2.78.0",
|
||||
"version": "2.78.1",
|
||||
"identifier": "com.obsigate.desktop",
|
||||
"build": {
|
||||
"frontendDist": "../frontend",
|
||||
|
||||
+19
-1
@@ -1,6 +1,6 @@
|
||||
# ObsiGate — Roadmap
|
||||
|
||||
> **Version :** 2.78.0 | **Dernière mise à jour :** 2026-10-25
|
||||
> **Version :** 2.78.1 | **Dernière mise à jour :** 2026-10-25
|
||||
> **Ce fichier ne contient que le travail à venir** (🔵 En cours + ⚪ Backlog) et un index compact
|
||||
> vers les fonctionnalités livrées.
|
||||
> - **Méthode de livraison à appliquer pour toute tâche : [DELIVERY_WORKFLOW.md](./DELIVERY_WORKFLOW.md)**
|
||||
@@ -30,6 +30,24 @@
|
||||
|
||||
## 🔵 En cours
|
||||
|
||||
### 224. Sécurité des dépendances — pip-audit vierge (brotli, filelock, opentelemetry-api, pypdf)
|
||||
|
||||
- **Effort :** ~0,1 jour | **Impact :** 🔴 | **Ouvert :** 2026-10-25 | **Statut :** ✅ livré le 2026-10-25 (version du hook — voir CHANGELOG ; redéploiement Docker requis)
|
||||
- **Fiche :** [features/securite-dependances-pip-audit-224.md](./features/securite-dependances-pip-audit-224.md)
|
||||
- **Description :** le job `security` du run CI 2303 (2.78.0) échoue
|
||||
sur `pip-audit` : 17 vulnérabilités dans 4 paquets hérités de
|
||||
l'environnement du runner (toolcache « already satisfied », même
|
||||
piège que BUG-093). Planchers explicites dans
|
||||
`backend/requirements.txt` : pypdf relevé à `>=6.21.2`, nouveaux
|
||||
planchers `brotli>=1.2.1`, `filelock>=4.2.1`,
|
||||
`opentelemetry-api>=1.45.1` ; garde-fou `TestDependencySecurityFloors`
|
||||
étendu. Aucun code applicatif, aucun nouvel ignore pip-audit.
|
||||
- **Sous-tâches :**
|
||||
- [x] Planchers de sécurité dans `backend/requirements.txt` + commentaires
|
||||
- [x] Garde-fou `tests/test_ci_workflow.py::TestDependencySecurityFloors` étendu (pypdf 6.21.2, brotli, filelock, opentelemetry-api)
|
||||
- [x] `pip-audit` local : 0 vulnérabilité non ignorée (mêmes ignores que la CI)
|
||||
- [x] Release publiée — CI verte à constater, redéploiement Docker (geste de Bruno)
|
||||
|
||||
### 223. Dev/prod sans noms publics en dur — URLs de l'écosystème par configuration
|
||||
|
||||
- **Effort :** ~0,5 jour | **Impact :** 🟡 | **Ouvert :** 2026-10-25 | **Statut :** ✅ livré le 2026-10-25 (version du hook — voir CHANGELOG ; redéploiement Docker requis, et en dev déclarer les noms en `-dev` dans le `.env` du poste)
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
# #224 — Sécurité des dépendances : pip-audit vierge (brotli, filelock, opentelemetry-api, pypdf)
|
||||
|
||||
> Ouvert le 2026-10-25. Déclencheur : le job `security` du run CI 2303
|
||||
> (commit `f29a228`, version 2.78.0) échoue sur `pip-audit` (bloquant,
|
||||
> #87) — **17 vulnérabilités connues dans 4 paquets**. Le job `lint`
|
||||
> du même run est vert ; `security` est le seul job terminé en échec
|
||||
> au moment du constat (`test` en file, `build`/`e2e` en attente).
|
||||
|
||||
## Constat (journal du job `security`, run 2303)
|
||||
|
||||
| Paquet | Version auditée | Vulnérabilités | Corrigée en |
|
||||
|---|---|---|---|
|
||||
| brotli | 1.2.0 | PYSEC-2026-4322, GHSA-9v8h-qqgm-4m35 | 1.2.1 |
|
||||
| filelock | 3.32.3 | CVE-2026-112940, CVE-2026-112913, CVE-2026-112907 | 4.2.1 |
|
||||
| opentelemetry-api | 1.37.0 | CVE-2026-114603 | 1.45.1 |
|
||||
| pypdf | 6.19.0 | CVE-2026-113792, CVE-2026-113795, CVE-2026-113793, CVE-2026-113794, CVE-2026-113786, CVE-2026-113791, CVE-2026-113790, CVE-2026-113789, CVE-2026-115572, CVE-2026-115585, CVE-2026-115580 | 6.20.0 → 6.21.2 selon l'advisory (max 6.21.2) |
|
||||
|
||||
Total : 2 + 3 + 1 + 11 = **17 vulnérabilités**.
|
||||
|
||||
Audit local de confirmation, en deux temps : (1) un venv épinglé sur
|
||||
les versions du runner (brotli 1.2.0, filelock 3.32.3,
|
||||
opentelemetry-api 1.37.0, pypdf 6.19.0) reproduit **exactement** les
|
||||
17 vulnérabilités et les versions corrigées du tableau ci-dessus ;
|
||||
(2) dans le venv du dépôt, `pip-audit` (avec les deux ignores déjà en
|
||||
place dans la CI) ne ressortait avant correctif que brotli 1.2.0
|
||||
(2 advisories, fix 1.2.1) et pypdf 6.21.1 (3 advisories restants,
|
||||
fix 6.21.2) — ce venv a déjà filelock 4.2.4 (corrigée) et ne contient
|
||||
pas opentelemetry-api. L'écart avec la CI vient de l'environnement
|
||||
audité, pas des dépendances déclarées (voir cause).
|
||||
|
||||
## Cause racine
|
||||
|
||||
Même piège que BUG-093 / BUG-095, déjà documenté dans
|
||||
`backend/requirements.txt` et `.gitea/workflows/ci.yml` : `pip-audit`
|
||||
audite **tout l'environnement Python du runner**, dont les paquets
|
||||
préinstallés dans la toolcache de l'image `catthehacker/ubuntu:act-latest`.
|
||||
`pip install -r backend/requirements.txt` répond « already satisfied »
|
||||
pour toute exigence transitive déjà satisfaite par la toolcache et
|
||||
n'aligne jamais la version vulnérable :
|
||||
|
||||
- **pypdf 6.19.0** : préinstallée ; le plancher `>=6.16.1` (BUG-093)
|
||||
est satisfait, pip ne monte pas vers 6.21.2.
|
||||
- **brotli 1.2.0** : transitive de `fonttools[woff]` (via weasyprint),
|
||||
exigée en `>=1.0.1` seulement.
|
||||
- **filelock 3.32.3** : transitive de CacheControl (outil `pip-audit`
|
||||
lui-même) et préinstallée ; exigée en `>=3.8.0` seulement.
|
||||
- **opentelemetry-api 1.37.0** : préinstallée dans la toolcache,
|
||||
aucune dépendance d'ObsiGate ne la demande.
|
||||
|
||||
## Correctif
|
||||
|
||||
Planchers de sécurité explicites dans `backend/requirements.txt`,
|
||||
selon le patron déjà en place (pyjwt, urllib3, multidict, certifi) —
|
||||
aucune autre dépendance touchée, aucun code applicatif modifié :
|
||||
|
||||
- `pypdf>=6.16.1` → **`pypdf>=6.21.2`** (plancher existant relevé) ;
|
||||
- **`brotli>=1.2.1`** (nouveau plancher) ;
|
||||
- **`filelock>=4.2.1`** (nouveau plancher) ;
|
||||
- **`opentelemetry-api>=1.45.1`** (nouveau plancher).
|
||||
|
||||
Garde-fou : `tests/test_ci_workflow.py::TestDependencySecurityFloors`
|
||||
couvre désormais aussi brotli, filelock et opentelemetry-api, et le
|
||||
plancher verrouillé de pypdf passe à (6, 21, 2). Le commentaire de
|
||||
l'étape Pip-audit de `.gitea/workflows/ci.yml` est mis à jour en
|
||||
conséquence (aucune commande CI modifiée).
|
||||
|
||||
## Exceptions (ignores)
|
||||
|
||||
**Aucun nouvel ignore.** Les deux exceptions déjà en place dans la
|
||||
CI restent inchangées et ne concernent pas ces paquets :
|
||||
`PYSEC-2026-1325` (ecdsa, aucun correctif upstream, chemins ECDSA
|
||||
jamais exécutés — HS256 uniquement) et `CVE-2026-85394`
|
||||
(python-jose, aucun correctif upstream, non atteignable — voir le
|
||||
commentaire de l'étape dans `ci.yml`).
|
||||
|
||||
## Vérification
|
||||
|
||||
- `pip-audit` local (mêmes ignores que la CI) après alignement de
|
||||
l'environnement sur les nouveaux planchers : **0 vulnérabilité
|
||||
non ignorée**.
|
||||
- Portes locales du workflow : `pytest tests/`, `ruff check backend/`,
|
||||
`mypy backend/ --ignore-missing-imports`, tests frontend
|
||||
(`validate-imports` + `unit`) — voir le commit #224.
|
||||
- CI Gitea complète verte exigée (lint, test, security, build, e2e)
|
||||
avant de considérer #224 livré.
|
||||
|
||||
## Livraison
|
||||
|
||||
- Commit conventionnel `fix: … #224` ; le hook de version porte
|
||||
2.78.0 → **2.78.1** (correctif) et crée le tag `v2.78.1`, publié
|
||||
au push ; release Gitea créée sur ce tag après vérification de sa
|
||||
cible.
|
||||
- **Redéploiement Docker requis** pour que l'image embarque les
|
||||
dépendances alignées (l'hôte actuel est l'environnement dev).
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "obsigate",
|
||||
"version": "2.78.0",
|
||||
"version": "2.78.1",
|
||||
"description": "**Porte d'entrée web ultra-léger pour vos vaults Obsidian** — Accédez, naviguez et recherchez dans toutes vos notes Obsidian depuis n'importe quel appareil via une interface web moderne et responsive.",
|
||||
"main": "patch.js",
|
||||
"directories": {
|
||||
|
||||
@@ -251,11 +251,17 @@ class TestDependencySecurityFloors:
|
||||
|
||||
#: (paquet, plancher minimal, advisories corrigées au-dessus)
|
||||
FLOORS = {
|
||||
"pypdf": (6, 16, 1), # PYSEC-2026-3910, PYSEC-2026-3911 (fix 6.16.1)
|
||||
# #224 : 6.19.0 (toolcache) frappée par 11 CVE, corrigées au plus
|
||||
# tard en 6.21.2 ; avant : PYSEC-2026-3910/3911 (fix 6.16.1).
|
||||
"pypdf": (6, 21, 2),
|
||||
# BUG-095 : 2.13.0 a son propre advisory (CVE-2026-102274, fix 2.14.0).
|
||||
"pyjwt": (2, 14, 0), # PYSEC-2026-178 (2.13.0) puis CVE-2026-102274 (2.14.0)
|
||||
"urllib3": (2, 8, 0), # CVE-2026-97687, CVE-2026-97688, CVE-2026-97689 (fix 2.8.0)
|
||||
"multidict": (6, 9, 1), # CVE-2026-104874 (fix 6.9.1 ; 6.7.x toolcache runner)
|
||||
# #224 : transitives / préinstallées toolcache, auditées par pip-audit.
|
||||
"brotli": (1, 2, 1), # PYSEC-2026-4322, GHSA-9v8h-qqgm-4m35 (fix 1.2.1)
|
||||
"filelock": (4, 2, 1), # CVE-2026-112940, CVE-2026-112913, CVE-2026-112907 (fix 4.2.1)
|
||||
"opentelemetry-api": (1, 45, 1), # CVE-2026-114603 (fix 1.45.1)
|
||||
}
|
||||
|
||||
def test_security_floors_are_declared(self):
|
||||
|
||||
Reference in New Issue
Block a user