Skip to content

test: Add outputs path-traversal negative-case regression tests - #13300

Merged
anthonyshew merged 1 commit into
mainfrom
dnukumamras/verify-turbo-json-traversal-fix
Jul 7, 2026
Merged

anthonyshew merged 1 commit into
mainfrom
dnukumamras/verify-turbo-json-traversal-fix

Conversation

@dnukumamras

@dnukumamras dnukumamras commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Why

The .. traversal rejection for outputs (#13290) and the symlink-escape handling (#13076, #13166) already landed. While verifying them I found a few cases those PRs did not assert. These are test-only additions, no behavior change.

What

  • dotdot look-alike literals that must NOT be over-rejected: %2e%2e/, full-width dots, ..\, ~/
  • a leading absolute path in outputs errors as AbsolutePathInConfig
  • negated outputs inside an incremental partition still reject traversal

Notes

  • Verified .. traversal and symlink-escape are already fully handled on main, so no production change is needed
  • One related follow-up worth a separate look: incremental input hashing globs and reads files the same way and is not covered by the output symlink guard. Lower severity since contents are hashed, not stored or restored

@dnukumamras
dnukumamras requested a review from a team as a code owner July 7, 2026 06:00
@dnukumamras
dnukumamras requested review from tknickman and removed request for a team July 7, 2026 06:00
@vercel

vercel Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
examples-basic-web Ready Ready Preview, Comment, Open in v0 Jul 7, 2026 6:33am
examples-designsystem-docs Ready Ready Preview, Comment, Open in v0 Jul 7, 2026 6:33am
examples-gatsby-web Ready Ready Preview, Comment, Open in v0 Jul 7, 2026 6:33am
examples-kitchensink-blog Ready Ready Preview, Comment, Open in v0 Jul 7, 2026 6:33am
examples-nonmonorepo Ready Ready Preview, Comment, Open in v0 Jul 7, 2026 6:33am
examples-svelte-web Ready Ready Preview, Comment, Open in v0 Jul 7, 2026 6:33am
examples-tailwind-web Ready Ready Preview, Comment, Open in v0 Jul 7, 2026 6:33am
examples-vite-web Ready Ready Preview, Comment, Open in v0 Jul 7, 2026 6:33am
turbo-site Ready Ready Preview, Comment, Open in v0 Jul 7, 2026 6:33am
turborepo-eve-agent Ready Ready Preview, Comment, Open in v0 Jul 7, 2026 6:33am

The `..` traversal rejection and the symlink-escape handling for `outputs`
already landed (#13290, #13076, #13166). These add regression coverage for
cases those PRs did not assert:

- dotdot look-alike literals that must NOT be over-rejected (`%2e%2e/`,
  full-width dots, `..\`, `~/`)
- a leading absolute path in `outputs` errors as AbsolutePathInConfig
- negated outputs inside an incremental partition still reject traversal

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@dnukumamras
dnukumamras force-pushed the dnukumamras/verify-turbo-json-traversal-fix branch from 2359e9d to b21b089 Compare July 7, 2026 06:31
@dnukumamras dnukumamras changed the title fix: Reject output symlinks whose real path escapes the repo test: Add outputs path-traversal negative-case regression tests Jul 7, 2026
@anthonyshew
anthonyshew merged commit 2ff6df9 into main Jul 7, 2026
44 checks passed
@anthonyshew
anthonyshew deleted the dnukumamras/verify-turbo-json-traversal-fix branch July 7, 2026 13:42
anthonyshew pushed a commit that referenced this pull request Jul 7, 2026
## Release v2.10.5-canary.3

> [!CAUTION]
> Versioned docs aliasing FAILED. [View
logs](https://github.com/vercel/turborepo/actions/runs/28874392650)

### Changes

- release(turborepo): 2.10.5-canary.2 (#13297) (`e6e6fb6`)
- fix: Stop ambient CARGO_INCREMENTAL from suppressing compile cache
injection (#13298) (`784af75`)
- fix: Never let compile cache storage failures fail the build (#13299)
(`a6fc6c5`)
- test: Add outputs path-traversal negative-case regression tests
(#13300) (`2ff6df9`)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
anthonyshew pushed a commit that referenced this pull request Jul 13, 2026
## Release v2.10.5

> [!CAUTION]
> Versioned docs aliasing FAILED. [View
logs](https://github.com/vercel/turborepo/actions/runs/29267191097)

### Changes

- perf: Evaluate simple include globs without wax compilation (#13285)
(`189897a`)
- chore: Dogfood native Cargo support in this repository (#13283)
(`42f067b`)
- release(turborepo): 2.10.4 (#13286) (`f2fce38`)
- ci: Remove dead sccache configuration (#13289) (`558df3f`)
- feat: Serve the Remote Cache as an sccache backend for Cargo tasks
(#13288) (`0d9803f`)
- fix: Reject output path traversal (#13290) (`733ccca`)
- fix: Disable the sccache proxy when remote cache use is off (#13291)
(`3249e22`)
- feat: Embed sccache so the Cargo compile cache needs no installation
(#13293) (`b6d0035`)
- release(turborepo): 2.10.5-canary.1 (#13294) (`e6cd498`)
- fix: Pin a flag-aware turbo canary for the eve-agent deployment
(#13295) (`e60a4bd`)
- fix: Make the sccache compile cache actually cache (#13296)
(`2ac099c`)
- release(turborepo): 2.10.5-canary.2 (#13297) (`e6e6fb6`)
- fix: Stop ambient CARGO_INCREMENTAL from suppressing compile cache
injection (#13298) (`784af75`)
- fix: Never let compile cache storage failures fail the build (#13299)
(`a6fc6c5`)
- test: Add outputs path-traversal negative-case regression tests
(#13300) (`2ff6df9`)
- release(turborepo): 2.10.5-canary.3 (#13302) (`7e44a29`)
- ci: Authenticate to Remote Cache via OIDC token exchange (#13303)
(`a86839c`)
- fix: Keep pnpm patches with version range keys during prune (#13307)
(`3c27a89`)
- test: Scrub ambient turbo configuration from integration test children
(#13306) (`b03d0d6`)
- fix: Show toolchain tasks in the TUI and never run in silence (#13308)
(`d7622b6`)
- ci: Fix change detection on push events (#13304) (`eec3d61`)
- refactor: Rename the Cargo toolchain id to rust (#13311) (`a548b02`)
- fix: Remove extraneous bun.lock entries during prune (#13317)
(`382e9f5`)
- feat: Require a user-declared name for the Cargo workspace package
(#13312) (`5f01746`)
- feat: Parse and validate the task command field (#13313) (`389ea49`)
- chore: Harden turbo-vsc to invoke turbo without a shell (#13319)
(`4a19b6e`)
- feat: Resolve and execute task command overrides (#13315) (`a549baa`)
- release(turborepo): 2.10.5-canary.4 (#13325) (`6626261`)
- feat: Run the Rust workspace tests through nextest via command
override (#13316) (`6711bbc`)
- feat: Engage the Remote Cache and sccache compile cache for Rust CI
(#13292) (`1ae2065`)
- ci: Pin GitHub Actions to full commit SHAs (#13143) (`ad614d6`)
- fix: Make npm prune rehoisting deterministic and complete (#13323)
(`2dac737`)
- feat: Report incremental cache reuse in the run summary (#13327)
(`9f3d24a`)
- chore: Remove planning docs (#13329) (`5cd1d02`)
- docs: Migrate docs site to @vercel/geistdocs package (#13320)
(`5517bb2`)
- ci: Update Remote Cache action (#13330) (`4a39887`)
- release(turborepo): 2.10.5-canary.5 (#13331) (`f699719`)
- ci: Remove path-based workflow scheduling (#13332) (`84f2b2c`)
- fix: Resolve EADDRINUSE in kitchen-sink api dev script (#13328)
(`5886c71`)
- ci: Disable telemetry messages in workflows (#13334) (`2218dea`)
- fix: Prevent Cargo run tasks from being cached (#13335) (`68f449b`)
- fix: Isolate Cargo cache by host platform (#13337) (`c71f5cd`)
- fix: Continue TUI text selection beyond viewport (#13338) (`9cbfd90`)
- ci: Dogfood Cargo target restoration (#13336) (`8ad90a7`)
- fix: Require current Cargo lockfiles for caching (#13339) (`3a3d381`)
- fix: Reject unsupported Cargo local packages (#13340) (`708d656`)
- fix: Allow outputs outside package roots (#13342) (`de6a0d3`)
- fix: Resolve Cargo lock dependencies by source (#13343) (`2223a33`)
- docs: Update Cargo workspace support (#13349) (`241ada8`)
- fix: Build Ghostty for baseline CPUs (#13352) (`a2a04cc`)
- fix: Preserve watch rerun semantics for task inputs (#13351)
(`6ed5eab`)
- fix: Isolate Command Overrides From Toolchain Cache I/O (#13354)
(`e76f0b4`)
- release(turborepo): 2.10.5-canary.6 (#13355) (`f82e2c7`)
- fix: Include patched Ghostty crate in Cargo workspace (#13357)
(`b3cd7a1`)
- ci: Shard Rust tests across runners (#13356) (`ef122d9`)
- fix: Hash Cargo build environment inputs (#13348) (`d533266`)
- fix: Synchronize Cargo prune Docker lockfile (#13350) (`ed17249`)
- chore: Update agents app Eve dependency (#13364) (`38aa7d2`)
- fix: Preserve Yarn package extension ranges when pruning (#13363)
(`6ed2fb4`)
- refactor: Add `Toolchain` output availability (#13360) (`82bcfb6`)

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

This branch was successfully deployed

1 active deployment
Preview – turborepo-eve-agent b21b089a Deployed Jul 7, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants