
T3 Código 61c3794c ruta local residual. Un cliente emparejado filesystem:read puede abrir archivos del host mediante ruta absoluta o ~/. Las escrituras permanecen en el espacio de trabajo. Laboratorio de loopback.
Emparejas un teléfono o una segunda máquina con T3 Code para que pueda abrir archivos de proyecto. Esa misma concesión puede abrir tu clave SSH. La API de lectura de archivos acepta una ruta absoluta o una ruta ~/ y omite la valla del espacio de trabajo que las escrituras todavía respetan. La ruta relativa ../ permanece bloqueada. Un agente MCP de solo lectura no obtiene esta concesión.
Clase: Residuo de ruta
Alcance: Local (filesystem:read emparejado; también un teléfono o navegador emparejado si el propietario concedió ese ámbito)
T3 Code 61c3794c - Ping
| ID | aún sin CVE |
| Clase | Residuo de ruta |
| Alcance | Local (cliente emparejado que posee filesystem:read) |
| CWE | CWE-22 / CWE-73 |
| CVSS | Medio: 6.5 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N |
| Producto | T3 Code |
| Afectado | 61c3794c32b0eeebfac09add43e403618c65d2d7 (posterior a v0.1.6) |
| Autenticación | sesión emparejada o con concesión estándar con filesystem:read |
| Licencia | GNU Affero GPL v3.0 |
| Laboratorio | Vitest en loopback contra WorkspaceFileSystem; sin hosts de producción |
Requiere una credencial que ya posea filesystem:read. El emparejamiento predeterminado incluye ese ámbito, y también terminal:operate. Las comparticiones de invitado no alcanzan este RPC. MCP de solo lectura es únicamente orchestration:read.
| Privilegio | Método / sink | Reconocimiento / integridad / disponibilidad | Probado en laboratorio o inferido |
|---|---|---|---|
| Leer un archivo del host por ruta absoluta | WorkspaceFileSystem.readFile / RPC projectsReadFile con relativePath establecido en una ruta absoluta | Reconocimiento (archivo del host) | Probado en laboratorio. Testigo t3f01w8k2 devuelto |
Leer un archivo del host mediante ~/ | mismo sink con relativePath ~/.lab-secret bajo un HOME de laboratorio | Reconocimiento | Probado en laboratorio. Mismo testigo |
| Acuñar una URL de recurso firmada para una ruta de medios absoluta | assetsCreateUrl media-file | Reconocimiento | Inferido del código fuente. No es el oráculo de este laboratorio |
Control negativo: ../ relativo | readFile con una ruta que sale del espacio de trabajo | n/a | Probado en laboratorio. WorkspacePathOutsideRootError |
| Control negativo: escritura absoluta | writeFile con la misma ruta secreta absoluta | n/a | Probado en laboratorio. rechazado, secreto sin cambios |
| Control negativo: MCP de solo lectura | mcpClientScopes("read-only") frente a projectsReadFile | n/a | Probado en laboratorio. denegado |
Permanece cerrado en este residuo
| Eje | Método / sink | Por qué está cerrado |
|---|---|---|
| Integridad | Escrituras en el espacio de trabajo por ruta absoluta | resolveWriteTarget contiene a la raíz real y rechaza .git |
| Reconocimiento | Lectura relativa ../ | resolveRelativePathWithinRoot |
| Reconocimiento | secretsDir y stateDir/*.sqlite de T3 | isServerInternalPath |
| Reconocimiento | HTTP de compartición de invitado | Los tokens de invitado nunca entran en SessionStore |
| Reconocimiento | /mcp de solo lectura | sin filesystem:read |
| Integridad | RPC de loopback sin autenticación | EnvironmentAuthPolicy no es unsafe-no-auth |
La documentación del producto (docs/internals/environment-auth.md) describe filesystem:read como una concesión de lectura del host. La interfaz de usuario sigue enviando rutas relativas al espacio de trabajo. El servidor acepta entradas que un cliente legítimo no produce. El emparejamiento estándar también incluye un shell.
Fijé pingdotgg/t3code 61c3794c. resolveReadTarget expande ~/, aplica realpath a una ruta absoluta y la devuelve sin ningún isInsideRealRoot. Las escrituras sí realizan esa comprobación. El issue público #316 cerró el cwd sin restricciones solo en las escrituras.
Falsos caminos: tratar MCP de solo lectura como un llamador de projectsReadFile (no lo es); tratar esto como un residuo sin autenticación (es una concesión emparejada).
python3 t3code-abspath-host-read-Abraxas-Labs.py
o:
cd lab
./run.sh
Clona pingdotgg/t3code en 61c3794c dentro de lab/src, instala con pnpm, coloca un testigo bajo lab-home/.lab-secret y ejecuta Vitest. Solo loopback. Node 26 y 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
Después de realpath, exige que el objetivo esté dentro de realpath(cwd) tal como ya lo hace resolveWriteTarget. Llama a knownWorkspaces.assertContains(input.cwd) en la lectura y en los metadatos. Deja de generar URLs de media-file para rutas absolutas sin un proyecto. Amplía isServerInternalPath a todo stateDir.
61c3794c32b0eeebfac09add43e403618c65d2d7WorkspaceFileSystem.resolveReadTargetGNU Affero GPL v3.0. Consulta LICENSE. Solo laboratorio de loopback. Sin garantía.
Abraxas Labs [email protected]
Por favor, atribuye el CVE a Abraxas Labs.