Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update dependency sequelize to v6 [SECURITY] #10

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

renovate[bot]
Copy link

@renovate renovate bot commented Apr 26, 2021

This PR contains the following updates:

Package Change Age Adoption Passing Confidence
sequelize (source) ^3.5.1 -> ^6.29.0 age adoption passing confidence

GitHub Vulnerability Alerts

GHSA-wfp9-vr4j-f49j

Versions of sequelize prior to 4.12.0 are vulnerable to NoSQL Injection. Query operators such as $gt are not properly sanitized and may allow an attacker to alter data queries, leading to NoSQL Injection.

Recommendation

Upgrade to version 4.12.0 or later

CVE-2019-10752

Affected versions of sequelize are vulnerable to SQL Injection. The function sequelize.json() incorrectly formatted sub paths for JSON queries, which allows attackers to inject SQL statements and execute arbitrary SQL queries if user input is passed to the query. Exploitation example:

return User.findAll({
  where: this.sequelize.json("data.id')) AS DECIMAL) = 1 DELETE YOLO INJECTIONS; -- ", 1)
});

Recommendation

If you are using sequelize 5.x, upgrade to version 5.15.1 or later.
If you are using sequelize 4.x, upgrade to version 4.44.3 or later.

GHSA-fw4p-36j9-rrj3

Versions of sequelize prior to 4.44.4 are vulnerable to Denial of Service (DoS). The SQLite dialect fails to catch a TypeError exception for the results variable. The results value may be undefined and trigger the error on a .map call. This may allow attackers to submit malicious input that forces the exception and crashes the Node process.

The following proof-of-concept crashes the Node process:

const Sequelize = require('sequelize');

const sequelize = new Sequelize({
	dialect: 'sqlite',
	storage: 'database.sqlite'
});

const TypeError = sequelize.define('TypeError', {
	name: Sequelize.STRING,
});

TypeError.sync({force: true}).then(() => {
	return TypeError.create({name: "SELECT tbl_name FROM sqlite_master"});
});

Recommendation

Upgrade to version 4.44.4 or later.

CVE-2023-25813

Impact

The SQL injection exploit is related to replacements. Here is such an example:

In the following query, some parameters are passed through replacements, and some are passed directly through the where option.

User.findAll({
  where: or(
    literal('soundex("firstName") = soundex(:firstName)'),
    { lastName: lastName },
  ),
  replacements: { firstName },
})

This is a very legitimate use case, but this query was vulnerable to SQL injection due to how Sequelize processed the query: Sequelize built a first query using the where option, then passed it over to sequelize.query which parsed the resulting SQL to inject all :replacements.

If the user passed values such as

{
  "firstName": "OR true; DROP TABLE users;",
  "lastName": ":firstName"
}

Sequelize would first generate this query:

SELECT * FROM users WHERE soundex("firstName") = soundex(:firstName) OR "lastName" = ':firstName'

Then would inject replacements in it, which resulted in this:

SELECT * FROM users WHERE soundex("firstName") = soundex('OR true; DROP TABLE users;') OR "lastName" = ''OR true; DROP TABLE users;''

As you can see this resulted in arbitrary user-provided SQL being executed.

Patches

The issue was fixed in Sequelize 6.19.1

Workarounds

Do not use the replacements and the where option in the same query if you are not using Sequelize >= 6.19.1

References

See this thread for more information: https://github.com/sequelize/sequelize/issues/14519

Snyk: https://security.snyk.io/vuln/SNYK-JS-SEQUELIZE-2932027

CVE-2023-22580

Due to improper input filtering in the sequelize js library, can malicious queries lead to sensitive information disclosure.

CVE-2023-22579

Impact

Providing an invalid value to the where option of a query caused Sequelize to ignore that option instead of throwing an error.

A finder call like the following did not throw an error:

User.findAll({
  where: new Date(),
});

As this option is typically used with plain javascript objects, be aware that this only happens at the top level of this option.

Patches

This issue has been patched in sequelize@6.28.1 & @sequelize/core@7.0.0.alpha-20

References

A discussion thread about this issue is open at https://github.com/sequelize/sequelize/discussions/15698

