Every CVE Search/ Get API key

CVE-2026-55569

aqua: Archive extraction in aqua follows attacker-planted symlinks, allowing writes outside the install directory

6.6 MediumFix available

aqua is a declarative command-line version manager written in Go. Prior to 2.60.1, pkg/unarchive/archives.go in the handler.HandleFile method calls os.Symlink with archives.FileInfo.LinkTarget without verifying that the target remains under the extraction destination. A later regular-file entry at the same archive path is opened with OpenFile using O_CREATE and O_WRONLY, which follows the attacker-planted symlink. A malicious or compromised package archive can therefore write attacker-controlled bytes outside aqua's extraction directory with the privileges of the user running aqua, potentially overwriting shell startup files, tool configuration, or writable executable paths. This issue is fixed in version 2.60.1.

Attack profile

How easy it is to exploit

Attack vector
Local
Complexity
Low
Privileges needed
None
User interaction
Required

What an attacker can affect

Confidentiality
Low
Integrity
High
Availability
Low

Exploit likelihood

0.18%Unchanged since Aug 29, 2026
90%50%10%1%

What each source reports

CVE List Score used 6.6

aqua: Archive extraction in aqua follows attacker-planted symlinks, allowing writes outside the install directory

aqua is a declarative command-line version manager written in Go. Prior to 2.60.1, pkg/unarchive/archives.go in the handler.HandleFile method calls os.Symlink with archives.FileInfo.LinkTarget without verifying that the target remains under the extraction destination. A later regular-file entry at the same archive path is opened with OpenFile using O_CREATE and O_WRONLY, which follows the attacker-planted symlink. A malicious or compromised package archive can therefore write attacker-controlled bytes outside aqua's extraction directory with the privileges of the user running aqua, potentially overwriting shell startup files, tool configuration, or writable executable paths. This issue is fixed in version 2.60.1.

Record
CVE-2026-55569
CVSS 3.1
6.6 MediumCVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:H/A:L
Weakness
CWE-22, CWE-59
Updated
2026-11-02
EUVDEUVD-2026-67827 6.6

aqua is a declarative command-line version manager written in Go. Prior to 2.60.1, pkg/unarchive/archives.go in the handler.HandleFile method calls os.Symlink with archives.FileInfo.LinkTarget without verifying that the target remains under the extraction destination. A later regular-file entry at the same archive path is opened with OpenFile using O_CREATE and O_WRONLY, which follows the attacker-planted symlink. A malicious or compromised package archive can therefore write attacker-controlled bytes outside aqua's extraction directory with the privileges of the user running aqua, potentially overwriting shell startup files, tool configuration, or writable executable paths. This issue is fixed in version 2.60.1.

Record
EUVD-2026-67827
CVSS 3.1
6.6 MediumCVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:H/A:L
Updated
2026-11-02
GitHub AdvisoriesGHSA-mf5c-hw34-4hpp 6.6

Aqua's archive extraction follows attacker-planted symlinks, allowing writes outside the install directory

Summary

aquaproj/aqua extracts downloaded tool archives through pkg/unarchive/archives.go using github.com/mholt/archives. The archive handler creates symlink entries with os.Symlink(f.LinkTarget, dstPath) without validating that the symlink target resolves inside the extraction destination. A subsequent regular-file archive entry with the same path is opened with OpenFile(dstPath, O_CREATE|O_WRONLY), which follows the attacker-planted symlink.

A malicious or compromised aqua package / release asset can therefore write attacker-controlled bytes outside aqua's extraction directory, with the privileges of the user running aqua.

Details

Affected file: pkg/unarchive/archives.go

Affected function: (*handler).HandleFile

The vulnerable logic is the combination of:

os.Symlink(f.LinkTarget, dstPath)

for symlink entries, followed by:

h.fs.OpenFile(dstPath, os.O_CREATE|os.O_WRONLY, f.Mode())

for a later regular file entry at the same archive path. The symlink target is not jailed to the extraction destination, and the later file open follows the symlink.

