
T3 Code 61c3794c — остаточный локальный путь. Сопряжённый клиент filesystem:read может открывать файлы хоста по абсолютному пути или пути ~/. Запись остаётся в пределах рабочей области. Лаборатория с loopback.
Вы сопрягаете телефон или вторую машину с T3 Code, чтобы он мог открывать файлы проекта. Это же разрешение может открыть ваш SSH-ключ. API чтения файлов принимает абсолютный путь или путь ~/ и обходит ограничение рабочей области, которое записи всё ещё соблюдают. Относительный ../ остаётся заблокированным. Read-only MCP-агент не получает это разрешение.
Класс: Path leftover
Доступ: Локальный (сопряжённый filesystem:read; также сопряжённый телефон или браузер, если владелец предоставил эту область)
T3 Code 61c3794c - Ping
| ID | CVE пока нет |
| Класс | Path leftover |
| Доступ | Локальный (сопряжённый клиент, имеющий filesystem:read) |
| CWE | CWE-22 / CWE-73 |
| CVSS | Средний: 6.5 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N |
| Продукт | T3 Code |
| Затронуто | 61c3794c32b0eeebfac09add43e403618c65d2d7 (после v0.1.6) |
| Аутентификация | сопряжённая сессия или сессия со стандартным разрешением с filesystem:read |
| Лицензия | GNU Affero GPL v3.0 |
| Лаборатория | loopback Vitest против WorkspaceFileSystem; без production-хостов |
Требуется учётные данные, уже имеющие filesystem:read. Сопряжение по умолчанию включает эту область, а также terminal:operate. Гостевые доступы не достигают этого RPC. MCP read-only — это только orchestration:read.
| Привилегия | Метод / sink | Разведка / целостность / доступность | Доказано в лаборатории или выведено |
|---|---|---|---|
| Чтение файла хоста по абсолютному пути | WorkspaceFileSystem.readFile / RPC projectsReadFile с relativePath, установленным в абсолютный путь | Разведка (файл хоста) | Доказано в лаборатории. Свидетель t3f01w8k2 вернулся |
Чтение файла хоста через ~/ | тот же sink с relativePath ~/.lab-secret под лабораторным HOME | Разведка | Доказано в лаборатории. Тот же свидетель |
| Создание подписанного URL ресурса для абсолютного пути к медиа | assetsCreateUrl media-file | Разведка | Выведено из исходного кода. Не оракул этой лаборатории |
Негативный контроль: относительный ../ | readFile с путём, выходящим за пределы рабочей области | н/д | Доказано в лаборатории. WorkspacePathOutsideRootError |
| Негативный контроль: абсолютная запись | writeFile с тем же абсолютным путём к секрету | н/д | Доказано в лаборатории. Отказано, секрет не изменён |
| Негативный контроль: MCP read-only | mcpClientScopes("read-only") против projectsReadFile | н/д | Доказано в лаборатории. Отказано |
Остаётся закрытым при этом leftover
| Ось | Метод / sink | Почему закрыто |
|---|---|---|
| Целостность | Записи в рабочую область по абсолютному пути | resolveWriteTarget ограничивает реальным корнем и отказывает для .git |
| Разведка | Чтение относительного ../ | resolveRelativePathWithinRoot |
| Разведка | T3 secretsDir и stateDir/*.sqlite | isServerInternalPath |
| Разведка | HTTP гостевого доступа | Гостевые токены никогда не попадают в SessionStore |
| Разведка | MCP read-only /mcp | нет filesystem:read |
| Целостность | Неаутентифицированный loopback RPC | EnvironmentAuthPolicy не равен unsafe-no-auth |
Документация продукта (docs/internals/environment-auth.md) описывает filesystem:read как разрешение на чтение хоста. UI по-прежнему отправляет пути относительно рабочей области. Сервер принимает ввод, который легитимный клиент не производит. Стандартное сопряжение также включает оболочку.
Я зафиксировал pingdotgg/t3code 61c3794c. resolveReadTarget раскрывает ~/, выполняет realpath для абсолютного пути и возвращает его без isInsideRealRoot. Записи выполняют эту проверку. Публичный issue #316 закрыл неограниченный cwd только для записей.
Неверные пути: трактовка MCP read-only как вызывающего projectsReadFile (это не так); трактовка этого как неаутентифицированного leftover (это сопряжённое разрешение).
python3 t3code-abspath-host-read-Abraxas-Labs.py
или:
cd lab
./run.sh
Клонирует pingdotgg/t3code на коммит 61c3794c в lab/src, устанавливает зависимости через pnpm, размещает маркер-свидетель в lab-home/.lab-secret и запускает Vitest. Только loopback. Node 26 и 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
После realpath требуйте, чтобы целевой путь находился внутри realpath(cwd), как это уже делает resolveWriteTarget. Вызывайте knownWorkspaces.assertContains(input.cwd) при чтении и получении метаданных. Прекратите создавать URL-адреса media-file для абсолютных путей без проекта. Расширьте isServerInternalPath на весь stateDir.
61c3794c32b0eeebfac09add43e403618c65d2d7WorkspaceFileSystem.resolveReadTargetGNU Affero GPL v3.0. См. LICENSE. Только для локальной лаборатории. Без гарантий.
Abraxas Labs [email protected]
Пожалуйста, указывайте авторство CVE для Abraxas Labs.