CVE: CVE-2023-22579
Snyk: https://security.snyk.io/vuln/SNYK-JS-SEQUELIZE-3324090

CVE-2023-22578

Impact

Sequelize 6.28.2 and prior has a dangerous feature where using parentheses in the attribute option would make Sequelize use the string as-is in the SQL

User.findAll({
  attributes: [
    ['count(id)', 'count']
  ]
});

Produced

SELECT count(id) AS "count" FROM "users"

Patches

This feature was deprecated in Sequelize 5, and using it prints a deprecation warning.

This issue has been patched in @sequelize/core@7.0.0.alpha-20 and sequelize@6.29.0.

In Sequelize 7, it now produces the following:

SELECT "count(id)" AS "count" FROM "users"

In Sequelize 6, it throws an error explaining that we had to introduce a breaking change, and requires the user to explicitly opt-in to either the Sequelize 7 behavior (always escape) or the Sequelize 5 behavior (inline attributes that include () without escaping). See https://github.com/sequelize/sequelize/pull/15710 for more information.

Mitigations

Do not use user-provided content to build your list or attributes. If you do, make sure that attribute in question actually exists on your model by checking that it exists in the rawAttributes property of your model first.


A discussion thread about this issue is open at https://github.com/sequelize/sequelize/discussions/15694
CVE: CVE-2023-22578


Release Notes

sequelize/sequelize (sequelize)

v6.29.0

Compare Source

Features

v6.28.2

Compare Source

Bug Fixes

v6.28.1

Compare Source

Bug Fixes

v6.28.0

Compare Source