The attached PoC uses a two-entry tar.gz archive:

  1. symlink pwn -> <outside target>;
  2. regular file pwn containing attacker-controlled bytes.

The same mholt/archives extraction flow is used for the vulnerable handler and for a negative-control handler using a destination-root jail.

PoC

Attachment: submission_aqua_archive_symlink_traversal_v2_final.zip

Run:

go run mkarchive.go /tmp/aqua-outside-target
go build -o aqua-archive-poc .
mkdir -p /tmp/aqua-dest
./aqua-archive-poc vuln /tmp/aqua-dest malicious.tar.gz
cat /tmp/aqua-outside-target

mkdir -p /tmp/aqua-dest-safe
./aqua-archive-poc safe /tmp/aqua-dest-safe malicious.tar.gz

Expected vulnerable result:

/tmp/aqua-outside-target contains PWNED_BY_AQUA_SYMLINK_TRAVERSAL

Expected safe-control result:

The escaping symlink / write is rejected and the outside target is unchanged.

Impact

An attacker who controls an archive that aqua installs can write attacker-controlled content to paths outside the extraction destination, limited by the filesystem permissions of the user running aqua. This can lead to user-level code execution if the overwritten path is later executed or interpreted, for example a shell startup file, a tool configuration file, or a writable PATH entry.

This report does not claim privilege escalation beyond the aqua process privileges.

Record
GHSA-mf5c-hw34-4hpp
CVSS 3.1
6.6 MediumCVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:H/A:L
Weakness
CWE-22, CWE-59
Updated
2026-11-02
NVD 6.6

aqua is a declarative command-line version manager written in Go. Prior to 2.60.1, pkg/unarchive/archives.go in the handler.HandleFile method calls os.Symlink with archives.FileInfo.LinkTarget without verifying that the target remains under the extraction destination. A later regular-file entry at the same archive path is opened with OpenFile using O_CREATE and O_WRONLY, which follows the attacker-planted symlink. A malicious or compromised package archive can therefore write attacker-controlled bytes outside aqua's extraction directory with the privileges of the user running aqua, potentially overwriting shell startup files, tool configuration, or writable executable paths. This issue is fixed in version 2.60.1.

Record
CVE-2026-55569
CVSS 3.1
6.6 MediumCVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:H/A:L
Weakness
CWE-22, CWE-59
Updated
2026-11-02
OSV 6.6

aqua: Archive extraction in aqua follows attacker-planted symlinks, allowing writes outside the install directory

aqua is a declarative command-line version manager written in Go. Prior to 2.60.1, pkg/unarchive/archives.go in the handler.HandleFile method calls os.Symlink with archives.FileInfo.LinkTarget without verifying that the target remains under the extraction destination. A later regular-file entry at the same archive path is opened with OpenFile using O_CREATE and O_WRONLY, which follows the attacker-planted symlink. A malicious or compromised package archive can therefore write attacker-controlled bytes outside aqua's extraction directory with the privileges of the user running aqua, potentially overwriting shell startup files, tool configuration, or writable executable paths. This issue is fixed in version 2.60.1.

Record
CVE-2026-55569
CVSS 3.1
6.6 MediumCVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:H/A:L
Weakness
CWE-22, CWE-59
Updated
2026-11-02
OSVGHSA-mf5c-hw34-4hpp 6.6

Aqua's archive extraction follows attacker-planted symlinks, allowing writes outside the install directory

Summary

aquaproj/aqua extracts downloaded tool archives through pkg/unarchive/archives.go using github.com/mholt/archives. The archive handler creates symlink entries with os.Symlink(f.LinkTarget, dstPath) without validating that the symlink target resolves inside the extraction destination. A subsequent regular-file archive entry with the same path is opened with OpenFile(dstPath, O_CREATE|O_WRONLY), which follows the attacker-planted symlink.

A malicious or compromised aqua package / release asset can therefore write attacker-controlled bytes outside aqua's extraction directory, with the privileges of the user running aqua.

Details

Affected file: pkg/unarchive/archives.go

Affected function: (*handler).HandleFile

The vulnerable logic is the combination of:

os.Symlink(f.LinkTarget, dstPath)

for symlink entries, followed by:

h.fs.OpenFile(dstPath, os.O_CREATE|os.O_WRONLY, f.Mode())

for a later regular file entry at the same archive path. The symlink target is not jailed to the extraction destination, and the later file open follows the symlink.

The attached PoC uses a two-entry tar.gz archive:

  1. symlink pwn -> <outside target>;
  2. regular file pwn containing attacker-controlled bytes.

The same mholt/archives extraction flow is used for the vulnerable handler and for a negative-control handler using a destination-root jail.

PoC

Attachment: submission_aqua_archive_symlink_traversal_v2_final.zip

Run:

go run mkarchive.go /tmp/aqua-outside-target
go build -o aqua-archive-poc .
mkdir -p /tmp/aqua-dest
./aqua-archive-poc vuln /tmp/aqua-dest malicious.tar.gz
cat /tmp/aqua-outside-target

mkdir -p /tmp/aqua-dest-safe
./aqua-archive-poc safe /tmp/aqua-dest-safe malicious.tar.gz

Expected vulnerable result:

/tmp/aqua-outside-target contains PWNED_BY_AQUA_SYMLINK_TRAVERSAL

Expected safe-control result:

The escaping symlink / write is rejected and the outside target is unchanged.

Impact

An attacker who controls an archive that aqua installs can write attacker-controlled content to paths outside the extraction destination, limited by the filesystem permissions of the user running aqua. This can lead to user-level code execution if the overwritten path is later executed or interpreted, for example a shell startup file, a tool configuration file, or a writable PATH entry.

This report does not claim privilege escalation beyond the aqua process privileges.

Record
GHSA-mf5c-hw34-4hpp
CVSS 3.1
6.6 MediumCVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:H/A:L
Weakness
CWE-22, CWE-59
Updated
2026-11-02
Show 4 moreShow less
OSVGO-2026-6314 No score

Aqua's archive extraction follows attacker-planted symlinks, allowing writes outside the install directory in github.com/aquaproj/aqua

Aqua's archive extraction follows attacker-planted symlinks, allowing writes outside the install directory in github.com/aquaproj/aqua

Record
GO-2026-6314
Updated
2026-11-02
OSVopenSUSE-SU-2026:21812-1 No score

Security update for govulncheck-vulndb

