DeepJack : des arguments cachés dans le deeplink d'installation MCP de Cursor mènent à l'exécution de code
Un lien cursor:// piégé installe un serveur MCP contrôlé par l'attaquant dont la vraie commande défile hors de l'écran dans la boîte de dialogue, aboutissant à une exécution de code non sandboxée après un seul clic.
En bref L’attention portée à la sécurité des agents de code se concentre surtout sur l’injection de prompt et les chaînes d’approvisionnement MCP. Une analyse publiée par Adversa AI le 15 juillet 2026 pointe une surface plus discrète : le gestionnaire de schéma d’URL
cursor://que Cursor enregistre à l’installation. Un deeplink piégé peut piloter l’IDE pour installer un serveur MCP contrôlé par l’attaquant et exécuter une commande non sandboxée sous le compte de la victime, après un seul clic et une seule confirmation — parce que la boîte de dialogue d’installation ne montre pas de façon fiable la commande qu’elle demande d’approuver. Les chercheurs nomment cette classe de bug DeepJack. Le problème d’affichage sous-jacent était connu en interne dès le 27 avril 2026 et, selon le rapport, se reproduisait encore sur Cursor 3.9.8 à la publication.
De quoi s’agit-il ?
Cursor, comme la plupart des outils de code de bureau, enregistre un schéma d’URL personnalisé (cursor://) pour que des liens pilotent l’IDE : ouvrir un fichier, lancer la revue d’une pull request, installer un serveur MCP. La route d’installation accepte un nom de serveur et une configuration encodée en base64 décrivant la commande à exécuter. Cette commande s’exécute avec toute l’autorité du développeur — sans aucun sandbox entre elle et ses fichiers, ses jetons et son shell.
DeepJack est le constat que la boîte de dialogue de confirmation censée protéger cette installation peut être amenée à cacher précisément ce que l’utilisateur approuve. Elle s’appuie sur une faille de deeplink Cursor déjà divulguée publiquement (corrigée dans Cursor 1.3) dont le remède consistait à afficher les arguments de la commande. La recherche DeepJack montre que les afficher ne suffit pas si la boîte de dialogue les rend illisibles.
Comment ça marche
Le rapport décrit deux variantes de la même faiblesse. Nous les résumons au niveau conceptuel ; aucun payload fonctionnel n’est reproduit ici.
La première est une faiblesse d’affichage dans la boîte de dialogue. Les arguments sont présentés dans un champ texte sur une seule ligne. L’attaquant rembourre la partie visible avec une longue suite de caractères blancs/de contrôle, de sorte qu’un jeton d’apparence anodine (par exemple une commande calculatrice) est tout ce qui tient à l’écran, tandis que la queue malveillante — une commande sortante [REDACTED] — défile hors du bord droit. L’utilisateur lit le préfixe inoffensif et approuve ; Cursor exécute la chaîne complète.
La seconde est un blanchiment de confiance via un deeplink imbriqué. Une seconde URI d’installation cursor:// est doublement encodée en URL et intégrée dans le paramètre url d’un lien pr-review d’apparence banale. Le lien externe est analysé une fois comme une demande de revue de code et le paramètre imbriqué n’est jamais re-validé récursivement : l’URI d’installation passe donc comme une chaîne opaque et atteint le gestionnaire d’installation en aval. La victime croit avoir cliqué sur « relire cette PR », pas sur « installer un serveur ».
Débarrassé de ses astuces d’encodage, il s’agit d’injection d’arguments via un gestionnaire de schéma d’URL personnalisé (CWE-88) — une classe de bug de bureau vieille de plusieurs décennies, avec des antécédents bien en dehors de l’outillage IA. Ce qui est nouveau, c’est là où elle atterrit.
Pourquoi c’est important
Le point terminal compromis est un poste de développeur : clés SSH, identifiants cloud, code source, jetons de session actifs, et un chemin direct vers la CI et la production. Un bug de gestionnaire d’URL qui ne serait qu’une nuisance dans un lecteur multimédia devient ici un point d’appui dans la chaîne d’approvisionnement logicielle.
La probabilité qu’un lien donné réussisse est modeste — il faut toujours un clic et une approbation. Le problème est l’asymétrie : faible probabilité, rayon d’impact quasi total. Et la surface est largement non surveillée. Un tour d’horizon multi-agents dans le même rapport montre que la plupart des outils de code grand public (Cursor, VS Code, Windsurf, Warp, et d’autres) enregistrent un gestionnaire d’URL, et que la majorité exposent une route se terminant par installer-ou-exécuter — des gestionnaires que beaucoup d’équipes sécurité ignoraient être enregistrés.
Défenses
Vous n’avez pas besoin d’un correctif éditeur pour réduire l’exposition.
- Mettez les serveurs MCP en liste blanche via les paramètres managés. N’autorisez que des serveurs nommés provenant de sources authentiques (votre organisation ou le mainteneur d’origine) et bloquez toute installation initiée par l’utilisateur ou l’agent.
- Filtrez les routes de deeplink installer/exécuter au niveau de la passerelle. Bloquez ou mettez en quarantaine les motifs d’URI d’installation spécifiques (
cursor://…/mcp/install,vscode://mcp/install, l’installation via le registre Windsurf,warp://launch/de Warp) sur les passerelles mail et web qui véhiculent l’appât. - Auditez et, si possible, désactivez les gestionnaires de schéma d’URL personnalisés (
cursor://,vscode://,codex://,claude-cli://) sur les machines de développement — commencez par inventorier ceux qui sont enregistrés. - Surveillez ce que les agents lancent. Alertez sur toute définition de serveur MCP nouvelle ou modifiée. Le signal à forte valeur — ce qui a été montré à l’utilisateur par rapport à ce qui s’est réellement exécuté — nécessite une visibilité en ligne sur le trafic MCP de l’agent.
- Traitez chaque paramètre de deeplink comme une entrée hostile, et chaque boîte de dialogue de consentement comme insuffisante à elle seule. Tenez les agents à l’écart des bases de code non fiables et ne comptez pas sur un unique écran de confirmation comme seule frontière.
Status
| Élément | Référence | Date | Notes |
|---|---|---|---|
| Divulgation DeepJack | Adversa AI | 2026-07-15 | Deux variantes ; reproduite sur Cursor 3.9.8 |
| Faille antérieure liée | CVE-2025-54133 (GHSA-r22h-5wp2-2wfv) | 2025 | La boîte n’affichait pas les arguments ; corrigé dans Cursor 1.3 |
| Cause racine (dialogue) | Triage Cursor (selon le rapport) | 2026-04-27 | Le champ sur une ligne laisse le contenu défiler hors champ |
| Weaponisation antérieure de deeplink | Proofpoint « CursorJack » | 2025 | Phishing vers exécution de commande via deeplink d’installation |
| Statut éditeur | Rapports fermés comme doublons | 2026 | Primitive signalée active à la publication |
Le bon cadrage n’est pas « encore un bug Cursor ». C’est que les outils de code agentiques ont chacun reconstruit de zéro le vieux message « êtes-vous sûr de vouloir exécuter ceci ? » — et lui demandent d’afficher en toute sécurité des commandes fournies par l’attaquant, sur les machines les plus précieuses d’une organisation, sans rien derrière.
Sources
- → https://adversa.ai/blog/cursor-security-deepjack-deeplink-vulnerability-mcp-rce/
- → https://nvd.nist.gov/vuln/detail/CVE-2025-54133
- → https://github.com/cursor/cursor/security/advisories/GHSA-r22h-5wp2-2wfv
- → https://www.proofpoint.com/us/blog/threat-insight/cursorjack-weaponizing-deeplinks-exploit-cursor-ide
- → https://cwe.mitre.org/data/definitions/88.html