flawopen.com/AI Security/manus-email-prompt-injection-agent-runtime-october-2026
Injection de prompt par e-mail dans Manus : le code s’est exécuté avant l’alerte
Salt Labs indique qu’un e-mail spécialement conçu pouvait amener Manus à exécuter du code dans son environnement serveur avant d’avertir l’utilisateur. Les chercheurs déclarent avoir signalé le problème de manière responsable et qu’il est résolu ; aucun CVE ni compromission réelle de victime n’est rapporté.[1]
Imaginez un employé du courrier qui lit une lettre à voix haute puis suit les consignes qu’elle cache avant de demander à son responsable si elle est fiable. L’avertissement arrive après l’action. La frontière de sécurité doit empêcher dès le départ que le texte non fiable devienne une instruction exécutable.[1]
Concepts Clés et Termes
Injection indirecte de prompt- Instructions intégrées dans un contenu que l’IA doit examiner, comme un e-mail, plutôt que données directement par l’utilisateur.[1], [5]
Environnement d’exécution de l’agent- Processus et outils dont l’agent dispose. Ses permissions et son isolation déterminent l’impact des actions influencées par le modèle.[1], [6]
Correspondances de référentiels
- Correspondance conceptuelle de FlawOpen avec MITRE CWE ; aucun fournisseur ni enregistrement CVE n’a attribué cet identifiant de faiblesse à cette démonstration de recherche. CWE-94
- OWASP GenAI 2025 — LLM01:2025 Injection de prompt
- OWASP GenAI 2025 — LLM06:2025 Agence excessive
Déroulement de l'Attaque Étape par Étape
L’utilisateur demande à Manus de consulter ses e-mails
Salt Labs indique que son test contrôlé consistait à demander à Manus d’inspecter la boîte de réception ; aucun clic supplémentaire ni vol d’identifiants n’était nécessaire.[1]
Un e-mail apporte du contenu non fiable
Le message contenait des instructions intégrées au texte ordinaire. La classification ou l’alerte du modèle ne constitue pas une frontière de sécurité pour ces données.[1]
Le contenu atteint un chemin d’exécution côté serveur
Salt Labs indique que Manus a traité le contenu via un environnement Node.js et exécuté du code avant d’afficher son avertissement et sa demande d’approbation. L’implémentation interne exacte n’est pas publique ; il s’agit du récit des chercheurs, pas d’un audit du code source.[1]
Le contexte d’exécution dispose de permissions connectées
Dans son test contrôlé, Salt Labs indique que l’environnement pouvait accéder à des jetons associés aux services connectés par l’utilisateur. La portée potentielle dépendait des intégrations et permissions disponibles.[1]
La divulgation a été corrigée
Salt Labs affirme avoir signalé le problème via le programme de bug bounty de Meta et que cette technique précise n’est plus exploitable. Il s’agissait d’une démonstration de chercheurs, pas d’une brèche chez un client ; aucun CVE ni diff public du correctif n’existe.[1]
Code Source : Vulnérable vs Sécurisé
Salt Labs ne publie ni le code vulnérable de Manus ni le diff du correctif du fournisseur. Ces exemples illustrent une erreur générale de frontière de confiance et une architecture défensive ; ils ne reconstituent pas le produit. Gardez les e-mails non fiables dans un parcours de résumé sans capacité d’exécution. Une politique serveur distincte doit autoriser l’action exacte avant qu’un outil ou un environnement puisse l’exécuter.[1], [6]
// Conception dangereuse illustrative ; ce n’est pas le code de Manus.
async function inspectEmail(email: Email) {
return agent.process(email.body, { tools: [serverSideRuntime] });
}
// Frontière plus sûre illustrative ; ce n’est ni l’implémentation ni le correctif de Manus.
async function inspectEmail(email: Email, session: AuthenticatedSession) {
const summary = SummarySchema.parse(
await readOnlyModel.summarize({ content: email.body })
);
const proposal = ActionRequestSchema.parse(
await readOnlyModel.proposeAction({ summary })
);
if (!proposal) return summary;
const approval = await approvalStore.consumeExact({
actorId: session.userId,
action: proposal.action,
resourceId: proposal.resourceId
});
const permit = await serverPolicy.authorize({
actorId: session.userId,
action: proposal.action,
resourceId: proposal.resourceId,
approval
});
if (!permit.allowed) throw new Error("Action denied");
return narrowTools.execute(permit.approvedAction);
}
Liste de Contrôle de Sécurité pour l'Ingénierie
- ✓Traitez les corps d’e-mail, pièces jointes, fils cités et contenus web récupérés comme des données non fiables, même si le modèle les juge bénins ou malveillants.[1], [5]
- ✓N’autorisez pas le résumé des e-mails à appeler un environnement de code généraliste. Séparez l’analyse en lecture seule de l’exécution des outils et utilisez des outils typés et limités.[1], [6]
- ✓Appliquez l’autorisation avant exécution dans une politique serveur ; liez l’approbation à l’acteur authentifié, à l’action et à la ressource exactes, avec une expiration courte.[6]
- ✓Préservez une isolation réelle : n’exposez pas les jetons OAuth ni des identifiants d’intégration étendus à un environnement qui traite du contenu.[1], [6]
- ✓Refusez par défaut si l’approbation, l’audit ou l’évaluation de politique est indisponible. Une alerte après exécution n’est pas une mesure préventive.[6]
- ✓Conservez les journaux d’appels d’outils et d’exécution, puis testez qu’un e-mail adversarial ne peut pas déclencher une action avant autorisation.[1], [6]
- ✓Salt Labs affirme que le problème divulgué est résolu. Vérifiez les consignes de sécurité actuelles de Manus ; n’en déduisez pas que toutes les plateformes d’agents ont la même faille.[1]
Sources
- Recherche principale de Salt Labs : How We Hijacked an AI Agent With a Single Email (1er octobre 2026)
- Communiqué Salt Security sur la recherche (1er octobre 2026)
- Article de TechRadar sur la recherche Manus (2 octobre 2026)
- MITRE CWE-94 (correspondance éditoriale FlawOpen)
- OWASP LLM01 : Injection de prompt
- OWASP LLM06 : Agentivité excessive