
T3 Code 61c3794c résidu de chemin local. Un client filesystem:read apparié peut ouvrir des fichiers de l'hôte par chemin absolu ou ~/. Les écritures restent dans l'espace de travail. Laboratoire en boucle locale.
Vous associez un téléphone ou une seconde machine à T3 Code pour qu'il puisse ouvrir les fichiers du projet. Cette même autorisation peut ouvrir votre clé SSH. L'API de lecture de fichiers accepte un chemin absolu ou un chemin ~/ et contourne la clôture de l'espace de travail que les écritures respectent encore. Le chemin relatif ../ reste bloqué. Un agent MCP en lecture seule n'obtient pas cette autorisation.
Classe : Chemin résiduel
Portée : Locale (client associé avec filesystem:read ; également un téléphone ou navigateur associé si le propriétaire a accordé cette portée)
T3 Code 61c3794c - Ping
| ID | pas encore de CVE |
| Classe | Chemin résiduel |
| Portée | Locale (client associé détenant filesystem:read) |
| CWE | CWE-22 / CWE-73 |
| CVSS | Moyen : 6.5 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N |
| Produit | T3 Code |
| Affecté | 61c3794c32b0eeebfac09add43e403618c65d2d7 (après v0.1.6) |
| Auth | session associée ou à autorisation standard avec filesystem:read |
| Licence | GNU Affero GPL v3.0 |
| Labo | Vitest en boucle locale contre WorkspaceFileSystem ; aucun hôte de production |
Nécessite un identifiant détenant déjà filesystem:read. L'association par défaut inclut cette portée, ainsi que terminal:operate. Les partages invités n'atteignent pas ce RPC. Le mode MCP en lecture seule correspond uniquement à orchestration:read.
| Privilège | Méthode / point d'entrée | Reconnaissance / intégrité / disponibilité | Prouvé en labo ou déduit |
|---|---|---|---|
| Lire un fichier de l'hôte par chemin absolu | WorkspaceFileSystem.readFile / RPC projectsReadFile avec relativePath défini sur un chemin absolu | Reconnaissance (fichier de l'hôte) | Prouvé en labo. Témoin t3f01w8k2 retourné |
Lire un fichier de l'hôte via ~/ | même point d'entrée avec relativePath ~/.lab-secret sous un HOME de labo | Reconnaissance | Prouvé en labo. Même témoin |
| Générer une URL d'actif signée pour un chemin média absolu | assetsCreateUrl media-file | Reconnaissance | Déduit du code source. Pas l'oracle de ce labo |
Contrôle négatif : ../ relatif | readFile avec un chemin qui sort de l'espace de travail | s.o. | Prouvé en labo. WorkspacePathOutsideRootError |
| Contrôle négatif : écriture absolue | writeFile avec le même chemin secret absolu | s.o. | Prouvé en labo. refusé, secret inchangé |
| Contrôle négatif : MCP en lecture seule | mcpClientScopes("read-only") vs projectsReadFile | s.o. | Prouvé en labo. refusé |
Reste fermé sur ce résidu
| Axe | Méthode / point d'entrée | Pourquoi c'est fermé |
|---|---|---|
| Intégrité | Écritures dans l'espace de travail par chemin absolu | resolveWriteTarget confine à la racine réelle et refuse .git |
| Reconnaissance | Lecture relative ../ | resolveRelativePathWithinRoot |
| Reconnaissance | secretsDir et stateDir/*.sqlite de T3 | isServerInternalPath |
| Reconnaissance | HTTP de partage invité | Les jetons invités n'entrent jamais dans SessionStore |
| Reconnaissance | /mcp MCP en lecture seule | pas de filesystem:read |
| Intégrité | RPC en boucle locale non authentifié | EnvironmentAuthPolicy n'est pas unsafe-no-auth |
La documentation du produit (docs/internals/environment-auth.md) décrit filesystem:read comme une autorisation de lecture de l'hôte. L'interface envoie toujours des chemins relatifs à l'espace de travail. Le serveur accepte une entrée qu'un client légitime ne produit pas. L'association standard inclut également un shell.
J'ai épinglé pingdotgg/t3code 61c3794c. resolveReadTarget développe ~/, résout le chemin réel d'un chemin absolu et le retourne sans isInsideRealRoot. Les écritures effectuent cette vérification. Le ticket public #316 a fermé le cwd non contraint uniquement sur les écritures.
Fausses pistes : considérer le MCP en lecture seule comme un appelant de projectsReadFile (ce n'est pas le cas) ; considérer cela comme un résidu non authentifié (c'est une autorisation associée).
python3 t3code-abspath-host-read-Abraxas-Labs.py
ou :
cd lab
./run.sh
Clone pingdotgg/t3code à 61c3794c dans lab/src, installe avec pnpm, dépose un témoin sous lab-home/.lab-secret et exécute Vitest. Boucle locale uniquement. Node 26 et pnpm 12.
IOC abs-read=1
IOC home-read=1
IOC rel-escape=0
IOC write-abs=refused
IOC mcp-readonly-filesystem=denied
IOC secret-unchanged=1
SUCCESS T3-F01-ABSPATH t3f01w8k2
Après realpath, exiger que la cible se trouve à l'intérieur de realpath(cwd) comme le fait déjà resolveWriteTarget. Appeler knownWorkspaces.assertContains(input.cwd) lors de la lecture et des métadonnées. Cesser de générer des URL media-file pour les chemins absolus sans projet. Élargir isServerInternalPath à l'ensemble de stateDir.
61c3794c32b0eeebfac09add43e403618c65d2d7WorkspaceFileSystem.resolveReadTargetGNU Affero GPL v3.0. Voir LICENSE. Laboratoire en boucle locale uniquement. Aucune garantie.
Abraxas Labs [email protected]
Veuillez créditer la CVE à Abraxas Labs.