ghsa-hq7p-j377-6v63
Vulnerability from github
There is a possible vulnerability in ActiveRecord related to the sanitization of comments. This vulnerability has been assigned the CVE identifier CVE-2023-22794.
Versions Affected: >= 6.0.0 Not affected: < 6.0.0 Fixed Versions: 6.0.6.1, 6.1.7.1, 7.0.4.1 Impact
Previously the implementation of escaping for comments was insufficient for
If malicious user input is passed to either the annotate query method, the optimizer_hints query method, or through the QueryLogs interface which automatically adds annotations, it may be sent to the database with insufficient sanitization and be able to inject SQL outside of the comment.
In most cases these interfaces won’t be used with user input and users should avoid doing so.
Example vulnerable code: ``` Post.where(id: 1).annotate("#{params[:user_input]}")
Post.where(id: 1).optimizer_hints("#{params[:user_input]}")
Example vulnerable QueryLogs configuration (the default configuration is not vulnerable):
config.active_record.query_log_tags = [
{
something: -> {
The FIXED releases are available at the normal locations. Workarounds
Avoid passing user input to annotate and avoid using QueryLogs configuration which can include user input. Patches
To aid users who aren’t able to upgrade immediately we have provided patches for the two supported release series. They are in git-am format and consist of a single changeset.
6-0-Make-sanitize_as_sql_comment-more-strict.patch - Patch for 6.0 series
6-1-Make-sanitize_as_sql_comment-more-strict.patch - Patch for 6.1 series
7-0-Make-sanitize_as_sql_comment-more-strict.patch - Patch for 7.0 series
Please note that only the 7.0.Z and 6.1.Z series are supported at present, and 6.0.Z for severe vulnerabilities. Users of earlier unsupported releases are advised to upgrade as soon as possible as we cannot guarantee the continued availability of security fixes for unsupported releases.
{ "affected": [ { "package": { "ecosystem": "RubyGems", "name": "activerecord" }, "ranges": [ { "events": [ { "introduced": "6.0.0" }, { "fixed": "6.0.6.1" } ], "type": "ECOSYSTEM" } ] }, { "package": { "ecosystem": "RubyGems", "name": "activerecord" }, "ranges": [ { "events": [ { "introduced": "6.1.0" }, { "fixed": "6.1.7.1" } ], "type": "ECOSYSTEM" } ] }, { "package": { "ecosystem": "RubyGems", "name": "activerecord" }, "ranges": [ { "events": [ { "introduced": "7.0.0" }, { "fixed": "7.0.4.1" } ], "type": "ECOSYSTEM" } ] } ], "aliases": [ "CVE-2023-22794" ], "database_specific": { "cwe_ids": [ "CWE-89" ], "github_reviewed": true, "github_reviewed_at": "2023-01-18T18:20:19Z", "nvd_published_at": "2023-02-09T20:15:00Z", "severity": "HIGH" }, "details": "There is a possible vulnerability in ActiveRecord related to the sanitization of comments. This vulnerability has been assigned the CVE identifier CVE-2023-22794.\n\nVersions Affected: \u003e= 6.0.0 Not affected: \u003c 6.0.0 Fixed Versions: 6.0.6.1, 6.1.7.1, 7.0.4.1\nImpact\n\nPreviously the implementation of escaping for comments was insufficient for\n\nIf malicious user input is passed to either the annotate query method, the optimizer_hints query method, or through the QueryLogs interface which automatically adds annotations, it may be sent to the database with insufficient sanitization and be able to inject SQL outside of the comment.\n\nIn most cases these interfaces won\u2019t be used with user input and users should avoid doing so.\n\nExample vulnerable code:\n```\nPost.where(id: 1).annotate(\"#{params[:user_input]}\")\n\nPost.where(id: 1).optimizer_hints(\"#{params[:user_input]}\")\n```\nExample vulnerable QueryLogs configuration (the default configuration is not vulnerable):\n```\nconfig.active_record.query_log_tags = [\n {\n something: -\u003e { \u003csome value including user input\u003e }\n }\n]\n```\nAll users running an affected release should either upgrade or use one of the workarounds immediately.\nReleases\n\nThe FIXED releases are available at the normal locations.\nWorkarounds\n\nAvoid passing user input to annotate and avoid using QueryLogs configuration which can include user input.\nPatches\n\nTo aid users who aren\u2019t able to upgrade immediately we have provided patches for the two supported release series. They are in git-am format and consist of a single changeset.\n\n 6-0-Make-sanitize_as_sql_comment-more-strict.patch - Patch for 6.0 series\n 6-1-Make-sanitize_as_sql_comment-more-strict.patch - Patch for 6.1 series\n 7-0-Make-sanitize_as_sql_comment-more-strict.patch - Patch for 7.0 series\n\nPlease note that only the 7.0.Z and 6.1.Z series are supported at present, and 6.0.Z for severe vulnerabilities. Users of earlier unsupported releases are advised to upgrade as soon as possible as we cannot guarantee the continued availability of security fixes for unsupported releases.", "id": "GHSA-hq7p-j377-6v63", "modified": "2024-02-02T16:49:27Z", "published": "2023-01-18T18:20:19Z", "references": [ { "type": "ADVISORY", "url": "https://nvd.nist.gov/vuln/detail/CVE-2023-22794" }, { "type": "WEB", "url": "https://github.com/rails/rails/commit/d7aba06953f9fa789c411676b941d20df8ef73de" }, { "type": "WEB", "url": "https://discuss.rubyonrails.org/t/cve-2023-22794-sql-injection-vulnerability-via-activerecord-comments/82117" }, { "type": "PACKAGE", "url": "https://github.com/rails/rails" }, { "type": "WEB", "url": "https://github.com/rails/rails/releases/tag/v7.0.4.1" }, { "type": "WEB", "url": "https://github.com/rubysec/ruby-advisory-db/blob/master/gems/activerecord/CVE-2023-22794.yml" }, { "type": "WEB", "url": "https://security.netapp.com/advisory/ntap-20240202-0008" }, { "type": "WEB", "url": "https://www.debian.org/security/2023/dsa-5372" } ], "schema_version": "1.4.0", "severity": [ { "score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H", "type": "CVSS_V3" } ], "summary": "SQL Injection Vulnerability via ActiveRecord comments" }
Sightings
Author | Source | Type | Date |
---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
- Confirmed: The vulnerability is confirmed from an analyst perspective.
- Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
- Patched: This vulnerability was successfully patched by the user reporting the sighting.
- Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
- Not confirmed: The user expresses doubt about the veracity of the vulnerability.
- Not patched: This vulnerability was not successfully patched by the user reporting the sighting.