This update for govulncheck-vulndb fixes the following issues:

  • Update to version 0.0.20260902T191204 2026-09-02T19:12:04Z (jsc#PED-11136).

Go CVE Numbering Authority IDs added or updated with aliases:

  • GO-2026-6305 CVE-2026-55834 GHSA-2wvm-8mvp-22qv
  • GO-2026-6306 CVE-2026-55064 GHSA-44v6-7fxq-vgf4
  • GO-2026-6307 CVE-2026-55067 GHSA-569v-q83c-3j3g
  • GO-2026-6308 CVE-2026-55066 GHSA-5pg6-m483-7vrg
  • GO-2026-6309 CVE-2026-54746 GHSA-8x7x-83cf-c3pg
  • GO-2026-6310 CVE-2026-54755 GHSA-cgc5-v3f2-8m2v
  • GO-2026-6311 CVE-2026-54766 GHSA-f27p-pw2p-9pr4
  • GO-2026-6312 CVE-2026-55108 GHSA-fmgp-q6jx-gg3x
  • GO-2026-6313 CVE-2026-55065 GHSA-gg93-x632-9ccv
  • GO-2026-6314 CVE-2026-55569 GHSA-mf5c-hw34-4hpp
  • GO-2026-6315 CVE-2026-54754 GHSA-p7gw-2pcp-5pf8
  • GO-2026-6316 CVE-2026-55068 GHSA-x8mj-6p3q-g5pp
  • GO-2026-6317 CVE-2026-55588 GHSA-298f-872v-2rcx
  • GO-2026-6318 CVE-2026-55621 GHSA-64f3-v33m-w89f
  • GO-2026-6319 CVE-2026-55622 GHSA-c9f5-j9c3-mhrg
  • GO-2026-6320 CVE-2026-55245 GHSA-w98g-5w9p-p3rc
  • GO-2026-6321 CVE-2026-55484 GHSA-hr6j-w4mw-g9mj
  • GO-2026-6322 CVE-2026-55678 GHSA-p378-jp5r-gpgw
  • GO-2026-6323 CVE-2026-55763 GHSA-v358-wf77-39xv
  • GO-2026-6324 CVE-2026-55761 GHSA-x626-fcwx-f5pc
  • GO-2026-6325 CVE-2026-27878 GHSA-6xff-cpcq-vpw2
  • GO-2026-6326 CVE-2026-55784 GHSA-334q-h5g3-fpxv
  • GO-2026-6327 CVE-2026-55874 GHSA-56wq-x3wv-3ff4
  • GO-2026-6328 CVE-2026-55785 GHSA-fp46-6vfw-gc9c
  • GO-2026-6329 CVE-2026-55873 GHSA-hgpf-8634-g44c
  • GO-2026-6330 CVE-2026-55764 GHSA-mrpp-v6pg-p54x
  • GO-2026-6333 CVE-2026-25712 GHSA-37w2-86g3-h4qh
  • GO-2026-6334 CVE-2026-24690 GHSA-47rq-xp99-92mx
  • GO-2026-6335 CVE-2026-27657 GHSA-4c8f-3m6h-m56r
  • GO-2026-6336 CVE-2026-26232 GHSA-5v69-g2m3-3hq3
  • GO-2026-6337 CVE-2026-28705 GHSA-7jvx-g65v-r899
  • GO-2026-6338 CVE-2026-22547 GHSA-922f-hfwp-p56f
  • GO-2026-6339 CVE-2026-20909 GHSA-fhq3-p242-2qpf
  • GO-2026-6340 CVE-2026-25718 GHSA-h697-89cp-24q8
  • GO-2026-6341 CVE-2026-26307 GHSA-h9c5-x7g8-4q7f
  • GO-2026-6342 CVE-2026-26247 GHSA-m5ch-ppfx-xv3v
  • GO-2026-6354 CVE-2026-78662
  • GO-2026-6355 CVE-2026-56855
  • Update to version 0.0.20260828T144745 2026-08-28T14:47:45Z.
  • GO-2026-6303 CVE-2026-56854
Record
openSUSE-SU-2026:21812-1
Updated
2026-11-02
OSVSUSE-SU-2026:23692-1 No score

Security update for govulncheck-vulndb

This update for govulncheck-vulndb fixes the following issues:

  • Update to version 0.0.20260902T191204 2026-09-02T19:12:04Z (jsc#PED-11136).

Go CVE Numbering Authority IDs added or updated with aliases:

  • GO-2026-6305 CVE-2026-55834 GHSA-2wvm-8mvp-22qv
  • GO-2026-6306 CVE-2026-55064 GHSA-44v6-7fxq-vgf4
  • GO-2026-6307 CVE-2026-55067 GHSA-569v-q83c-3j3g
  • GO-2026-6308 CVE-2026-55066 GHSA-5pg6-m483-7vrg
  • GO-2026-6309 CVE-2026-54746 GHSA-8x7x-83cf-c3pg
  • GO-2026-6310 CVE-2026-54755 GHSA-cgc5-v3f2-8m2v
  • GO-2026-6311 CVE-2026-54766 GHSA-f27p-pw2p-9pr4
  • GO-2026-6312 CVE-2026-55108 GHSA-fmgp-q6jx-gg3x
  • GO-2026-6313 CVE-2026-55065 GHSA-gg93-x632-9ccv
  • GO-2026-6314 CVE-2026-55569 GHSA-mf5c-hw34-4hpp
  • GO-2026-6315 CVE-2026-54754 GHSA-p7gw-2pcp-5pf8
  • GO-2026-6316 CVE-2026-55068 GHSA-x8mj-6p3q-g5pp
  • GO-2026-6317 CVE-2026-55588 GHSA-298f-872v-2rcx
  • GO-2026-6318 CVE-2026-55621 GHSA-64f3-v33m-w89f
  • GO-2026-6319 CVE-2026-55622 GHSA-c9f5-j9c3-mhrg
  • GO-2026-6320 CVE-2026-55245 GHSA-w98g-5w9p-p3rc
  • GO-2026-6321 CVE-2026-55484 GHSA-hr6j-w4mw-g9mj
  • GO-2026-6322 CVE-2026-55678 GHSA-p378-jp5r-gpgw
  • GO-2026-6323 CVE-2026-55763 GHSA-v358-wf77-39xv
  • GO-2026-6324 CVE-2026-55761 GHSA-x626-fcwx-f5pc
  • GO-2026-6325 CVE-2026-27878 GHSA-6xff-cpcq-vpw2
  • GO-2026-6326 CVE-2026-55784 GHSA-334q-h5g3-fpxv
  • GO-2026-6327 CVE-2026-55874 GHSA-56wq-x3wv-3ff4
  • GO-2026-6328 CVE-2026-55785 GHSA-fp46-6vfw-gc9c
  • GO-2026-6329 CVE-2026-55873 GHSA-hgpf-8634-g44c
  • GO-2026-6330 CVE-2026-55764 GHSA-mrpp-v6pg-p54x
  • GO-2026-6333 CVE-2026-25712 GHSA-37w2-86g3-h4qh
  • GO-2026-6334 CVE-2026-24690 GHSA-47rq-xp99-92mx
  • GO-2026-6335 CVE-2026-27657 GHSA-4c8f-3m6h-m56r
  • GO-2026-6336 CVE-2026-26232 GHSA-5v69-g2m3-3hq3
  • GO-2026-6337 CVE-2026-28705 GHSA-7jvx-g65v-r899
  • GO-2026-6338 CVE-2026-22547 GHSA-922f-hfwp-p56f
  • GO-2026-6339 CVE-2026-20909 GHSA-fhq3-p242-2qpf
  • GO-2026-6340 CVE-2026-25718 GHSA-h697-89cp-24q8
  • GO-2026-6341 CVE-2026-26307 GHSA-h9c5-x7g8-4q7f
  • GO-2026-6342 CVE-2026-26247 GHSA-m5ch-ppfx-xv3v
  • GO-2026-6354 CVE-2026-78662
  • GO-2026-6355 CVE-2026-56855
  • Update to version 0.0.20260828T144745 2026-08-28T14:47:45Z.
  • GO-2026-6303 CVE-2026-56854
Record
SUSE-SU-2026:23692-1
Updated
2026-11-02
OSVSUSE-SU-2026:23712-1 No score

Security update for govulncheck-vulndb

This update for govulncheck-vulndb fixes the following issues:

  • Update to version 0.0.20260902T191204 2026-09-02T19:12:04Z (jsc#PED-11136).

Go CVE Numbering Authority IDs added or updated with aliases:

  • GO-2026-6305 CVE-2026-55834 GHSA-2wvm-8mvp-22qv
  • GO-2026-6306 CVE-2026-55064 GHSA-44v6-7fxq-vgf4
  • GO-2026-6307 CVE-2026-55067 GHSA-569v-q83c-3j3g
  • GO-2026-6308 CVE-2026-55066 GHSA-5pg6-m483-7vrg
  • GO-2026-6309 CVE-2026-54746 GHSA-8x7x-83cf-c3pg
  • GO-2026-6310 CVE-2026-54755 GHSA-cgc5-v3f2-8m2v
  • GO-2026-6311 CVE-2026-54766 GHSA-f27p-pw2p-9pr4
  • GO-2026-6312 CVE-2026-55108 GHSA-fmgp-q6jx-gg3x
  • GO-2026-6313 CVE-2026-55065 GHSA-gg93-x632-9ccv
  • GO-2026-6314 CVE-2026-55569 GHSA-mf5c-hw34-4hpp
  • GO-2026-6315 CVE-2026-54754 GHSA-p7gw-2pcp-5pf8
  • GO-2026-6316 CVE-2026-55068 GHSA-x8mj-6p3q-g5pp
  • GO-2026-6317 CVE-2026-55588 GHSA-298f-872v-2rcx
  • GO-2026-6318 CVE-2026-55621 GHSA-64f3-v33m-w89f
  • GO-2026-6319 CVE-2026-55622 GHSA-c9f5-j9c3-mhrg
  • GO-2026-6320 CVE-2026-55245 GHSA-w98g-5w9p-p3rc
  • GO-2026-6321 CVE-2026-55484 GHSA-hr6j-w4mw-g9mj
  • GO-2026-6322 CVE-2026-55678 GHSA-p378-jp5r-gpgw
  • GO-2026-6323 CVE-2026-55763 GHSA-v358-wf77-39xv
  • GO-2026-6324 CVE-2026-55761 GHSA-x626-fcwx-f5pc
  • GO-2026-6325 CVE-2026-27878 GHSA-6xff-cpcq-vpw2
  • GO-2026-6326 CVE-2026-55784 GHSA-334q-h5g3-fpxv
  • GO-2026-6327 CVE-2026-55874 GHSA-56wq-x3wv-3ff4
  • GO-2026-6328 CVE-2026-55785 GHSA-fp46-6vfw-gc9c
  • GO-2026-6329 CVE-2026-55873 GHSA-hgpf-8634-g44c
  • GO-2026-6330 CVE-2026-55764 GHSA-mrpp-v6pg-p54x
  • GO-2026-6333 CVE-2026-25712 GHSA-37w2-86g3-h4qh
  • GO-2026-6334 CVE-2026-24690 GHSA-47rq-xp99-92mx
  • GO-2026-6335 CVE-2026-27657 GHSA-4c8f-3m6h-m56r
  • GO-2026-6336 CVE-2026-26232 GHSA-5v69-g2m3-3hq3
  • GO-2026-6337 CVE-2026-28705 GHSA-7jvx-g65v-r899
  • GO-2026-6338 CVE-2026-22547 GHSA-922f-hfwp-p56f
  • GO-2026-6339 CVE-2026-20909 GHSA-fhq3-p242-2qpf
  • GO-2026-6340 CVE-2026-25718 GHSA-h697-89cp-24q8
  • GO-2026-6341 CVE-2026-26307 GHSA-h9c5-x7g8-4q7f
  • GO-2026-6342 CVE-2026-26247 GHSA-m5ch-ppfx-xv3v
  • GO-2026-6354 CVE-2026-78662
  • GO-2026-6355 CVE-2026-56855
  • Update to version 0.0.20260828T144745 2026-08-28T14:47:45Z.
  • GO-2026-6303 CVE-2026-56854
Record
SUSE-SU-2026:23712-1
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
github.com/aquaproj/aqua/v2
Go
before 2.60.1
2.60.1
github.com/aquaproj/aqua
Go
All versions None known
govulncheck-vulndb
SUSE:Linux Enterprise Server 16.0
From an advisory covering 39 CVEs
before 0.0.20260902T191204-160000.1.1
0.0.20260902T191204-160000.1.1
govulncheck-vulndb
SUSE:Linux Enterprise Server for SAP applications 16.0
From an advisory covering 39 CVEs
before 0.0.20260902T191204-160000.1.1
0.0.20260902T191204-160000.1.1
govulncheck-vulndb
openSUSE:Leap 16.0
From an advisory covering 39 CVEs
before 0.0.20260902T191204-160000.1.1
0.0.20260902T191204-160000.1.1

History

History
RecordedChangedSources
affected, facts
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-55569 is a medium vulnerability (CVSS 6.6) in Aquaproj Aqua, published August 28, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.18%, the 7th percentile. Fixed in github.com/aquaproj/aqua/v2 2.60.1.

References

Show 42 moreShow less
MoveEnter Open