Vulnerabilities

7 via 9 paths

Dependencies

129

Source

GitHub

Find, fix and prevent vulnerabilities in your code.

Severity
  • 5
  • 2
Status
  • 7
  • 0
  • 0

high severity
new

Uncontrolled Recursion

  • Vulnerable module: @xmldom/xmldom
  • Introduced through: expo-linking@6.3.1

Detailed paths

  • Introduced through: @bluebase/plugin-react-navigation@BlueBaseJS/plugin-react-navigation expo-linking@6.3.1 expo-constants@16.0.2 @expo/config@9.0.4 @expo/config-plugins@8.0.11 @expo/plist@0.1.3 @xmldom/xmldom@0.7.13
    Remediation: Upgrade to expo-linking@7.1.0.

Overview

@xmldom/xmldom is a javascript ponyfill to provide the following APIs that are present in modern browsers to other runtimes. Since version 0.7.0 this package is published to npm as @xmldom/xmldom and no longer as xmldom

Affected versions of this package are vulnerable to Uncontrolled Recursion in the recursive processing of deeply nested XML documents by several DOM-related operations, including normalize, serializeToString, getElementsByTagName, getElementsByTagNameNS, getElementsByClassName, getElementById, cloneNode, importNode, textContent, and isEqualNode. An attacker can cause the application to crash or become unresponsive by submitting a valid, deeply nested XML payload that triggers uncontrolled recursion and stack exhaustion.

PoC

const { DOMParser, XMLSerializer } = require('@xmldom/xmldom');

const depth = 5000;
const xml = '<a>'.repeat(depth) + '</a>'.repeat(depth);
const doc = new DOMParser().parseFromString(xml, 'text/xml');
new XMLSerializer().serializeToString(doc);
// RangeError: Maximum call stack size exceeded

Remediation

Upgrade @xmldom/xmldom to version 0.8.13, 0.9.10 or higher.

References

high severity
new

XML Injection

  • Vulnerable module: @xmldom/xmldom
  • Introduced through: expo-linking@6.3.1

Detailed paths

  • Introduced through: @bluebase/plugin-react-navigation@BlueBaseJS/plugin-react-navigation expo-linking@6.3.1 expo-constants@16.0.2 @expo/config@9.0.4 @expo/config-plugins@8.0.11 @expo/plist@0.1.3 @xmldom/xmldom@0.7.13
    Remediation: Upgrade to expo-linking@7.1.0.

Overview

@xmldom/xmldom is a javascript ponyfill to provide the following APIs that are present in modern browsers to other runtimes. Since version 0.7.0 this package is published to npm as @xmldom/xmldom and no longer as xmldom

Affected versions of this package are vulnerable to XML Injection due to unvalidated comment serialization. When an application uses the package to create an XML comment from untrusted user input, the package fails to sanitize comment-breaking sequences (like -->). An attacker can input --> to terminate the comment prematurely. Once the comment is broken out of, any text the attacker places after the --> is treated as "live" XML markup by the serializer rather than harmless comment text.

PoC

const { DOMImplementation, DOMParser, XMLSerializer } = require('@xmldom/xmldom');

const doc = new DOMImplementation().createDocument(null, 'root', null);

doc.documentElement.appendChild(
  doc.createComment('--><injected attr="1"/><!--')
);

const xml = new XMLSerializer().serializeToString(doc);
console.log(xml);
// <root><!----><injected attr="1"/><!----></root>

const reparsed = new DOMParser().parseFromString(xml, 'text/xml');
console.log(reparsed.documentElement.childNodes.item(1).nodeName);
// injected

Remediation

Upgrade @xmldom/xmldom to version 0.8.13, 0.9.10 or higher.

References

high severity
new

XML Injection

  • Vulnerable module: @xmldom/xmldom
  • Introduced through: expo-linking@6.3.1

