
T3 Code 61c3794c 로컬 경로 잔여물. 페어링된 filesystem:read 클라이언트가 절대 경로 또는 ~/ 경로로 호스트 파일을 열 수 있습니다. 쓰기는 워크스페이스 내로 제한됩니다. 루프백 실습 환경.
T3 Code에 휴대폰이나 두 번째 머신을 페어링하면 프로젝트 파일을 열 수 있습니다. 바로 그 동일한 권한 부여로 SSH 키도 열 수 있습니다. 파일 읽기 API는 절대 경로 또는 ~/ 경로를 받아들이며, 쓰기에는 여전히 적용되는 워크스페이스 경계를 건너뜁니다. 상대 경로 ../는 계속 차단됩니다. 읽기 전용 MCP 에이전트는 이 권한을 받지 않습니다.
분류: 경로 잔여 결함
도달 범위: 로컬 (페어링된 filesystem:read; 소유자가 해당 스코프를 부여한 경우 페어링된 휴대폰이나 브라우저도 해당)
T3 Code 61c3794c - Ping
| ID | 아직 CVE 없음 |
| 분류 | 경로 잔여 결함 |
| 도달 범위 | 로컬 (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 |
| 실험실 | WorkspaceFileSystem에 대한 루프백 Vitest; 프로덕션 호스트 없음 |
이미 filesystem:read를 보유한 자격 증명이 필요합니다. 기본 페어링에는 해당 스코프와 terminal:operate도 포함됩니다. 게스트 공유는 이 RPC에 도달하지 않습니다. MCP 읽기 전용은 orchestration:read만 해당합니다.
| 권한 | 메서드 / 싱크 | 정찰 / 무결성 / 가용성 | 실험실 입증 또는 추론 |
|---|---|---|---|
| 절대 경로로 호스트 파일 읽기 | WorkspaceFileSystem.readFile / RPC projectsReadFile에서 relativePath를 절대 경로로 설정 | 정찰 (호스트 파일) | 실험실 입증. 증거 t3f01w8k2 반환됨 |
~/로 호스트 파일 읽기 | 실험실 HOME 아래 relativePath를 ~/.lab-secret로 설정한 동일 싱크 | 정찰 | 실험실 입증. 동일 증거 |
| 절대 미디어 경로에 대한 서명된 에셋 URL 생성 | assetsCreateUrl media-file | 정찰 | 소스에서 추론. 이 실험실의 오라클은 아님 |
음성 대조: 상대 경로 ../ | 워크스페이스 밖으로 나가는 경로로 readFile 호출 | 해당 없음 | 실험실 입증. WorkspacePathOutsideRootError |
| 음성 대조: 절대 경로 쓰기 | 동일한 절대 비밀 경로로 writeFile 호출 | 해당 없음 | 실험실 입증. 거부됨, 비밀 변경 없음 |
| 음성 대조: MCP 읽기 전용 | mcpClientScopes("read-only") 대 projectsReadFile | 해당 없음 | 실험실 입증. 거부됨 |
이 잔여 결함에서도 닫혀 있는 부분
| 축 | 메서드 / 싱크 | 닫혀 있는 이유 |
|---|---|---|
| 무결성 | 절대 경로에 의한 워크스페이스 쓰기 | resolveWriteTarget이 실제 루트로 제한하며 .git을 거부함 |
| 정찰 | 상대 경로 ../ 읽기 | resolveRelativePathWithinRoot |
| 정찰 | T3 secretsDir 및 stateDir/*.sqlite | isServerInternalPath |
| 정찰 | 게스트 공유 HTTP | 게스트 토큰은 SessionStore에 절대 들어가지 않음 |
| 정찰 | MCP 읽기 전용 /mcp | filesystem:read 없음 |
| 무결성 | 인증 없는 루프백 RPC | EnvironmentAuthPolicy가 unsafe-no-auth가 아님 |
제품 문서(docs/internals/environment-auth.md)는 filesystem:read를 호스트 읽기 권한 부여로 설명합니다. UI는 여전히 워크스페이스 상대 경로를 전송합니다. 서버는 정당한 클라이언트가 생성하지 않는 입력을 받아들입니다. 표준 페어링에는 셸도 포함됩니다.
pingdotgg/t3code 61c3794c를 고정했습니다. resolveReadTarget은 ~/를 확장하고, 절대 경로를 realpath 처리한 뒤 isInsideRealRoot 없이 반환합니다. 쓰기는 그 검사를 수행합니다. 공개 이슈 #316은 쓰기에서만 제약 없는 cwd를 닫았습니다.
잘못된 접근: MCP 읽기 전용을 projectsReadFile의 호출자로 간주한 것(그렇지 않음); 이를 인증 없는 잔여 결함으로 간주한 것(페어링된 권한 부여임).
python3 t3code-abspath-host-read-Abraxas-Labs.py
또는:
cd lab
./run.sh
pingdotgg/t3code를 61c3794c에서 lab/src로 클론하고, pnpm으로 설치하며, lab-home/.lab-secret 아래에 witness를 심고 Vitest를 실행합니다. 루프백 전용입니다. 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 이후에는 resolveWriteTarget이 이미 하는 것처럼 realpath(cwd) 내부에 대상이 있도록 요구하세요. 읽기와 메타데이터에서 knownWorkspaces.assertContains(input.cwd)를 호출하세요. 프로젝트가 없는 절대 경로에 대해 media-file URL을 생성하는 것을 중단하세요. isServerInternalPath를 stateDir 전체로 확장하세요.
61c3794c32b0eeebfac09add43e403618c65d2d7WorkspaceFileSystem.resolveReadTargetGNU Affero GPL v3.0. LICENSE를 참조하세요. 루프백 실험실 전용. 보증 없음.
Abraxas Labs [email protected]
CVE를 Abraxas Labs에 크레딧해 주세요.