GHSA-M56H-5XX3-2JC2

Vulnerability from github – Published: 2024-12-18 15:50 – Updated: 2025-01-07 15:12
VLAI
Summary
Prototype pollution in jsii.configureCategories
Details

Summary

jsii is a TypeScript to JavaScript compiler that also extracts an interface definition manifest to generate RPC stubs in various programming languages. jsii is typically used as a command-line tool, but it can also be loaded as a library. When loaded as a library into a larger application, prototype pollution may happen if untrusted user input is passed to the library. When used as a command line-tool, this pollution cannot occur.

Impact

You may be impacted if you have written an application that loads jsii as a library, and passes untrusted user input into the jsii.configureCategories() function. In that case, a user can craft input in such a way that, following the invocation, a field named "category" with a user-controlled value is added to the JavaScript Object prototype. This will cause every object in the program (both new and existing) to have a field named "category", even if it shouldn't.

This will not affect jsii itself, but it might affect the application you have loaded jsii into.

The function jsii.configureCategories() is used to configure the severity (error, warning, etc.) of various jsii diagnostics.

Impacted versions: <=5.7.2, <=5.6.3, <=5.5.14, <=5.4.45

Example:

const jsii = require('jsii');

// prints 'undefined'
console.log(JSON.stringify({}.category))

// calling 'configureCategories' with user input
jsii.configureCategories(JSON.parse('{"__proto__": "user-input"}'))

// from this point onwards, every single object literal in the program
// will contain the 'category' key, with user controlled value
console.log(JSON.stringify({}.category)) // prints 'user-input'


// this can affect the execution of the main program in case it also makes 
// use of an object key called 'category'. for example, if the main programs 
// happens to have code like this:

const x = {} // some object in the main program (not necessarily empty)

if (x.category) {
  // this block will always be executed, effectively 
  // changing the behavior of the main program.
  console.log('Do something')
} else {
  console.log('Do something else')
}

For more information about javascript prototype pollution, see [1].

Patches

A patch is included in versions 5.7.3, 5.6.4, 5.5.15, 5.4.46

Workarounds

Sanitize user input to configureCategories() by stripping the proto property if detected.

References

If you have any questions or comments about this advisory, we ask that you contact AWS/Amazon Security via our issue reporting page [2] or directly via email to aws-security@amazon.com. Please do not create a public GitHub issue.

[1] https://learn.snyk.io/lesson/prototype-pollution/

[2] https://aws.amazon.com/security/issue-reporting

Credits

We would like to thank Tariq Hawis for collaborating on this issue through the coordinated vulnerability disclosure process.

Show details on source website

