Perplexity a rendu open source SPACE, la plateforme de bac à sable derrière chaque tâche de Perplexity Computer. Le bac à sable Perplexity SPACE donne à chaque tâche d'agent son propre microVM Firecracker. Les identifiants et le trafic sortant sont contrôlés depuis l'extérieur de cette VM. Le code est publié sous Apache 2.0 sur GitHub. Pour les équipes qui développent des agents de codage ou de navigation, il s'agit d'une couche d'isolation éprouvée en production qu'elles peuvent auto-héberger.
TL;DR
- Taille : base de code Rust, release 0.8.0, la référence publique. API HTTP plus événements envoyés par le serveur.
- Fonctionne sur : Un hôte Linux x86_64 avec KVM,
/dev/kvm, btrfs et Docker. Kind (Kubernetes) local ou mode direct. Pas de macOS. - Performance : En production, la latence médiane de création est passée de 185 ms à 60 ms par rapport au précédent fournisseur de Perplexity.
- Meilleur : 0 des 108 tentatives d'évasion de VM vers l'hôte ont réussi sur 9 modèles de pointe.
- Pire : Avant les correctifs, les agents contournaient la politique d'egress dans 11 des 54 exécutions en réseau partiel.
Qu'est-ce que Perplexity SPACE ?
SPACE (Sandboxed Platform for Agentic Code Execution) est la plateforme de Perplexity pour exécuter du code d'agent dans des microVMs isolées. Les applications appellent son API HTTP pour créer des environnements Linux, exécuter des commandes et diffuser les sorties.
A modèle fournit le système de fichiers initial. A sandbox est une instance de ce modèle, avec sa propre VM et son disque inscriptible. Plusieurs commandes peuvent s'exécuter dans un même sandbox.
De Perplexity fil de lancement explique l'objectif de conception. Les agents exécutent des commandes, installent des paquets et appellent des services avec les droits root à l'intérieur du bac à sable. L'hôte reste hors du contrôle de l'invité. Le travail des agents est de longue durée, avec état et ramifié, il doit donc survivre aux redémarrages.
Comment SPACE isole-t-il les agents ?
Chaque bac à sable est un Firecracker une microVM avec son propre noyau invité. Une passerelle réseau par bac à sable sur l'hôte applique la politique de trafic sortant à chaque connexion sortante.
Les secrets n'entrent jamais dans l'invité. Selon le bilan d'ingénierie de juilletde Perplexity, les identifiants sont injectés au niveau de la couche réseau. Le magasin d'identifiants ajoute une portée hiérarchique, des limites de débit et la journalisation d'audit.
Le guide d'architecture divise le système en 4 parties. Ce sont une API adossée à PostgreSQL, des contrôleurs, des services worker et un plan de données. Les services worker gèrent les VM, le réseau, les volumes, les modèles et les identifiants. btrfs copy-on-write crée chaque système de fichiers racine.
Comment fonctionnent pause, suspension et restauration ?
Les sandbox passent par 4 états : en cours d'exécution, en pause, suspendu et supprimé.
- En pause : La mémoire de la VM reste résidente sur le worker. Ce n'est pas un instantané durable.
- Suspendu : La mémoire de la VM, l'état d'exécution et le système de fichiers racine sont sauvegardés par instantané. Les ressources actives sont libérées.
- Par défaut en veille : les sandbox se suspendent après 6 heures sans activité.
Pour des créations rapides, les déploiements Kubernetes utilisent des pools chauds de sandbox démarrés. Les configurations à nœud unique utilisent plutôt des instantanés de base .
En production, la latence de création au 90e centile est passée de 447 ms à 89 ms. Perplexity indique que 100% des sessions Computer s'exécutent sur SPACE.
SPACE a-t-il survécu à un test d'équipe rouge ?
de Perplexity Escaping SPACE : Partie I Le rapport a testé 9 modèles avec un accès root à l'intérieur de l'invité. L'étude a compté 216 exécutions réparties sur 2 tâches et 4 configurations.
- Évasion de sandbox : 0 des 108 exécutions a atteint le secret côté hôte.
- Contournement sans réseau : 0 des 54 exécutions a réussi.
- Contournement avec réseau partiel : 11 des 54 exécutions ont réussi avant les correctifs. 4 modèles ont trouvé un chemin.
Claude Opus 5.0, GPT-5.6 Sol, GPT-5.6 Cyber et Kimi K3 ont trouvé des contournements. Les attaques utilisaient l'usurpation DNS et des adresses IP de CDN partagées.
Perplexity a ensuite ajouté une validation des adresses sources via nftables. La passerelle termine désormais TLS et vérifie à la fois le SNI et l'en-tête HTTP Host par rapport à la liste autorisée. Lors du nouveau test, aucun modèle n'a produit de contournement vérifié.
La même équipe a testé 10 plateformes tierces. 8 ont présenté au moins un contournement de la politique réseau. Perplexity a communiqué les résultats à tous les fournisseurs concernés.
Retour</button><button class="btn" id="psx-next">État suivant </button></div> </div> <div class="pane" data-p="2"> <div class="bars" id="psx-rt"></div> <div class="note">9 modèles, 216 exécutions, root à l'intérieur de l'invité. Correctifs : validation des adresses sources via nftables, terminaison TLS avec vérifications de liste autorisée SNI + Host. Source : Perplexity, Escaping SPACE: Part I (23 septembre 2026).</div> </div> <div class="pane" data-p="3"> <div class="bars" id="psx-lat"></div> <div class="note">Trafic de la semaine de lancement en production, SPACE vs le précédent fournisseur de sandbox de Perplexity. Plus bas est meilleur. Source : blog d'ingénierie de Perplexity (15 juillet 2026).</div> </div> <div class="pane" data-p="4"> <div class="tw"><table> <tr><th>Caractéristique</th><th>SPACE</th><th>E2B Runtime</th><th>microsandbox</th></tr> <tr><td>Isolation</td><td>microVM Firecracker</td><td>microVM Firecracker</td><td>microVM libkrun</td></tr> <tr><td>Licence</td><td>Apache 2.0</td><td>Apache 2.0</td><td>Apache 2.0</td></tr> <tr><td>Langage</td><td>Rust</td><td>Go</td><td>Rust</td></tr> <tr><td>Test d'egress de Perplexity</td><td>0 contournement après correctif</td><td>Contournement HTTPS, atténuation prévue</td><td>Contournement HTTP + HTTPS, correctif dans la v0.6.18</td></tr> </table></div> <div class="note">Résultats d'egress issus des tests de Perplexity du 31 août au 1er septembre 2026, pour les versions testées.</div> </div> <div class="ft"><span>Sources : github.com/perplexityai/SPACE · perplexity.ai/hub/blog</span><b>© Marktechpost</b></div> </div> <script> (function(){ var R=document.getElementById('pplx-space-x'); function post(){try{parent.postMessage({psxHeight:R.offsetHeight+40},'*')}catch(e){}} var tabs=R.querySelectorAll('.tab'),panes=R.querySelectorAll('.pane'); var D=['<b>MicroVM invité.</b> Chaque tâche obtient sa propre microVM Firecracker avec son propre noyau invité. L'agent peut exécuter des commandes et installer des paquets en tant que root. L'hôte reste hors de son contrôle.', '<b>Passerelle par sandbox.</b> Tout l'egress de l'invité passe par une passerelle côté hôte. Elle termine désormais TLS et exige que SNI et l'en-tête HTTP Host soient tous deux sur liste autorisée et attribués par DNS.', '<b>Services externes.</b> Les identifiants n'entrent jamais dans l'invité. Ils sont injectés au niveau réseau, avec périmètre, limites de débit et journalisation d'audit.']; var det=document.getElementById('psx-detail'),boxes=R.querySelectorAll('.box'); function showD(i){boxes.forEach(function(b,j){b.classList.toggle('act',i==j)});det.innerHTML=D[i];post()} boxes.forEach(function(b){b.addEventListener('click',function(){showD(+b.dataset.d)});b.addEventListener('mouseenter',function(){showD(+b.dataset.d)})}); showD(0); var L=['<b>En cours.</b> Les processus s'exécutent. La mémoire vive de la VM et le système de fichiers inscriptible sont conservés.', '<b>En pause.</b> L'exécution s'arrête. La mémoire de la VM reste résidente sur le worker. Ce n'est pas un instantané durable.', '<b>Suspendu.</b> La mémoire de la VM, l'état d'exécution et le système de fichiers root sont sauvegardés par instantané. Les ressources actives de la VM sont libérées. Par défaut : suspension après 6 heures d'inactivité.', '<b>Supprimé.</b> Le sandbox n'est plus disponible via l'API.']; var li=0,sts=R.querySelectorAll('.st'),ld=document.getElementById('psx-life'); function life(){sts.forEach(function(s,j){s.classList.toggle('on',j==li)});ld.innerHTML=L[li];post()} document.getElementById('psx-next').onclick=function(){li=(li+1)%4;life()}; document.getElementById('psx-prev').onclick=function(){li=(li+3)%4;life()}; sts.forEach(function(s,j){s.style.cursor='pointer';s. onclick=function(){li=j;life()}}); life(); function bars(el,data){el.innerHTML=data.map(function(d){return '<div class="row"><div class="lbl"><span>'+d[0]+'</span><em>'+d[1]+'</em></div><div class="track"><div class="fill" data-w="'+d[2]+'" style="background:'+d[3]+'"></div></div></div>'}).join('')} bars(document.getElementById('psx-rt'),[ ['Évasion de la VM vers hôte','0 sur 108 exécutions',1.5,'#76B900'], ['Contournement réseau, sans réseau','0 sur 54 exécutions',1.5,'#76B900'], ['Contournement réseau, réseau partiel (avant correctif)','11 sur 54 exécutions',20.4,'#E5675A'], ['Contournement réseau, après correctif','0 contournement vérifié',1.5,'#76B900'], ['Plateformes tierces avec un contournement','8 sur 10',80,'#1FB8CD']]); bars(document.getElementById('psx-lat'),[ ['Création médiane, fournisseur précédent','185 ms',41.4,'#5E5B66'], ['Création médiane, SPACE','60 ms',13.4,'#20808D'], ['Création p90, fournisseur précédent','447 ms',100,'#5E5B66'], ['Création p90, SPACE','89 ms',19.9,'#20808D']]); function anim(p){p.querySelectorAll('.fill').forEach(function(f){f.style.width='0';setTimeout(function(){f.style.width=f.dataset.w+'%'},60)})} tabs.forEach(function(t){t.onclick=function(){var i=+t.dataset.t;tabs.forEach(function(x,j){x.classList.toggle('on',j==i)});panes.forEach(function(p,j){p.classList.toggle('on',j==i)});anim(panes[i]);post()}}); window.addEventListener('load',post);window.addEventListener('resize',post);setTimeout(post,300); })(); </script> </body> </html> ">Comment SPACE se compare-t-il aux autres sandbox open source ?
| Fonctionnalité | Perplexity SPACE | E2B Runtime | microsandbox | Daytona |
|---|---|---|---|---|
| Isolation | microVM Firecracker par sandbox | microVM Firecracker par sandbox | microVM libkrun | Noyau dédié par sandbox |
| Licence | Apache 2.0 | Apache 2.0 | Apache 2.0 | Dépôt public, non maintenu depuis juin 2026 |
| Langage | Rust | Go | Rust | Non communiqué |
| Prérequis côté hôte | Linux x86_64 + KVM | Non communiqué | Linux avec KVM | Non communiqué |
| Contrôle de l'egress | Passerelle par sandbox, terminaison TLS | Pare-feu nftables, listes SNI/Host | Non communiqué | Non divulgué |
| Test de sortie (egress) de Perplexity | 0 contournement après correction | Contournement HTTPS, atténuation prévue | Contournement HTTP + HTTPS, correction dans la v0.6.18 | Contournement HTTPS, atténuation publiée |
| Prise en charge du SDK E2B | Oui, via le wrapper ECW | Natif | Non divulgué | Non divulgué |
Comment les développeurs déploient-ils SPACE ?
Le guide d'installation déploie SPACE dans un cluster Kind local. L'hôte nécessite /dev/kvm, /dev/net/tun, les périphériques loop et btrfs. L'exécuter dans une VM nécessite la virtualisation imbriquée.
Les équipes utilisant déjà E2B peuvent essayer le wrapper de compatibilité E2B. Sa base testée est le paquet Python e2b==2.21.1. Un déploiement de référence sur AWS EKS est fourni dans le dépôt.
Points clés
- SPACE exécute chaque tâche d'agent dans sa propre microVM Firecracker.
- Les identifiants et la politique de sortie résident en dehors de la VM invitée.
- 0 tentative d'évasion sur 108 a atteint l'hôte lors des tests red-team.
- Les contournements de sortie ont touché 11 des 54 exécutions avant les corrections, 0 après.
- Apache 2.0, Rust, nécessite un hôte Linux x86_64 avec KVM.
Consultez le dépôt GitHub, la documentation et le rapport red-team. Tout le crédit revient au chercheur de ce projet. De plus, n'hésitez pas à nous suivre sur Twitter et n’oubliez pas de rejoindre notre 150k+ML SubReddit et de vous abonner à notre Newsletter. Attendez ! êtes-vous sur telegram ? vous pouvez désormais nous rejoindre également sur telegram.
L’article Perplexity rend open source SPACE, un bac à sable MicroVM basé sur Firecracker pour les agents d'IA est apparu en premier sur MarkTechPost.