Summary
Togoder Security scanned the npm package yaml@2.9.1 on Oct 4, 2026. An AI review of 151 source files produced 1 medium severity finding. The overall verdict is medium: the findings flag risky but common patterns (dynamic code, unsafe defaults, broad file or network access) rather than confirmed malware.
Findings 1
Dynamic import with user-controlled path
NPS-650301DADFC3
The '--visit' option allows importing an arbitrary module from a path provided by the user via 'await import(resolve(opt.visit))'. This is a dynamic import of an external, computed path. While it is an intentional documented feature of this CLI for applying visitor functions to YAML documents, it can be exploited if untrusted arguments are passed to the CLI (e.g., in a wrapper/shell context), leading to arbitrary code execution from a local file the attacker can place.
Files reviewed
| File | Verdict | What the reviewer saw |
|---|---|---|
| dist/cli.mjs | medium | The code is the official yaml package CLI and contains no exfiltration, credential harvesting, or malicious behavior, but exposes a documented dynamic import of a user-supplied path that could be abused if arguments are attacker-controlled. |
| bin.mjs | safe | No malicious patterns detected |
| browser/dist/compose/compose-collection.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/compose/compose-doc.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/compose/compose-node.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/compose/compose-scalar.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/compose/composer.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/compose/resolve-block-map.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/compose/resolve-block-scalar.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/compose/resolve-block-seq.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/compose/resolve-end.js | safe | No malicious patterns detected |
| browser/dist/compose/resolve-flow-collection.js | safe | This file is a legitimate YAML flow collection parser from the yaml npm package with no malicious patterns, network calls, command execution, or credential harvesting. |
| browser/dist/compose/resolve-flow-scalar.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/compose/resolve-props.js | safe | No malicious patterns detected in this YAML parser utility function. |
| browser/dist/compose/util-contains-newline.js | safe | No malicious patterns detected; the code is a pure utility function for detecting newlines in YAML key nodes. |
| browser/dist/compose/util-empty-scalar-position.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/compose/util-flow-indent-check.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/compose/util-map-includes.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/doc/Document.js | safe | No malicious patterns detected |
| browser/dist/doc/anchors.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/doc/applyReviver.js | safe | No malicious patterns detected; the code is a legitimate implementation of JSON.parse reviver logic with Map/Set extensions and performs no external I/O, dynamic execution, or system access. |
| browser/dist/doc/createNode.js | safe | No malicious patterns detected; the code is a legitimate YAML node creation utility without exfiltration, credential harvesting, obfuscation, or process execution. |
| browser/dist/doc/directives.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/errors.js | safe | No malicious patterns detected |
| browser/dist/index.js | safe | Cleared by Jev triage; no further analysis needed |
Show 126 more files
| File | Verdict | What the reviewer saw |
|---|---|---|
| browser/dist/log.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/nodes/Alias.js | safe | No malicious patterns detected; the code implements YAML alias resolution with standard resource-exhaustion safeguards. |
| browser/dist/nodes/Collection.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/nodes/Node.js | safe | No malicious patterns detected |
| browser/dist/nodes/Pair.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/nodes/Scalar.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/nodes/YAMLMap.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/nodes/YAMLSeq.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/nodes/addPairToJSMap.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/nodes/identity.js | safe | No malicious patterns detected; the file only contains YAML node type identification utilities using Symbols and type-guard functions. |
| browser/dist/nodes/toJS.js | safe | The provided toJS.js file is a benign recursive conversion utility with no malicious patterns, network calls, file system access, or dynamic code execution. |
| browser/dist/parse/cst-scalar.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/parse/cst-stringify.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/parse/cst-visit.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/parse/cst.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/parse/lexer.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/parse/line-counter.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/parse/parser.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/public-api.js | safe | No malicious patterns detected |
| browser/dist/schema/Schema.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/schema/common/map.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/schema/common/null.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/schema/common/seq.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/schema/common/string.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/schema/core/bool.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/schema/core/float.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/schema/core/int.js | safe | No malicious patterns detected; the code only implements integer parsing/stringification for YAML schemas without network, filesystem, process, or dynamic execution behavior. |
| browser/dist/schema/core/schema.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/schema/json/schema.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/schema/tags.js | safe | No malicious patterns detected; the file only defines YAML schema/tag mappings and a lookup helper. |
| browser/dist/schema/yaml-1.1/binary.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/schema/yaml-1.1/bool.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/schema/yaml-1.1/float.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/schema/yaml-1.1/int.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/schema/yaml-1.1/merge.js | safe | No malicious patterns detected; the file implements YAML 1.1 merge key (<<) semantics for a public YAML library with no network, filesystem, process, or dynamic code execution behavior. |
| browser/dist/schema/yaml-1.1/omap.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/schema/yaml-1.1/pairs.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/schema/yaml-1.1/schema.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/schema/yaml-1.1/set.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/schema/yaml-1.1/timestamp.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/stringify/foldFlowLines.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/stringify/stringify.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/stringify/stringifyCollection.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/stringify/stringifyComment.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/stringify/stringifyDocument.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/stringify/stringifyNumber.js | safe | No malicious patterns detected |
| browser/dist/stringify/stringifyPair.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/stringify/stringifyString.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/util.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/dist/visit.js | safe | Cleared by Jev triage; no further analysis needed |
| browser/index.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/compose/compose-collection.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/compose/compose-doc.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/compose/compose-node.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/compose/compose-scalar.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/compose/composer.js | safe | No malicious patterns detected; the code is a standard YAML parser composer with no network, process, or credential access. |
| dist/compose/resolve-block-map.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/compose/resolve-block-scalar.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/compose/resolve-block-seq.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/compose/resolve-end.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/compose/resolve-flow-collection.js | safe | No malicious patterns detected; the code is a legitimate YAML flow collection parser from the yaml package. |
| dist/compose/resolve-flow-scalar.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/compose/resolve-props.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/compose/util-contains-newline.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/compose/util-empty-scalar-position.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/compose/util-flow-indent-check.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/compose/util-map-includes.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/doc/Document.js | safe | No malicious patterns detected; this is a legitimate YAML Document class implementation from the 'yaml' package. |
| dist/doc/anchors.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/doc/applyReviver.js | safe | No malicious patterns detected; the code implements a standard JSON.parse reviver algorithm with Map/Set support and contains no network, filesystem, process, or dynamic execution activity. |
| dist/doc/createNode.js | safe | No malicious patterns detected; the code is a standard YAML node creation utility with no network, filesystem, or dynamic execution risks. |
| dist/doc/directives.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/errors.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/index.js | safe | No malicious patterns detected |
| dist/log.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/nodes/Alias.js | safe | This is a legitimate YAML alias conformance file from the yaml package with no malicious patterns; the alias-count resolution logic is a defensive measure against resource exhaustion attacks. |
| dist/nodes/Collection.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/nodes/Node.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/nodes/Pair.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/nodes/Scalar.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/nodes/YAMLMap.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/nodes/YAMLSeq.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/nodes/addPairToJSMap.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/nodes/identity.js | safe | No malicious patterns detected; the file contains only YAML node type identity helpers and exports. |
| dist/nodes/toJS.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/parse/cst-scalar.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/parse/cst-stringify.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/parse/cst-visit.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/parse/cst.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/parse/lexer.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/parse/line-counter.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/parse/parser.js | safe | No malicious patterns detected; this is a legitimate YAML CST parser with only a debug logging check via process.env.LOG_TOKENS. |
| dist/public-api.js | safe | No malicious patterns detected; this is the standard public API entry point of the yaml npm package, which only defines YAML parsing/stringifying functions with no network, filesystem, process, credential, or code-execution behavior. |
| dist/schema/Schema.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/schema/common/map.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/schema/common/null.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/schema/common/seq.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/schema/common/string.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/schema/core/bool.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/schema/core/float.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/schema/core/int.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/schema/core/schema.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/schema/json/schema.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/schema/tags.js | safe | No malicious patterns detected; the file only defines YAML schema tag mappings and helper functions with no external data access, command execution, or network activity. |
| dist/schema/yaml-1.1/binary.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/schema/yaml-1.1/bool.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/schema/yaml-1.1/float.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/schema/yaml-1.1/int.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/schema/yaml-1.1/merge.js | safe | No malicious patterns detected; the code implements YAML 1.1 merge key semantics without any exfiltration, dynamic execution, process spawning, or file system manipulation. |
| dist/schema/yaml-1.1/omap.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/schema/yaml-1.1/pairs.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/schema/yaml-1.1/schema.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/schema/yaml-1.1/set.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/schema/yaml-1.1/timestamp.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/stringify/foldFlowLines.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/stringify/stringify.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/stringify/stringifyCollection.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/stringify/stringifyComment.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/stringify/stringifyDocument.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/stringify/stringifyNumber.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/stringify/stringifyPair.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/stringify/stringifyString.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/test-events.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/util.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/visit.js | safe | Cleared by Jev triage; no further analysis needed |
| util.js | safe | Cleared by Jev triage; no further analysis needed |
Affected version ranges
None of the 2 scanned versions of yaml are flagged high or critical. The latest scanned version, 2.9.1, is medium risk. Only versions we have scanned are listed; unscanned versions between them are not covered.
| Versions | Verdict | Count | Range | Top findings |
|---|---|---|---|---|
| 2.9.0 – 2.9.1 | Needs review | 2 | >=2.9.0 <=2.9.1 | Dynamic import with user-controlled path |
| 1.10.3 – 2.8.3 | Not scanned | 4 | >=1.10.3 <=2.8.3 |
Full list, including published versions not scanned yet: version ranges API.
Scanned versions of yaml
Frequently asked questions
Is yaml safe to use?
No confirmed malware was found in yaml@2.9.1, but the review flagged 1 medium severity finding for risky patterns worth checking before you rely on it.
Does yaml contain malware?
No malware was identified in yaml@2.9.1 when Togoder Security scanned it on Oct 4, 2026. A new version can still introduce malicious code, so scan the exact versions in your lockfile.
How was yaml checked?
Togoder Security downloaded the published npm package and had an AI model read its 151 source files, looking for install scripts, credential access, network exfiltration, obfuscation, backdoors and crypto-wallet theft. The results are cached by file hash and shown here.
How do I scan yaml together with the rest of my dependencies?
Upload your lockfile at https://security.togoder.click/scan or call the API documented at https://security.togoder.click/api-docs. Files that have already been scanned, like the ones in yaml@2.9.1, cost nothing.