@archive tool handles the bundles an agent downloads or ships — zip, tar, tar.gz/tgz and tar.bz2 — without a shell and without the classic traps: an entry named ../../etc/passwd, an absolute path, a symlink pointing outside the destination, or a 10 GB “bomb” declared as 1 KB.
Subcommands
Safety
- Zip-slip: absolute names, drive letters and
..escapes are refused; every destination is resolved after symlinks and must stay underto, including when an already-materialized ancestor is a symlink leading out. - Links: symlink and hard-link entries whose target resolves outside
toare refused. - Limits are enforced on the bytes actually read, not on the declared size; a refused entry leaves nothing behind and the report says how far extraction got.
- Files are created with
0600/0700andO_EXCL, so a race cannot turn a refusal into an overwrite. list/readare read-only;extract/createare mutations and go through the coder security gate.
xz archives are not supported (no decoder in the standard library); the error names the supported formats.