Vulnerabilities in pkg:npm/@github/paste-markdown

PACKAGE
Advisory Identifier: GHSA-gpfj-4j6g-c4w9
Advisory Summary

CVE-2021-37700 is a MODERATE (CVSS 6.5) cross-site scripting vulnerability (CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')) affecting @github/paste markdown libraries in the npm ecosystem. The issue involves clipboard-based dom-xss. Remediation is available by upgrading affected packages to version 0.3.4.

1 Known Advisory Record(s)
Package Vulnerability Intelligence

pkg:npm/@github/paste-markdown

1 Known Advisory Record(s)

Vulnerability advisories affecting package pkg:npm/@github/paste-markdown. Select an advisory below to view technical details or fixes.

Advisory ID CVE / NVD Severity Summary
GHSA-gpfj-4j6g-c4w9 CVE-2021-37700 MODERATE Clipboard-based DOM-XSS

CVE-2021-37700 at a Glance

CVE Identifier CVE-2021-37700
GHSA Identifier GHSA-gpfj-4j6g-c4w9
Severity MODERATE
CVSS v3.1 Base Score 6.5
CWE Classification CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
Affected Product @github/paste markdown
Package Ecosystem npm
Published Date
Last Updated

Security Impact

CVSS: 6.5

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:R/S:U/C:H/I:N/A:N).

Attack Vector Network (AV:N)
Attack Complexity Low (AC:L)
Privileges Required None (PR:N)
User Interaction Required (UI:R)
Scope Unchanged (S:U)
Confidentiality High (C:H)
Integrity None (I:N)
Availability None (A:N)

How to Fix CVE-2021-37700

To remediate this vulnerability, upgrade all affected @github/paste markdown dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

@github/paste-markdown fixed: 0.3.4
npm install @github/paste-markdown@0.3.4
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

npm ls @github/paste-markdown

How to Check if You Are Affected

To determine whether your Node.js application is affected by CVE-2021-37700, inspect your project dependencies using npm:

npm ls @github/paste-markdown

Analyze the terminal output to locate any version of @github/paste markdown in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 0.3.4), your application is affected.

Note: The npm ls @github/paste-markdown 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-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting'), where the product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users. In @github/paste markdown, 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

### Impact A self Cross-Site Scripting vulnerability exists in the @github/paste-markdown library. If the clipboard data contains the string `<table>`, a **div** is dynamically created, and the clipboard content is copied into its **innerHTML** property without any sanitization, resulting in improper execution of JavaScript in the browser of the victim (the user who pasted the code). Users directed to copy text from a malicious website and paste it into pages that utilize this library are affected. The following @github/paste-markdown code snippet is triggered when the user pastes something and the browser's clipboard data contains an entry whose content-type is **text/HTML**. ```typescript function generateText(transfer: DataTransfer): string | undefined { if (Array.from(transfer.types).indexOf('text/html') === -1) return let html = transfer.getData('text/html') if (!/<table/i.test(html)) return html = html.replace(/<meta.*?>/, '') const el = document.createElement('div') el.innerHTML = html const tables = el.querySelectorAll('table') for (const table of tables) { if (table.closest('[data-paste-markdown-skip]')) { table.replaceWith(new Text(table.textContent || '')) } const formattedTable = tableMarkdown(table) table.replaceWith(new Text(formattedTable)) } return el.innerHTML } ``` ### Patches A security patch was released in [version 0.3.4](https://github.com/github/paste-markdown/releases/tag/v0.3.4). ### Workarounds A Content Security Policy that prevents `unsafe-inline` helps reduce the likelihood of this vulnerability being exploited in modern browsers. <!-- ### References _Are there any links users can visit to find out more?_ ### For more information If you have any questions or comments about this advisory: * Open an issue in [example link to repo](http://example.com) * Email us at [example email address](mailto:example@example.com) * -->

CVE-2021-37700 Affected @github/paste markdown Versions

1 component(s)
Fixed Versions:
0.3.4
Product / Package Ecosystem Affected Versions Fixed Version
@github/paste-markdown
npm
< 0.3.4
0.3.4

References

Frequently Asked Questions

