Alerte de sécurité : incident eMudhra / emSign, mettez à jour pip sur votre serveur Modoboa
24 octobre 2026 — Antoine Nguyen
Que s'est-il passé ?
Les 20 et 21 octobre 2026, un incident de sécurité touchant des certificats intermédiaires d'eMudhra a entraîné le retrait du certificat racine emSign des magasins de certificats publics. Les clés privées des 8 autorités de certification d'eMudhra ont été mal générées et doivent être considérées comme compromises. Quiconque les détient peut émettre, pour n'importe quel domaine, des certificats qu'accepte un client faisant confiance à emSign.
Concrètement, une machine qui fait encore confiance à emSign est exposée à des attaques de type « man-in-the-middle » sur ses connexions TLS. Cela inclut les connexions vers pypi.org : un attaquant pourrait donc fournir des paquets modifiés lors d'un pip install.
L'écosystème Python a publié des versions corrigées, listées dans l'annonce publiée sur discuss.python.org :
| Package | Fixed in | Advisory |
|---|---|---|
| certifi | 2026.10.19 | GHSA-6q48-6c7w-9gw2 |
| pip | 26.2.2 | release notes |
| uv | 0.13.4 | GHSA-hq85-5cpj-mr62 |
Pourquoi mettre à jour le système ne suffit pas
pip embarque sa propre copie de certifi et la charge toujours en plus du magasin de certificats du système. Il n'existe aucun moyen officiel de désactiver ce comportement (pypa/pip#14374). Mettre à jour le paquet ca-certificates de votre distribution est nécessaire, mais le pip de chaque environnement virtuel continue de faire confiance à emSign tant qu'il n'a pas lui-même été mis à jour.
Mon serveur Modoboa est-il concerné ?
Très probablement, oui. Modoboa s'exécute dans des environnements virtuels Python, chacun avec son propre pip, et utilise certifi via requests. Modoboa s'en sert en fonctionnement pour ses connexions HTTPS sortantes, par exemple pour vérifier la disponibilité de nouvelles versions ou récupérer des calendriers externes.
Si vous avez utilisé modoboa-installer avec ses paramètres par défaut, voici les environnements à mettre à jour :
| Virtual environment | Owner | Used by |
|---|---|---|
| /srv/modoboa/env | modoboa | Modoboa web app, RQ workers, policy daemon, cron jobs |
| /srv/radicale/env | radicale | Radicale (calendars and contacts), if enabled |
Si vous avez modifié home_dir ou venv_path dans installer.cfg, adaptez les chemins ci-dessous. Tout autre environnement virtuel présent sur la machine, ainsi que toute image Docker construite avant le 21 octobre 2026, doit être traité de la même façon.
Procédure de mise à jour
Exécutez ces étapes en tant que root sur le serveur Modoboa. Cela prend quelques minutes et n'entraîne qu'un bref redémarrage des services.
Étape 1 : mettre à jour le magasin de certificats du système
Sur Debian ou Ubuntu, lancez la commande ci-dessous. Sur les systèmes de type RHEL, utilisez plutôt dnf upgrade ca-certificates.
apt update && apt install --only-upgrade ca-certificates
Étape 2 : mettre à jour pip dans l'environnement virtuel de Modoboa
L'URL du wheel contient sa somme de contrôle SHA256 : pip vérifie donc le fichier téléchargé même si la connexion TLS n'est pas encore fiable. C'est la méthode recommandée dans l'annonce Python.
sudo -u modoboa /srv/modoboa/env/bin/python -m pip install \
"pip @ https://files.pythonhosted.org/packages/3f/06/3e4420302363fbb71be3c7f35ce042f54bfca330e3e66b3a2e3c4cca579f/pip-26.2.2-py3-none-any.whl#sha256=fd7f4dfa8190e014013b9f08f3e973f4e4c26ffd179a204895533a7254813a70"
Étape 3 : mettre à jour certifi avec le nouveau pip
sudo -u modoboa /srv/modoboa/env/bin/python -m pip install --upgrade "certifi>=2026.10.19"
Étape 4 : recommencer pour Radicale
Si Radicale est installé, répétez les étapes 2 et 3 en remplaçant modoboa par radicale et /srv/modoboa/env par /srv/radicale/env.
Étape 5 : redémarrer les services
Redémarrez les services pour que les processus en cours chargent le nouveau magasin de certificats. Sur les systèmes de type RHEL, le service supervisor s'appelle supervisord.
systemctl restart uwsgi supervisor
Vérifier que tout est à jour
Chaque environnement virtuel doit indiquer pip 26.2.2 (ou plus récent) et certifi 2026.10.19 (ou plus récent) :
for venv in /srv/modoboa/env /srv/radicale/env; do
[ -x "$venv/bin/python" ] || continue
echo "== $venv"
"$venv/bin/python" -m pip --version
"$venv/bin/python" -c "import certifi; print('certifi', certifi.__version__)"
done
La situation évolue encore, et l'annonce sera mise à jour au fil des nouveaux correctifs, y compris dans CPython. Pour toute question, contactez-nous sur les canaux habituels de la communauté.