{"id":"GHSA-32gq-x56h-299c","aliases":["GO-2024-3344"],"status":"published","title":"age vulnerable to malicious plugin names, recipients, or identities causing arbitrary binary execution","description":"A plugin name containing a path separator may allow an attacker to execute an arbitrary binary.\n\nSuch a plugin name can be provided to the age CLI through an attacker-controlled recipient or identity string, or to the [`plugin.NewIdentity`](https://pkg.go.dev/filippo.io/age/plugin#NewIdentity), [`plugin.NewIdentityWithoutData`](https://pkg.go.dev/filippo.io/age/plugin#NewIdentityWithoutData), or [`plugin.NewRecipient`](https://pkg.go.dev/filippo.io/age/plugin#NewRecipient) APIs.\n\nOn UNIX systems, a directory matching `${TMPDIR:-/tmp}/age-plugin-*` needs to exist for the attack to succeed.\n\nThe binary is executed with a single flag, either `--age-plugin=recipient-v1` or `--age-plugin=identity-v1`. The standard input includes the recipient or identity string, and the random file key (if encrypting) or the header of the file (if decrypting). The format is constrained by the [age-plugin](https://c2sp.org/age-plugin) protocol.\n\nAn equivalent issue was fixed by the [rage](https://github.com/str4d/rage) project, see advisory [GHSA-4fg7-vxc8-qx5w](https://github.com/str4d/rage/security/advisories/GHSA-4fg7-vxc8-qx5w).\n\nThanks to ⬡-49016 for reporting this.","facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-25"],"published":"2024-12-18T18:23:06Z","modified":"2026-09-10T03:50:21Z","fixes":[{"ecosystem":"Go","package":"filippo.io/age","fixed_in":["1.2.1"],"sources":["ghsa","osv"]}],"affected":[{"source":"ghsa","ecosystem":"Go","package":"filippo.io/age","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.2.1"}]}]},{"source":"osv","ecosystem":"Go","package":"filippo.io/age","ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"1.2.1"}]}]},{"source":"osv","ecosystem":"Go","package":"filippo.io/age","ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"1.2.1"}]}]}],"references":[{"url":"https://github.com/FiloSottile/age/security/advisories/GHSA-32gq-x56h-299c","tags":["web","advisory"]},{"url":"https://github.com/FiloSottile/age/commit/482cf6fc9babd3ab06f6606762aac10447222201","tags":["web","fix"]},{"url":"https://github.com/str4d/rage/security/advisories/GHSA-4fg7-vxc8-qx5w","tags":["web"]},{"url":"https://github.com/advisories/GHSA-32gq-x56h-299c"},{"url":"https://github.com/FiloSottile/age","tags":["package"]}],"sources":{"ghsa":[{"id":"GHSA-32gq-x56h-299c","title":"age vulnerable to malicious plugin names, recipients, or identities causing arbitrary binary execution","description":"A plugin name containing a path separator may allow an attacker to execute an arbitrary binary.\n\nSuch a plugin name can be provided to the age CLI through an attacker-controlled recipient or identity string, or to the [`plugin.NewIdentity`](https://pkg.go.dev/filippo.io/age/plugin#NewIdentity), [`plugin.NewIdentityWithoutData`](https://pkg.go.dev/filippo.io/age/plugin#NewIdentityWithoutData), or [`plugin.NewRecipient`](https://pkg.go.dev/filippo.io/age/plugin#NewRecipient) APIs.\n\nOn UNIX systems, a directory matching `${TMPDIR:-/tmp}/age-plugin-*` needs to exist for the attack to succeed.\n\nThe binary is executed with a single flag, either `--age-plugin=recipient-v1` or `--age-plugin=identity-v1`. The standard input includes the recipient or identity string, and the random file key (if encrypting) or the header of the file (if decrypting). The format is constrained by the [age-plugin](https://c2sp.org/age-plugin) protocol.\n\nAn equivalent issue was fixed by the [rage](https://github.com/str4d/rage) project, see advisory [GHSA-4fg7-vxc8-qx5w](https://github.com/str4d/rage/security/advisories/GHSA-4fg7-vxc8-qx5w).\n\nThanks to ⬡-49016 for reporting this.","status":"published","published":"2024-12-18T18:23:06Z","modified":"2024-12-20T21:41:10Z","cwes":["CWE-25"],"updated_at":"2026-11-02T14:38:26.167657Z"}],"osv":[{"id":"GHSA-32gq-x56h-299c","title":"age vulnerable to malicious plugin names, recipients, or identities causing arbitrary binary execution","description":"A plugin name containing a path separator may allow an attacker to execute an arbitrary binary.\n\nSuch a plugin name can be provided to the age CLI through an attacker-controlled recipient or identity string, or to the [`plugin.NewIdentity`](https://pkg.go.dev/filippo.io/age/plugin#NewIdentity), [`plugin.NewIdentityWithoutData`](https://pkg.go.dev/filippo.io/age/plugin#NewIdentityWithoutData), or [`plugin.NewRecipient`](https://pkg.go.dev/filippo.io/age/plugin#NewRecipient) APIs.\n\nOn UNIX systems, a directory matching `${TMPDIR:-/tmp}/age-plugin-*` needs to exist for the attack to succeed.\n\nThe binary is executed with a single flag, either `--age-plugin=recipient-v1` or `--age-plugin=identity-v1`. The standard input includes the recipient or identity string, and the random file key (if encrypting) or the header of the file (if decrypting). The format is constrained by the [age-plugin](https://c2sp.org/age-plugin) protocol.\n\nAn equivalent issue was fixed by the [rage](https://github.com/str4d/rage) project, see advisory [GHSA-4fg7-vxc8-qx5w](https://github.com/str4d/rage/security/advisories/GHSA-4fg7-vxc8-qx5w).\n\nThanks to ⬡-49016 for reporting this.","status":"published","published":"2024-12-18T18:23:06Z","modified":"2026-09-10T03:50:21.154631128Z","cwes":["CWE-25"],"updated_at":"2026-11-02T15:46:35.050232Z"},{"id":"GO-2024-3344","title":"Malicious plugin names, recipients, or identities causing arbitrary binary execution in filippo.io/age","description":"Malicious plugin names, recipients, or identities causing arbitrary binary execution in filippo.io/age","status":"published","published":"2024-12-20T20:36:46Z","modified":"2026-02-04T04:00:26.433286Z","updated_at":"2026-11-02T15:47:01.728182Z"}]}}