Detailed paths

  • Introduced through: @bluebase/plugin-react-navigation@BlueBaseJS/plugin-react-navigation expo-linking@6.3.1 expo-constants@16.0.2 @expo/config@9.0.4 @expo/config-plugins@8.0.11 @expo/plist@0.1.3 @xmldom/xmldom@0.7.13
    Remediation: Upgrade to expo-linking@7.1.0.

Overview

@xmldom/xmldom is a javascript ponyfill to provide the following APIs that are present in modern browsers to other runtimes. Since version 0.7.0 this package is published to npm as @xmldom/xmldom and no longer as xmldom

Affected versions of this package are vulnerable to XML Injection in the serialization of DocumentType nodes when attacker-controlled values are provided to the publicId, systemId, or internalSubset fields. An attacker can inject arbitrary XML markup into the serialized output by supplying specially crafted input to these fields, potentially leading to the injection of malicious DOCTYPE declarations or markup outside the intended context.

Note:

This is only exploitable if untrusted data is passed programmatically to createDocumentType or written directly to the relevant properties and then serialized without enabling strict validation.

Workaround

This vulnerability can be mitigated by passing the option { requireWellFormed: true } to XMLSerializer.serializeToString() to enforce validation of the affected fields.

Remediation

Upgrade @xmldom/xmldom to version 0.8.13, 0.9.10 or higher.

References

high severity
new

XML Injection

  • Vulnerable module: @xmldom/xmldom
  • Introduced through: expo-linking@6.3.1

Detailed paths

  • Introduced through: @bluebase/plugin-react-navigation@BlueBaseJS/plugin-react-navigation expo-linking@6.3.1 expo-constants@16.0.2 @expo/config@9.0.4 @expo/config-plugins@8.0.11 @expo/plist@0.1.3 @xmldom/xmldom@0.7.13
    Remediation: Upgrade to expo-linking@7.1.0.

Overview

@xmldom/xmldom is a javascript ponyfill to provide the following APIs that are present in modern browsers to other runtimes. Since version 0.7.0 this package is published to npm as @xmldom/xmldom and no longer as xmldom

Affected versions of this package are vulnerable to XML Injection via the createProcessingInstruction function. An attacker can inject arbitrary XML nodes into the serialized output by supplying specially crafted data containing the PI-closing sequence, which is not validated or neutralized during serialization. This can alter the structure and meaning of generated XML documents, potentially impacting workflows that store, forward, sign, or parse XML.

Note:

This is only exploitable if the serialization is performed without passing the { requireWellFormed: true } option.

PoC

const { DOMImplementation, XMLSerializer } = require('@xmldom/xmldom');

const doc = new DOMImplementation().createDocument(null, 'r', null);
doc.documentElement.appendChild(
    doc.createProcessingInstruction('a', '?><z/><?q ')
);
console.log(new XMLSerializer().serializeToString(doc));
// <r><?a ?><z/><?q ?></r>
//          ^^^^ injected <z/> element is active markup

Remediation

Upgrade @xmldom/xmldom to version 0.8.13, 0.9.10 or higher.

References

high severity

XML Injection

  • Vulnerable module: @xmldom/xmldom
  • Introduced through: expo-linking@6.3.1

Detailed paths

  • Introduced through: @bluebase/plugin-react-navigation@BlueBaseJS/plugin-react-navigation expo-linking@6.3.1 expo-constants@16.0.2 @expo/config@9.0.4 @expo/config-plugins@8.0.11 @expo/plist@0.1.3 @xmldom/xmldom@0.7.13
    Remediation: Upgrade to expo-linking@7.1.0.

Overview

@xmldom/xmldom is a javascript ponyfill to provide the following APIs that are present in modern browsers to other runtimes. Since version 0.7.0 this package is published to npm as @xmldom/xmldom and no longer as xmldom

Affected versions of this package are vulnerable to XML Injection via the XMLSerializer() function. An attacker can manipulate the structure and integrity of generated XML documents by injecting attacker-controlled markup containing the CDATA terminator ]]> through CDATA section content, which is not properly validated or sanitized during serialization. This can result in unauthorized XML elements or attributes being inserted, potentially leading to business logic manipulation or privilege escalation in downstream consumers.

