Description
pacman before 5.1.3 allows directory traversal when installing a remote package via a specified URL "pacman -U <url>" due to an unsanitized file name received from a Content-Disposition header. pacman renames the downloaded package file to match the name given in this header. However, pacman did not sanitize this name, which may contain slashes, before calling rename(). A malicious server (or a network MitM if downloading over HTTP) can send a Content-Disposition header to make pacman place the file anywhere in the filesystem, potentially leading to arbitrary root code execution. Notably, this bypasses pacman's package signature checking. This occurs in curl_download_internal in lib/libalpm/dload.c.
Fixed in Linux distributions
Distributions backport fixes, so the version that fixes this vulnerability differs per release — upgrade to at least the version shown. From the distributions' security trackers and advisories.
Alpine
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Alpine v3.24 | pacman | 5.1.3-r0 | — |
| Alpine v3.23 | pacman | 5.1.3-r0 | — |
| Alpine v3.22 | pacman | 5.1.3-r0 | — |
| Alpine v3.21 | pacman | 5.1.3-r0 | — |
| Alpine v3.20 | pacman | 5.1.3-r0 | — |
Show 9 more (older releases, extended support, other products)Fewer releases
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Alpine v3.19 | pacman | 5.1.3-r0 | — |
| Alpine v3.18 | pacman | 5.1.3-r0 | — |
| Alpine v3.17 | pacman | 5.1.3-r0 | — |
| Alpine v3.16 | pacman | 5.1.3-r0 | — |
| Alpine v3.15 | pacman | 5.1.3-r0 | — |
| Alpine v3.14 | pacman | 5.1.3-r0 | — |
| Alpine v3.13 | pacman | 5.1.3-r0 | — |
| Alpine v3.12 | pacman | 5.1.3-r0 | — |
| Alpine v3.11 | pacman | 5.1.3-r0 | — |