Vulnerabilities in pkg:npm/exiftool-vendored
PACKAGECVE-2026-43893 is a HIGH (CVSS 8.2) exiftool-vendored vulnerable to argument injection vulnerability (CWE-88: Improper Neutralization of Argument Delimiters in a Command ('Argument Injection')) affecting Exiftool vendored libraries in the npm ecosystem. The issue involves exiftool-vendored vulnerable to argument injection via newline characters in tag names. Remediation is available by upgrading affected packages to version 35.19.0.
pkg:npm/exiftool-vendored
Vulnerability advisories affecting package pkg:npm/exiftool-vendored. Select an advisory below to view technical details or fixes.
| Advisory ID | CVE / NVD | Severity | Summary |
|---|---|---|---|
| GHSA-cw26-7653-2rp5 | CVE-2026-43893 | HIGH | exiftool-vendored vulnerable to argument injection via newline characters in tag names |
| GHSA-4whq-r978-2x68 | - | HIGH | Arbitrary code execution in ExifTool |
CVE-2026-43893 at a Glance
Security Impact
CVSS: 8.2
The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:N).
How to Fix CVE-2026-43893
To remediate this vulnerability, upgrade all affected Exiftool vendored dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
npm install exiftool-vendored@35.19.0
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
npm ls exiftool-vendored
How to Check if You Are Affected
To determine whether your Node.js application is affected by CVE-2026-43893, inspect your project dependencies using npm:
npm ls exiftool-vendored
Analyze the terminal output to locate any version of Exiftool vendored in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 35.19.0), your application is affected.
Note: The npm ls exiftool-vendored command inspects dependencies declared in your package.json and lockfile; it does not perform automated runtime dynamic scanning.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-88: Improper Neutralization of Argument Delimiters in a Command ('Argument Injection'), where the product constructs a string for a command to be executed by a separate component in another control sphere, but it does not properly delimit the intended arguments, options, or switches within that command string. In Exiftool vendored, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2026-43893 Affected Exiftool vendored Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
exiftool-vendored
|
npm |
< 35.19.0
|
35.19.0
|
References
Frequently Asked Questions
What is CVE-2026-43893?
Which Exiftool vendored versions are affected?
What version fixes CVE-2026-43893?
Is exiftool-vendored affected?
What is the CVSS score of CVE-2026-43893?
What CWE is associated with CVE-2026-43893?
How can I check npm dependencies for CVE-2026-43893?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-cw26-7653-2rp5",
"modified" : "2026-05-13T14:19:52Z",
"published" : "2026-05-05T19:53:47Z",
"aliases" : [ "CVE-2026-43893" ],
"summary" : "exiftool-vendored vulnerable to argument injection via newline characters in tag names",
"details" : "### Impact\n\n`exiftool-vendored` starts ExifTool in `-stay_open True -@ -` mode, where arguments are read from stdin one per line. In affected versions, several caller-supplied strings were interpolated into ExifTool arguments without rejecting line delimiters. A newline or carriage return inside one of those strings could split a single intended argument into multiple ExifTool arguments, allowing argument injection. The fix also rejects NUL bytes as unsafe control characters.\n\nApplications that pass attacker-controlled strings to affected APIs may allow an attacker to make ExifTool read files accessible to the ExifTool process, or write output to attacker-chosen file system paths accessible to that process. No remote code execution has been demonstrated.\n\nThe reported write-path issue is caused by unsanitized tag **keys**. Tag **values** passed to `ExifTool#write` are not affected, because `WriteTask` already encodes whitespace characters in values (e.g. `\\n` -> ` `) before transmission.\n\nConfirmed affected inputs:\n\n- **Tag-name arguments / tag keys** — keys of the `tags` object passed to `ExifTool#write`; entries of the `retain` option to `ExifTool#deleteAllTags`; entries of the `numericTags` option to `ExifTool#read`; the `tagname` argument to `ExifTool#extractBinaryTag` and `#extractBinaryTagToBuffer`.\n- **Filename / path arguments** to `ExifTool#write`, `#read`, `#readRaw`, `#deleteAllTags`, `#rewriteAllTags`, `#extractBinaryTag`, `#extractBinaryTagToBuffer`, and the binary-extraction convenience methods `#extractJpgFromRaw`, `#extractPreview`, and `#extractThumbnail`. `path.resolve()` does not strip newlines, so an application that accepts attacker-controlled filenames containing newline characters was vulnerable.\n- **The `imageHashType` option** to `ExifTool#read`. TypeScript types restrict this to a literal union, but JS callers or callers with weakened type checking could reach the sink.\n\nApplications that only pass hardcoded strings for tag names, options, and filenames are not affected.\n\n### Patches\n\nFixed in **v35.19.0**. Two layers of defense:\n\n1. **Per-site input validation.** A new `validateTagName` helper rejects any tag-name string containing characters outside the ExifTool tag grammar (letters, digits, `:`, `-`, `_`, and the ExifTool modifiers `*`, `?`, `+`, `#`). Applied at every tag-name interpolation site.\n2. **Defense-in-depth at the command renderer.** `ExifToolTask.renderCommand` now rejects _any_ argument containing `\\r`, `\\n`, or `\\0` before it is sent to the ExifTool process. This catches injection via filename arguments, option values, and any future interpolation site that forgets the per-site validator.\n\n### Workarounds\n\nUpgrade to v35.19.0 or later.\n\nIf upgrading immediately is not possible, reject untrusted strings containing control characters before passing them to the affected APIs. Conservative guard:\n\n```ts\nfunction assertSafeForExifTool(s: string): void {\n if (typeof s !== \"string\" || /[\\x00-\\x20=<>]/.test(s)) {\n throw new Error(\"Rejected unsafe string for ExifTool\");\n }\n}\n```\n\nApply to tag names, `retain` / `numericTags` entries, binary-extraction tag names, filenames, and the `imageHashType` option. This is a denylist and is strictly weaker than the library's internal validator; it is sufficient to block the known PoCs but will accept strings that the library itself now rejects.\n\n### Resources\n\n- ExifTool `-stay_open` / argument-file documentation: https://exiftool.org/exiftool_pod.html#stay_open-FLAG\n- ExifTool tag-name reference: https://exiftool.org/TagNames/\n- CWE-88: Improper Neutralization of Argument Delimiters in a Command ('Argument Injection') — https://cwe.mitre.org/data/definitions/88.html\n\n### Credit\n\n- Reporter: Hank Tam\n- Affiliation: Independent",
"severity" : [ {
"type" : "CVSS_V3",
"score" : "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:N"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "npm",
"name" : "exiftool-vendored"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0"
}, {
"fixed" : "35.19.0"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 35.18.0"
}
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/photostructure/exiftool-vendored.js/security/advisories/GHSA-cw26-7653-2rp5"
}, {
"type" : "ADVISORY",
"url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-43893"
}, {
"type" : "WEB",
"url" : "https://exiftool.org/TagNames"
}, {
"type" : "WEB",
"url" : "https://exiftool.org/exiftool_pod.html#stay_open-FLAG"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/photostructure/exiftool-vendored.js"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-88" ],
"severity" : "HIGH",
"github_reviewed" : true,
"github_reviewed_at" : "2026-05-05T19:53:47Z",
"nvd_published_at" : "2026-05-11T22:22:14Z"
}
}