Features
  • types: use retry-as-promised types for retry options to match documentation (#​15484) (fd4afa6)

v6.27.0

Compare Source

Features

v6.26.0

Compare Source

Features

v6.25.8

Compare Source

Bug Fixes

v6.25.7

Compare Source

Bug Fixes

v6.25.6

Compare Source

Bug Fixes

v6.25.5

Compare Source

Bug Fixes

v6.25.4

Compare Source

Bug Fixes

v6.25.3

Compare Source

Bug Fixes
  • don't treat \ as escape in standard strings, support E-strings, support vars after ->> operator, treat lowercase e as valid e-string prefix (#​15139) (7990095), closes #​14700

v6.25.2

Compare Source

Bug Fixes
  • types: fix TS 4.9 excessive depth error on InferAttributes (v6) (#​15135) (851daaf)

v6.25.1

Compare Source

Bug Fixes

v6.25.0

Compare Source

Features

v6.24.0

Compare Source

Features
  • snowflake: Add support for QueryGenerator#tableExistsQuery (#​15087) (a44772e)

v6.23.2

Compare Source

Bug Fixes
  • postgres: add custom order direction to subQuery ordering with minified alias (#​15056) (7203b66)

v6.23.1

Compare Source

Bug Fixes

v6.23.0

Compare Source

Features

v6.22.1

Compare Source

Bug Fixes

v6.22.0

Compare Source

Features

v6.21.6

Compare Source

Bug Fixes

v6.21.5

Compare Source

Bug Fixes

v6.21.4

Compare Source

Bug Fixes

v6.21.3

Compare Source

Bug Fixes
  • postgres: attach postgres error-handler earlier in lifecycle (v6) (#​14731) (90bb694)

v6.21.2

Compare Source

Bug Fixes

v6.21.1

Compare Source

Bug Fixes

v6.21.0

Compare Source

Features
  • exports types to support typescript >= 4.5 nodenext module (#​14620) (cbdf73e)

v6.20.1

Compare Source

Bug Fixes

v6.20.0

Compare Source

Features

v6.19.2

Compare Source

Bug Fixes

v6.19.1

Compare Source

Bug Fixes

⚠️ BREAKING CHANGE: This change is a security fix that patches a serious SQL injection vulnerability, however it is possible that your application made use of it and broke as a result of this change. Please see this issue for more information.

v6.19.0

Compare Source

Bug Fixes
Features
  • types: make Model.init aware of pre-configured foreign keys (#​14370) (5954d2c)

v6.18.0

Compare Source

Features
  • add whereScopeStrategy to merge where scopes with Op.and (#​14152) (8349c02)

v6.17.0

Compare Source

Bug Fixes
Features

v6.16.3

Compare Source

Bug Fixes

v6.16.2

Compare Source

Bug Fixes

v6.16.1

Compare Source

Bug Fixes

v6.16.0

Compare Source

Features

v6.15.1

Compare Source

Bug Fixes

v6.15.0

Compare Source

Bug Fixes
Features

v6.14.1

Compare Source

Bug Fixes

v6.14.0

Compare Source

Bug Fixes
Features

v6.13.0

Compare Source

Bug Fixes
Features

v6.12.5

Compare Source

Bug Fixes

v6.12.4

Compare Source

Bug Fixes
  • mssql/async-queue: fix unable to start mysql due to circular ref (#​13823) (49e8614)

v6.12.3

Compare Source

Bug Fixes

v6.12.2

Compare Source

Bug Fixes

v6.12.1

Compare Source

Bug Fixes

v6.12.0

Compare Source

Bug Fixes
Features

v6.11.0

Compare Source

Features

v6.10.0

Compare Source

Bug Fixes
Features
  • definitions: Adds AbstractQuery and before/afterQuery hook definitions (#​13635) (37a5858)
  • postgresql: easier SSL config and options param support (#​13673) (9591573)

v6.9.0

Compare Source

Bug Fixes
Features

v6.8.0

Compare Source

Bug Fixes
Features

v6.7.0

Compare Source

Bug Fixes
Features

v6.6.5

Compare Source

Bug Fixes

v6.6.4

Compare Source

Bug Fixes

v6.6.2

Compare Source

Bug Fixes

v6.6.1

Compare Source

Bug Fixes

v6.6.0

Compare Source

Bug Fixes

Configuration

📅 Schedule: Branch creation - "" (UTC), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@secure-code-warrior-for-github

Micro-Learning Topic: NoSQL injection (Detected by phrase)

What is this? (2min video)

NoSQL is a variation of data-management technologies, grouped arbitrarily under this name, that really means “non-relational database systems”. This includes graph databases (Cassandra), document databases (MongoDB), key-value stores (Amazon DynamoDB) amongst others.

NoSQL injection happens when an application uses input to build a query or statement without proper filtering or encoding. This may allow an attacker to modify the instruction that is sent to the non-relational database system by supplying specially constructed values, resulting in unauthorised retrieval or modification of data records.

Try this challenge in Secure Code Warrior

Micro-Learning Topic: SQL injection (Detected by phrase)

What is this? (2min video)

This is probably one of the two most exploited vulnerabilities in web applications and has led to a number of high profile company breaches. It occurs when an application fails to sanitize or validate input before using it to dynamically construct a statement. An attacker that exploits this vulnerability will be able to gain access to the underlying database and view or modify data without permission.

Try this challenge in Secure Code Warrior

Micro-Learning Topic: SQLi (Detected by phrase)

What is this? (2min video)

This is probably one of the two most exploited vulnerabilities in web applications and has led to a number of high profile company breaches. It occurs when an application fails to sanitize or validate input before using it to dynamically construct a statement. An attacker that exploits this vulnerability will be able to gain access to the underlying database and view or modify data without permission.

Try this challenge in Secure Code Warrior

Micro-Learning Topic: Denial of service (Detected by phrase)

The Denial of Service (DoS) attack is focused on making a resource (site, application, server) unavailable for the purpose it was designed. There are many ways to make a service unavailable for legitimate users by manipulating network packets, programming, logical, or resources handling vulnerabilities, among others. Source: https://www.owasp.org/index.php/Denial_of_Service

Try this challenge in Secure Code Warrior

@renovate renovate bot changed the title Pin dependency sequelize to v3.35.1 [SECURITY] Pin dependency sequelize to 3.35.1 [SECURITY] May 9, 2021
@renovate renovate bot changed the title Pin dependency sequelize to 3.35.1 [SECURITY] Pin dependency sequelize to v3.35.1 [SECURITY] May 15, 2021
@renovate renovate bot changed the title Pin dependency sequelize to v3.35.1 [SECURITY] Pin dependency sequelize to v [SECURITY] Mar 7, 2022
@secure-code-warrior-for-github

Micro-Learning Topic: NoSQL injection (Detected by phrase)

Matched on "NoSQL Injection"

What is this? (2min video)

NoSQL is a variation of data-management technologies, grouped arbitrarily under this name, that really means “non-relational database systems”. This includes graph databases (Cassandra), document databases (MongoDB), key-value stores (Amazon DynamoDB) amongst others.

NoSQL injection happens when an application uses input to build a query or statement without proper filtering or encoding. This may allow an attacker to modify the instruction that is sent to the non-relational database system by supplying specially constructed values, resulting in unauthorised retrieval or modification of data records.

Try this challenge in Secure Code Warrior

Micro-Learning Topic: SQL injection (Detected by phrase)

Matched on "SQL Injection"

What is this? (2min video)

This is probably one of the two most exploited vulnerabilities in web applications and has led to a number of high profile company breaches. It occurs when an application fails to sanitize or validate input before using it to dynamically construct a statement. An attacker that exploits this vulnerability will be able to gain access to the underlying database and view or modify data without permission.

Try this challenge in Secure Code Warrior

Micro-Learning Topic: Denial of service (Detected by phrase)

Matched on "Denial of Service"

The Denial of Service (DoS) attack is focused on making a resource (site, application, server) unavailable for the purpose it was designed. There are many ways to make a service unavailable for legitimate users by manipulating network packets, programming, logical, or resources handling vulnerabilities, among others. Source: https://www.owasp.org/index.php/Denial_of_Service

Try this challenge in Secure Code Warrior

1 similar comment
@secure-code-warrior-for-github

Micro-Learning Topic: NoSQL injection (Detected by phrase)

Matched on "NoSQL Injection"

What is this? (2min video)

NoSQL is a variation of data-management technologies, grouped arbitrarily under this name, that really means “non-relational database systems”. This includes graph databases (Cassandra), document databases (MongoDB), key-value stores (Amazon DynamoDB) amongst others.

NoSQL injection happens when an application uses input to build a query or statement without proper filtering or encoding. This may allow an attacker to modify the instruction that is sent to the non-relational database system by supplying specially constructed values, resulting in unauthorised retrieval or modification of data records.

Try this challenge in Secure Code Warrior

Micro-Learning Topic: SQL injection (Detected by phrase)

Matched on "SQL Injection"

What is this? (2min video)

This is probably one of the two most exploited vulnerabilities in web applications and has led to a number of high profile company breaches. It occurs when an application fails to sanitize or validate input before using it to dynamically construct a statement. An attacker that exploits this vulnerability will be able to gain access to the underlying database and view or modify data without permission.

Try this challenge in Secure Code Warrior

Micro-Learning Topic: Denial of service (Detected by phrase)

Matched on "Denial of Service"

The Denial of Service (DoS) attack is focused on making a resource (site, application, server) unavailable for the purpose it was designed. There are many ways to make a service unavailable for legitimate users by manipulating network packets, programming, logical, or resources handling vulnerabilities, among others. Source: https://www.owasp.org/index.php/Denial_of_Service

Try this challenge in Secure Code Warrior

@renovate renovate bot changed the title Pin dependency sequelize to v [SECURITY] Pin dependency sequelize to v3.35.1 [SECURITY] Sep 25, 2022
@renovate renovate bot force-pushed the renovate/npm-sequelize-vulnerability branch from b3f1750 to ce02797 Compare November 20, 2022 17:49
@renovate renovate bot changed the title Pin dependency sequelize to v3.35.1 [SECURITY] Update dependency sequelize to v6 [SECURITY] Nov 20, 2022
@secure-code-warrior-for-github

Micro-Learning Topic: Information disclosure (Detected by phrase)

Matched on "information disclosure"

Many web applications and APIs do not properly protect sensitive data, such as financial, healthcare, and PII. Attackers may steal or modify such weakly protected data to conduct credit card fraud, identity theft, or other crimes. Sensitive data may be compromised without extra protection, such as encryption at rest or in transit, and requires special precautions when exchanged with the browser. Source: https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project

Try a challenge in Secure Code Warrior

@renovate renovate bot force-pushed the renovate/npm-sequelize-vulnerability branch from ce02797 to 2793fda Compare March 23, 2023 19:13
@renovate renovate bot force-pushed the renovate/npm-sequelize-vulnerability branch 2 times, most recently from 36e904a to 76bed39 Compare April 3, 2023 11:38
@renovate renovate bot force-pushed the renovate/npm-sequelize-vulnerability branch 2 times, most recently from 7b87950 to cb57507 Compare April 17, 2023 15:24
@renovate renovate bot force-pushed the renovate/npm-sequelize-vulnerability branch 2 times, most recently from d6ecd0d to 1e4c677 Compare May 28, 2023 12:52
@renovate renovate bot force-pushed the renovate/npm-sequelize-vulnerability branch 2 times, most recently from 8b40f7b to 7d1399c Compare June 4, 2023 16:48
@renovate renovate bot force-pushed the renovate/npm-sequelize-vulnerability branch 3 times, most recently from 1525495 to 60df583 Compare June 18, 2023 11:35
@renovate renovate bot force-pushed the renovate/npm-sequelize-vulnerability branch from 60df583 to f9856c0 Compare June 20, 2023 22:29
@renovate renovate bot force-pushed the renovate/npm-sequelize-vulnerability branch 4 times, most recently from f62276c to b92f221 Compare June 29, 2023 10:43
@renovate renovate bot force-pushed the renovate/npm-sequelize-vulnerability branch 3 times, most recently from fc894f1 to 296c799 Compare July 9, 2023 10:46
@renovate renovate bot force-pushed the renovate/npm-sequelize-vulnerability branch from 0da157c to 7bf0c54 Compare October 9, 2024 13:09
@renovate renovate bot force-pushed the renovate/npm-sequelize-vulnerability branch 2 times, most recently from 9585f46 to 17310a2 Compare October 28, 2024 16:17
@renovate renovate bot force-pushed the renovate/npm-sequelize-vulnerability branch 4 times, most recently from 611ed48 to 44b4ccb Compare December 4, 2024 03:11
@renovate renovate bot changed the title Update dependency sequelize to v6 [SECURITY] Update dependency sequelize to v6 [SECURITY] - autoclosed Dec 8, 2024
@renovate renovate bot closed this Dec 8, 2024
@renovate renovate bot deleted the renovate/npm-sequelize-vulnerability branch December 8, 2024 18:38
@renovate renovate bot changed the title Update dependency sequelize to v6 [SECURITY] - autoclosed Update dependency sequelize to v6 [SECURITY] Dec 8, 2024
@renovate renovate bot reopened this Dec 8, 2024
@renovate renovate bot force-pushed the renovate/npm-sequelize-vulnerability branch from 5120f61 to 44b4ccb Compare December 8, 2024 22:04
@renovate renovate bot force-pushed the renovate/npm-sequelize-vulnerability branch 4 times, most recently from 8cc25d2 to afc86d4 Compare December 22, 2024 18:46
@renovate renovate bot force-pushed the renovate/npm-sequelize-vulnerability branch 4 times, most recently from 30c7ca5 to a6c78ca Compare January 23, 2025 23:41
@renovate renovate bot force-pushed the renovate/npm-sequelize-vulnerability branch 2 times, most recently from fb339a9 to 83c6a38 Compare January 30, 2025 23:14
@renovate renovate bot force-pushed the renovate/npm-sequelize-vulnerability branch 2 times, most recently from 825b8ca to 783d353 Compare February 9, 2025 18:53
@renovate renovate bot force-pushed the renovate/npm-sequelize-vulnerability branch 2 times, most recently from 04508d2 to 4b6152e Compare March 3, 2025 18:52
@renovate renovate bot force-pushed the renovate/npm-sequelize-vulnerability branch from 4b6152e to d24b8c2 Compare March 11, 2025 16:32
@renovate renovate bot force-pushed the renovate/npm-sequelize-vulnerability branch from d24b8c2 to cd7aa72 Compare March 11, 2025 20:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

0 participants