{
  "affected": [
    {
      "package": {
        "ecosystem": "npm",
        "name": "jsii"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "5.7.0"
            },
            {
              "fixed": "5.7.3"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ]
    },
    {
      "package": {
        "ecosystem": "npm",
        "name": "jsii"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "5.6.0"
            },
            {
              "fixed": "5.6.4"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ]
    },
    {
      "package": {
        "ecosystem": "npm",
        "name": "jsii"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "5.5.0"
            },
            {
              "fixed": "5.5.15"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ]
    },
    {
      "package": {
        "ecosystem": "npm",
        "name": "jsii"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "5.4.0"
            },
            {
              "fixed": "5.4.46"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ]
    }
  ],
  "aliases": [],
  "database_specific": {
    "cwe_ids": [
      "CWE-1321"
    ],
    "github_reviewed": true,
    "github_reviewed_at": "2024-12-18T15:50:09Z",
    "nvd_published_at": null,
    "severity": "LOW"
  },
  "details": "## Summary\n\n`jsii` is a TypeScript to JavaScript compiler that also extracts an interface definition manifest to generate RPC stubs in various programming languages. jsii is typically used as a command-line tool, but it can also be loaded as a library.\nWhen loaded as a library into a larger application, prototype pollution may happen if untrusted user input is passed to the library. When used as a command line-tool, this pollution cannot occur.\n\n## Impact\n\nYou may be impacted if you have written an application that loads jsii as a library, and passes untrusted user input into the `jsii.configureCategories()` function. In that case, a user can craft input in such a way that, following the invocation, a field named \"category\" with a user-controlled value is added to the JavaScript Object prototype. This will cause every object in the program (both new and existing) to have a field named \"category\", even if it shouldn\u0027t. \n\n**This will not affect jsii itself, but it might affect the application you have loaded jsii into.**\n\n\u003e The function `jsii.configureCategories()` is used to configure the severity (error, warning, etc.) of various jsii diagnostics.\n\n**Impacted versions: \u003c=5.7.2, \u003c=5.6.3, \u003c=5.5.14, \u003c=5.4.45** \n\n**Example:**\n\n```js\nconst jsii = require(\u0027jsii\u0027);\n\n// prints \u0027undefined\u0027\nconsole.log(JSON.stringify({}.category))\n\n// calling \u0027configureCategories\u0027 with user input\njsii.configureCategories(JSON.parse(\u0027{\"__proto__\": \"user-input\"}\u0027))\n\n// from this point onwards, every single object literal in the program\n// will contain the \u0027category\u0027 key, with user controlled value\nconsole.log(JSON.stringify({}.category)) // prints \u0027user-input\u0027\n\n\n// this can affect the execution of the main program in case it also makes \n// use of an object key called \u0027category\u0027. for example, if the main programs \n// happens to have code like this:\n\nconst x = {} // some object in the main program (not necessarily empty)\n\nif (x.category) {\n  // this block will always be executed, effectively \n  // changing the behavior of the main program.\n  console.log(\u0027Do something\u0027)\n} else {\n  console.log(\u0027Do something else\u0027)\n}\n```\n\nFor more information about javascript prototype pollution, see [1].\n\n## Patches\n\nA patch is included in versions [5.7.3](https://github.com/aws/jsii-compiler/releases/tag/v5.7.3), [5.6.4](https://github.com/aws/jsii-compiler/releases/tag/v5.6.4), [5.5.15](https://github.com/aws/jsii-compiler/releases/tag/v5.5.15), [5.4.46](https://github.com/aws/jsii-compiler/releases/tag/v5.4.46)\n\n## Workarounds\n\nSanitize user input to configureCategories() by stripping the __proto__ property if detected.\n\n## References\n\nIf you have any questions or comments about this advisory, we ask that you contact AWS/Amazon Security via our issue reporting page [2] or directly via email to [aws-security@amazon.com](mailto:aws-security@amazon.com). Please do not create a public GitHub issue.\n\n[1] https://learn.snyk.io/lesson/prototype-pollution/\n\n[2] [https://aws.amazon.com/security/issue-reporting](https://aws.amazon.com/security/vulnerability-reporting)\n\n## Credits\n\nWe would like to thank _Tariq Hawis_ for collaborating on this issue through the coordinated vulnerability disclosure process.",
  "id": "GHSA-m56h-5xx3-2jc2",
  "modified": "2025-01-07T15:12:20Z",
  "published": "2024-12-18T15:50:09Z",
  "references": [
    {
      "type": "WEB",
      "url": "https://github.com/aws/jsii-compiler/security/advisories/GHSA-m56h-5xx3-2jc2"
    },
    {
      "type": "PACKAGE",
      "url": "https://github.com/aws/jsii-compiler"
    },
    {
      "type": "WEB",
      "url": "https://github.com/aws/jsii-compiler/releases/tag/v5.4.46"
    },
    {
      "type": "WEB",
      "url": "https://github.com/aws/jsii-compiler/releases/tag/v5.5.15"
    },
    {
      "type": "WEB",
      "url": "https://github.com/aws/jsii-compiler/releases/tag/v5.6.4"
    },
    {
      "type": "WEB",
      "url": "https://github.com/aws/jsii-compiler/releases/tag/v5.7.3"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N",
      "type": "CVSS_V3"
    }
  ],
  "summary": "Prototype pollution in jsii.configureCategories"
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Detection rules are retrieved from Rulezet.

Loading…

Loading…