{"version":"2.1.234","anchor":"asset-uploads-refuse-swapped-paths-symlinks-hard-links-and-n","canonical_anchor":"asset-uploads-refuse-swapped-paths-symlinks-hard-links-and-n","heading":"Asset uploads refuse swapped paths, symlinks, hard links and network files","tier":"use","area":"Artifacts","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.234\/e\/asset-uploads-refuse-swapped-paths-symlinks-hard-links-and-n","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.234","markdown":"### Asset uploads refuse swapped paths, symlinks, hard links and network files\n\nArtifact asset uploads re-verify the file after approval, refusing symlinks and swaps, behind an env var.\n\n**What**\n\nBefore an approved upload is read, the path is re-resolved and opened refusing symlinks, then re-checked against the identity recorded at approval, so a file cannot be substituted after you approve it. Available only where asset actions are enabled by `CLAUDE_CODE_ARTIFACT_ASSETS`.\n\n**Details**\n\n- The file is re-stated through the open handle and its device, inode, size and nanosecond mtime compared with the approved values, with a further check of the open file's own path entry.\n- Separate refusals cover network paths, non-regular files, empty files, volumes with no usable inode identity, files reached through a symlink, and files with more than one hard link.\n- Read permission rules are evaluated on the resolved path, so a symlink cannot be used to send out a file you have denied.\n\n**Evidence**\n\n`upload_asset reads only local files`\n\n- Area: Artifacts\n- Names: `CLAUDE_CODE_ARTIFACT_ASSETS`\n- Tier: Use it now\n- Useful: 3\/5\n- Signal: 4\/5"}