
Une preuve de concept pour CVE-2026-39987
Avertissement Ce script est destiné UNIQUEMENT à des fins éducatives et de test autorisé. Toute utilisation non autorisée de cet outil contre des systèmes sans permission explicite est ILLÉGALE. L'auteur n'est pas responsable de toute mauvaise utilisation de ces informations.
Les versions de Marimo antérieures à 0.23.0 présentent une vulnérabilité critique d'exécution de commandes à distance (RCE) sans authentification préalable. Le point de terminaison /terminal/ws ne met pas en œuvre des contrôles d'accès adéquats, permettant à un attaquant non authentifié d'obtenir un accès complet à un shell interactif sur le système.
| Détails | Informations |
|---|---|
| CVE | CVE-2026-39987 |
| Sévérité | CRITIQUE |
| Score CVSS | 9.3 (CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H) |
| Type | Exécution de code à distance (RCE) sans authentification |
| Vecteur | WebSocket (/terminal/ws) |
| Produit affecté | Marimo < 0.23.0 |
| Correctif | Marimo ≥ 0.23.0 |
http.favicon.hash:-1864630356
services.http.response.favicons.hashes: -1864630356
-1864630356/api/versionNécessite Python 3.10+. Les dépendances sont gérées avec uv, d'Astral.
# install uv (skip if already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh
uv venv
uv pip install -r requirements.txt
uv run poc.py -t <target_url>
-t, --target_url (obligatoire) : URI WebSocket du point de terminaison /terminal/ws de la cible.uv run poc.py -t wss://<target-host>/terminal/ws
Une fois connecté, vous obtenez une session pty brute interactive. Des commandes supplémentaires sont disponibles localement (jamais envoyées au shell distant telles que saisies) :
| Commande | Description |
|---|---|
.upload | Ouvre une invite locale pour un chemin de fichier local et une destination distante, puis envoie le fichier. |
!upload <local_path> <remote_path> | Identique à la commande ci-dessus, en une seule ligne. |
!download <remote_path> <local_path> | Récupère un fichier depuis la cible vers votre machine locale. |
/exit, /bye | Met fin à la session localement. |
Appuyez sur Ctrl+C pour interrompre/quitter.
>= 0.23.0, ce qui corrige le contrôle d'accès manquant sur /terminal/ws.localhost ou à une interface interne et placez-le derrière un VPN/bastion pour l'accès distant./terminal/ws et les autres routes API./terminal/ws et l'activité shell non authentifiée dans les journaux du serveur ; les dorks Shodan/Censys ci-dessus peuvent également être utilisés de manière défensive pour trouver vos propres instances exposées et non corrigées.