diff --git a/advisories/unreviewed/2026/08/GHSA-4j2p-28q2-5m79/GHSA-4j2p-28q2-5m79.json b/advisories/unreviewed/2026/08/GHSA-4j2p-28q2-5m79/GHSA-4j2p-28q2-5m79.json index 5c55269bb6cc..79eeebf194ce 100644 --- a/advisories/unreviewed/2026/08/GHSA-4j2p-28q2-5m79/GHSA-4j2p-28q2-5m79.json +++ b/advisories/unreviewed/2026/08/GHSA-4j2p-28q2-5m79/GHSA-4j2p-28q2-5m79.json @@ -1,23 +1,40 @@ { "schema_version": "1.4.0", "id": "GHSA-4j2p-28q2-5m79", - "modified": "2026-08-10T21:32:04Z", + "modified": "2026-08-10T21:32:09Z", "published": "2026-08-10T21:32:04Z", "aliases": [ "CVE-2026-69112" ], - "details": "Hugging Face Accelerate through 1.14.0 contains a path traversal vulnerability in load_checkpoint_in_model and load_checkpoint_and_dispatch functions that fail to sanitize weight_map entries from sharded checkpoint indexes. Attackers can supply relative paths with ../ sequences or absolute paths to read arbitrary files, or point shard entries at named pipes to cause indefinite blocking and denial of service.", + "summary": "Hugging Face Accelerate vulnerable to path traversal via unsanitized sharded-checkpoint weight_map entries", + "details": "### Summary\n\n`accelerate` through 1.14.0 does not sanitize the shard filenames read from a sharded\ncheckpoint's `*.index.json` `weight_map` before joining them to the checkpoint folder. A crafted\ncheckpoint can make the loader open files outside the intended directory, or block indefinitely\non a named pipe.\n\n### Details\n\n`load_checkpoint_in_model()` in `src/accelerate/utils/modeling.py` builds its shard list directly\nfrom attacker-controlled index values:\n\n```python\ncheckpoint_files = sorted(list(set(index.values())))\ncheckpoint_files = [os.path.join(checkpoint_folder, f) for f in checkpoint_files]\n```\n\n`os.path.join()` follows `..` segments, and discards the base folder entirely when the second\nargument is absolute, so a `weight_map` entry such as `../../../../etc/passwd` or an absolute path\nresolves outside `checkpoint_folder`.\n\nThe same code path is reachable through `load_checkpoint_and_dispatch()`. No `trust_remote_code`\nflag or other opt-in is required — plain `load_checkpoint_in_model(model, \"