Remediation

Upgrade @xmldom/xmldom to version 0.8.12, 0.9.9 or higher.

References

medium severity
new

Improper Validation of Specified Index, Position, or Offset in Input

  • Vulnerable module: uuid
  • Introduced through: expo-linking@6.3.1

Detailed paths

  • Introduced through: @bluebase/plugin-react-navigation@BlueBaseJS/plugin-react-navigation expo-linking@6.3.1 expo-constants@16.0.2 @expo/config@9.0.4 @expo/config-plugins@8.0.11 xcode@3.0.1 uuid@7.0.3

Overview

uuid is a RFC4122 (v1, v4, and v5) compliant UUID library.

Affected versions of this package are vulnerable to Improper Validation of Specified Index, Position, or Offset in Input due to accepting external output buffers but not rejecting out-of-range writes (small buf or large offset). This inconsistency allows silent partial writes into caller-provided buffers.

PoC

cd /home/StrawHat/uuid
npm ci
npm run build

node --input-type=module -e "
import {v4,v5,v6} from './dist-node/index.js';
const ns='6ba7b810-9dad-11d1-80b4-00c04fd430c8';
for (const [name,fn] of [
  ['v4',()=>v4({},new Uint8Array(8),4)],
  ['v5',()=>v5('x',ns,new Uint8Array(8),4)],
  ['v6',()=>v6({},new Uint8Array(8),4)],
]) {
  try { fn(); console.log(name,'NO_THROW'); }
  catch(e){ console.log(name,'THREW',e.name); }
}"

Remediation

Upgrade uuid to version 11.1.1, 14.0.0 or higher.

References

medium severity

Missing Release of Resource after Effective Lifetime

  • Vulnerable module: inflight
  • Introduced through: expo-linking@6.3.1

Detailed paths

  • Introduced through: @bluebase/plugin-react-navigation@BlueBaseJS/plugin-react-navigation expo-linking@6.3.1 expo-constants@16.0.2 @expo/config@9.0.4 glob@7.1.6 inflight@1.0.6
  • Introduced through: @bluebase/plugin-react-navigation@BlueBaseJS/plugin-react-navigation expo-linking@6.3.1 expo-constants@16.0.2 @expo/config@9.0.4 @expo/config-plugins@8.0.11 glob@7.1.6 inflight@1.0.6
  • Introduced through: @bluebase/plugin-react-navigation@BlueBaseJS/plugin-react-navigation expo-linking@6.3.1 expo-constants@16.0.2 @expo/config@9.0.4 sucrase@3.34.0 glob@7.1.6 inflight@1.0.6

Overview

Affected versions of this package are vulnerable to Missing Release of Resource after Effective Lifetime via the makeres function due to improperly deleting keys from the reqs object after execution of callbacks. This behavior causes the keys to remain in the reqs object, which leads to resource exhaustion.

Exploiting this vulnerability results in crashing the node process or in the application crash.

Note: This library is not maintained, and currently, there is no fix for this issue. To overcome this vulnerability, several dependent packages have eliminated the use of this library.

To trigger the memory leak, an attacker would need to have the ability to execute or influence the asynchronous operations that use the inflight module within the application. This typically requires access to the internal workings of the server or application, which is not commonly exposed to remote users. Therefore, “Attack vector” is marked as “Local”.

PoC

const inflight = require('inflight');

function testInflight() {
  let i = 0;
  function scheduleNext() {
    let key = `key-${i++}`;
    const callback = () => {
    };
    for (let j = 0; j < 1000000; j++) {
      inflight(key, callback);
    }

    setImmediate(scheduleNext);
  }


  if (i % 100 === 0) {
    console.log(process.memoryUsage());
  }

  scheduleNext();
}

testInflight();

Remediation

There is no fixed version for inflight.

References