What is CVE-2021-37700?
CVE-2021-37700 is a security vulnerability in @github/paste markdown involving Clipboard-based DOM-XSS under CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting').
Which @github/paste markdown versions are affected?
Affected versions include releases prior to 0.3.4 across affected packages: @github/paste-markdown.
What version fixes CVE-2021-37700?
Upgrading to 0.3.4 (or the latest patched release for your respective branch) resolves the vulnerability.
Is @github/paste-markdown affected?
Yes, @github/paste-markdown is affected in releases prior to 0.3.4. Upgrade your dependency to 0.3.4 or later.
What is the CVSS score of CVE-2021-37700?
CVE-2021-37700 has a CVSS v3.1 base score of 6.5 (MODERATE) with vector string CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N.
What CWE is associated with CVE-2021-37700?
CVE-2021-37700 is classified under CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting') (The product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users.).
How can I check npm dependencies for CVE-2021-37700?
Run the dependency tree command: 'npm ls @github/paste-markdown'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-gpfj-4j6g-c4w9",
  "modified" : "2021-08-30T23:16:08Z",
  "published" : "2021-08-12T20:42:17Z",
  "aliases" : [ "CVE-2021-37700" ],
  "summary" : "Clipboard-based DOM-XSS",
  "details" : "### Impact\n\nA self Cross-Site Scripting vulnerability exists in the @github/paste-markdown library. If the clipboard data contains the string `<table>`, a **div** is dynamically created, and the clipboard content is copied into its **innerHTML** property without any sanitization, resulting in improper execution of JavaScript in the browser of the victim (the user who pasted the code). Users directed to copy text from a malicious website and paste it into pages that utilize this library are affected.\n\nThe following @github/paste-markdown code snippet is triggered when the user pastes something and the browser's clipboard data contains an entry whose content-type is **text/HTML**.\n\n```typescript\nfunction generateText(transfer: DataTransfer): string | undefined {\n  if (Array.from(transfer.types).indexOf('text/html') === -1) return\n\n  let html = transfer.getData('text/html')\n  if (!/<table/i.test(html)) return\n\n  html = html.replace(/<meta.*?>/, '')\n\n  const el = document.createElement('div')\n  el.innerHTML = html\n  const tables = el.querySelectorAll('table')\n\n  for (const table of tables) {\n    if (table.closest('[data-paste-markdown-skip]')) {\n      table.replaceWith(new Text(table.textContent || ''))\n    }\n    const formattedTable = tableMarkdown(table)\n    table.replaceWith(new Text(formattedTable))\n  }\n\n  return el.innerHTML\n}\n```\n\n### Patches\nA security patch was released in [version 0.3.4](https://github.com/github/paste-markdown/releases/tag/v0.3.4).\n\n### Workarounds\nA Content Security Policy that prevents `unsafe-inline` helps reduce the likelihood of this vulnerability being exploited in modern browsers.\n\n<!--\n### References\n_Are there any links users can visit to find out more?_\n\n### For more information\nIf you have any questions or comments about this advisory:\n* Open an issue in [example link to repo](http://example.com)\n* Email us at [example email address](mailto:example@example.com)\n*\n-->\n",
  "severity" : [ {
    "type" : "CVSS_V3",
    "score" : "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "npm",
      "name" : "@github/paste-markdown"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "0.3.4"
      } ]
    } ]
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/github/paste-markdown/security/advisories/GHSA-gpfj-4j6g-c4w9"
  }, {
    "type" : "ADVISORY",
    "url" : "https://nvd.nist.gov/vuln/detail/CVE-2021-37700"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/github/paste-markdown/commit/32b7ea3f29ae8f256f9d19768387be42678ddf30"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/github/paste-markdown"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/github/paste-markdown/releases/tag/v0.3.4"
  }, {
    "type" : "WEB",
    "url" : "https://www.npmjs.com/package/@github/paste-markdown"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-79" ],
    "severity" : "MODERATE",
    "github_reviewed" : true,
    "github_reviewed_at" : "2021-08-12T20:41:45Z",
    "nvd_published_at" : "2021-08-12T21:15:00Z"
  }
}