Skip to content
Heist/ feed
Back to feed
UnratedFix available

Malicious plugin names, recipients, or identities can cause arbitrary binary execution

Type: advisorySources: OSV

A plugin name containing a path separator may allow an attacker to execute an arbitrary binary. Such a plugin name can be provided through an attacker-controlled input to the following `age` APIs when the `plugin` feature flag is enabled: - [`age::plugin::Identity::from_str`](https://docs.rs/age/0.11.0/age/plugin/struct.Identity.html#impl-FromStr-for-Identity) (or equivalently [`str::parse::()`](https://doc.rust-lang.org/stable/core/primitive.str.html#method.parse)) - [`age::plugin::Identity::default_for_plugin`](https://docs.rs/age/0.11.0/age/plugin/struct.Identity.html#method.default_for_plugin) - [`age::plugin::IdentityPluginV1::new`](https://docs.rs/age/0.11.0/age/plugin/struct.IdentityPluginV1.html#method.new) (the `plugin_name` argument) - [`age::plugin::Recipient::from_str`](https://docs.rs/age/0.11.0/age/plugin/struct.Recipient.html#impl-FromStr-for-Recipient) (or equivalently [`str::parse::()`](https://doc.rust-lang.org/stable/core/primitive.str.html#method.parse)) - [`age::plugin::RecipientPluginV1::new`](https://docs.rs/age/0.11.0/age/plugin/struct.RecipientPluginV1.html#method.new) (the `plugin_name` argument) On UNIX systems, a directory matching `age-plugin-*` needs to exist in the working directory for the attack to succeed. The 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

Products
age
Affected versions
Not specified
Fixed versions
0.10.1, 0.11.1, 0.6.1, 0.7.2, 0.8.2, 0.9.3
CVEs
Not specified
Confirmed fixed CVEs
Not specified
Updated in this feed
30 Oct 2026, 08:44 UTC · Revision 1

Source evidence

Malicious plugin names, recipients, or identities can cause arbitrary binary execution

core-osv · Original source

Published 18 Dec 2024, 12:00 UTC

A plugin name containing a path separator may allow an attacker to execute an arbitrary binary. Such a plugin name can be provided through an attacker-controlled input to the following `age` APIs when the `plugin` feature flag is enabled: - [`age::plugin::Identity::from_str`](https://docs.rs/age/0.11.0/age/plugin/struct.Identity.html#impl-FromStr-for-Identity) (or equivalently [`str::parse::()`](https://doc.rust-lang.org/stable/core/primitive.str.html#method.parse)) - [`age::plugin::Identity::default_for_plugin`](https://docs.rs/age/0.11.0/age/plugin/struct.Identity.html#method.default_for_plugin) - [`age::plugin::IdentityPluginV1::new`](https://docs.rs/age/0.11.0/age/plugin/struct.IdentityPluginV1.html#method.new) (the `plugin_name` argument) - [`age::plugin::Recipient::from_str`](https://docs.rs/age/0.11.0/age/plugin/struct.Recipient.html#impl-FromStr-for-Recipient) (or equivalently [`str::parse::()`](https://doc.rust-lang.org/stable/core/primitive.str.html#method.parse)) - [`age::plugin::RecipientPluginV1::new`](https://docs.rs/age/0.11.0/age/plugin/struct.RecipientPluginV1.html#method.new) (the `plugin_name` argument) On UNIX systems, a directory matching `age-plugin-*` needs to exist in the working directory for the attack to succeed. The 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

osv:RUSTSEC-2024-0433

age

Fixed versions: 0.6.1, 0.7.2, 0.8.2, 0.9.3, 0.10.1, 0.11.1

Complete source record
{
  "id": "689b86611e4bfb949c788118d7035f996264611c395a29bfeb0cc7d00a10ef95",
  "url": "https://osv.dev/vulnerability/RUSTSEC-2024-0433",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "Malicious plugin names, recipients, or identities can cause arbitrary binary execution",
    "summary": "A plugin name containing a path separator may allow an attacker to execute an arbitrary binary. Such a plugin name can be provided through an attacker-controlled input to the following `age` APIs when the `plugin` feature flag is enabled: - [`age::plugin::Identity::from_str`](https://docs.rs/age/0.11.0/age/plugin/struct.Identity.html#impl-FromStr-for-Identity) (or equivalently [`str::parse::()`](https://doc.rust-lang.org/stable/core/primitive.str.html#method.parse)) - [`age::plugin::Identity::default_for_plugin`](https://docs.rs/age/0.11.0/age/plugin/struct.Identity.html#method.default_for_plugin) - [`age::plugin::IdentityPluginV1::new`](https://docs.rs/age/0.11.0/age/plugin/struct.IdentityPluginV1.html#method.new) (the `plugin_name` argument) - [`age::plugin::Recipient::from_str`](https://docs.rs/age/0.11.0/age/plugin/struct.Recipient.html#impl-FromStr-for-Recipient) (or equivalently [`str::parse::()`](https://doc.rust-lang.org/stable/core/primitive.str.html#method.parse)) - [`age::plugin::RecipientPluginV1::new`](https://docs.rs/age/0.11.0/age/plugin/struct.RecipientPluginV1.html#method.new) (the `plugin_name` argument) On UNIX systems, a directory matching `age-plugin-*` needs to exist in the working directory for the attack to succeed. The 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",
    "evidence": "osv:RUSTSEC-2024-0433",
    "products": [
      {
        "name": {
          "value": "age",
          "evidence": "/affected/0/package/name"
        },
        "prerequisites": [],
        "fixed_versions": [
          {
            "value": "0.6.1",
            "evidence": "/affected/0/ranges"
          },
          {
            "value": "0.7.2",
            "evidence": "/affected/0/ranges"
          },
          {
            "value": "0.8.2",
            "evidence": "/affected/0/ranges"
          },
          {
            "value": "0.9.3",
            "evidence": "/affected/0/ranges"
          },
          {
            "value": "0.10.1",
            "evidence": "/affected/0/ranges"
          },
          {
            "value": "0.11.1",
            "evidence": "/affected/0/ranges"
          }
        ],
        "affected_versions": []
      }
    ],
    "severity": "unknown",
    "structured": {
      "id": "RUSTSEC-2024-0433",
      "aliases": [
        "GHSA-4fg7-vxc8-qx5w",
        "RUSTSEC-2024-0432",
        "RUSTSEC-2024-0433"
      ],
      "affected": [
        {
          "ranges": [
            {
              "type": "SEMVER",
              "events": [
                {
                  "introduced": "0.6.0"
                },
                {
                  "fixed": "0.6.1"
                },
                {
                  "introduced": "0.7.0"
                },
                {
                  "fixed": "0.7.2"
                },
                {
                  "introduced": "0.8.0"
                },
                {
                  "fixed": "0.8.2"
                },
                {
                  "introduced": "0.9.0"
                },
                {
                  "fixed": "0.9.3"
                },
                {
                  "introduced": "0.10.0"
                },
                {
                  "fixed": "0.10.1"
                },
                {
                  "introduced": "0.11.0"
                },
                {
                  "fixed": "0.11.1"
                }
              ]
            }
          ],
          "package": {
            "name": "age",
            "purl": "pkg:cargo/age",
            "ecosystem": "crates.io"
          },
          "database_specific": {
            "cvss": null,
            "source": "https://github.com/rustsec/advisory-db/blob/osv/crates/RUSTSEC-2024-0433.json",
            "categories": [
              "code-execution"
            ],
            "informational": null
          },
          "ecosystem_specific": {
            "affects": {
              "os": [],
              "arch": [],
              "functions": [
                "age::plugin::Identity::default_for_plugin",
                "age::plugin::Identity::from_str",
                "age::plugin::IdentityPluginV1::new",
                "age::plugin::Recipient::from_str",
                "age::plugin::RecipientPluginV1::new"
              ]
            },
            "affected_functions": null
          }
        }
      ],
      "modified": "2026-10-12T18:00:12.403778948Z",
      "provider": "osv",
      "references": [
        "https://crates.io/crates/age",
        "https://rustsec.org/advisories/RUSTSEC-2024-0433.html",
        "https://github.com/str4d/rage/commit/703152ecfa86f27952a35b57dd525ed39396a227"
      ],
      "provider_metadata": {
        "license": "CC0-1.0"
      }
    },
    "related_cves": [],
    "security_relevant": true,
    "severity_evidence": null
  },
  "source_id": "core-osv",
  "document_id": 306429,
  "published_at": "2024-12-18T12:00:00+00:00"
}