npm / yaml / 2.9.1

yaml 2.9.1

Source
https://github.com/eemeli/yaml
Artifact scanned
yaml-2.9.1.tgz (npm tarball · 109.5 KB · SHA-256 4ef6c54cf559…)
Compared with
yaml-2.9.0.tgz (0 signals introduced since)
Files
232 scanned, 1 skipped (binary, oversized, or unrecognised)
Signals
0 critical · 0 warn · 5 info
Scan time
4.0 s
LLM review
Reviewed by claude-haiku-5-5 (Anthropic): 3 of 3 warn and critical signals; 3 demoted to info.
Disclude version
4.3.0
Scanned (UTC)
2026-10-23 17:39

Signals

Ordered by severity, then signals introduced in this release. Hidden characters are shown as ⟨U+…⟩.

  1. info warn → info by review dynamic-execution browser/dist/schema/yaml-1.1/binary.js:19:25

    `atob` decodes a base64 value at runtime — common step before dynamic fetch or eval (ast pass, confidence 0.75)

                // On IE 11, atob() can't handle newlines
                const str = atob(src.replace(/[\n\r]/g, ''));
                const buffer = new Uint8Array(str.length);
                for (let i = 0; i < str.length; ++i)
    likely benign LLM, confidence 0.90 Browser-side base64 decoding of YAML !!binary values via atob.
    Reasoning

    This is the standard YAML binary-type decoder from js-yaml, which uses atob to turn a !!binary base64 value into bytes for the parsed result. It is data decoding, not dynamic execution; the decoded bytes are only copied into a Uint8Array.

  2. `btoa` encodes a value as base64 at runtime — used in exfiltration patterns (ast pass, confidence 0.55)

                    s += String.fromCharCode(buf[i]);
                str = btoa(s);
            }
            else {
  3. info warn → info by review dynamic-import dist/cli.mjs:124:26

    dynamic `import(...)` with a non-literal specifier (ast pass, confidence 0.65)

                const visitor = opt.visit
                    ? (await import(resolve(opt.visit))).default
                    : null;
                let source = '';
    likely benign LLM, confidence 0.80 CLI optionally imports a user-specified visitor module by path.
    Reasoning

    The CLI loads a user-supplied visitor module from the opt.visit path, which is an explicit user-provided plugin feature. It runs only on a local path the operator passes, not fetched from the network or decoded from data, so it is an expected dynamic-import pattern for a CLI tool, though it does execute arbitrary local code by design.

  4. info warn → info by review dynamic-execution dist/schema/yaml-1.1/binary.js:25:25

    `atob` decodes a base64 value at runtime — common step before dynamic fetch or eval (ast pass, confidence 0.75)

                // On IE 11, atob() can't handle newlines
                const str = atob(src.replace(/[\n\r]/g, ''));
                const buffer = new Uint8Array(str.length);
                for (let i = 0; i < str.length; ++i)
    likely benign LLM, confidence 0.90 Duplicate browser-side base64 decoding of YAML !!binary values via atob.
    Reasoning

    This is the same js-yaml binary-type base64 decoding routine as the other finding, duplicated in the dist output. The atob call only converts YAML data to bytes and has no eval or fetch.

  5. info dynamic-execution dist/schema/yaml-1.1/binary.js:51:19

    `btoa` encodes a value as base64 at runtime — used in exfiltration patterns (ast pass, confidence 0.55)

                    s += String.fromCharCode(buf[i]);
                str = btoa(s);
            }
            else {

Reproduce This Scan

Run disclude locally to verify. These commands scan the published file; the "new in this release" marks come from comparing it with the previous release's file, which they don't repeat. Add --format sarif for SARIF output. Add --llm (with an API key in the environment) to include the LLM review.

cargo install disclude --version 4.3.0
curl -fsSL -o yaml-2.9.1.tgz https://registry.npmjs.org/yaml/-/yaml-2.9.1.tgz
printf '%s  %s\n' 4ef6c54cf559b8a207b7b518378230805a1c84af239b14960e8c67c7d59de5d3 yaml-2.9.1.tgz | shasum -a 256 -c -
mkdir pkg && tar -xzf yaml-2.9.1.tgz -C pkg --strip-components 1
disclude scan --untrusted --severity info pkg