Vulnerabilities in pkg:gem/phlex

PACKAGE
Advisory Summary

GHSA-w67g-2h6v-vjgq is a HIGH (CVSS 7.1) cross-site scripting vulnerability (CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')) affecting Phlex libraries in the RubyGems ecosystem. The issue involves phlex xss protection bypass via attribute splatting, dynamic tags, and href values. Remediation is available by upgrading affected packages to version 2.4.1, 2.3.2, 2.2.2, 2.1.3, 2.0.2, 1.11.1.

4 Known Advisory Record(s)
Package Vulnerability Intelligence

pkg:gem/phlex

4 Known Advisory Record(s)

Vulnerability advisories affecting package pkg:gem/phlex. Select an advisory below to view technical details or fixes.

Advisory ID CVE / NVD Severity Summary
GHSA-w67g-2h6v-vjgq - HIGH Phlex XSS protection bypass via attribute splatting, dynamic tags, and href values
GHSA-9p57-h987-4vgx CVE-2024-32970 HIGH Phlex vulnerable to Cross-site Scripting (XSS) via maliciously formed HTML attribute names and values
GHSA-g7xq-xv8c-h98c CVE-2024-32463 HIGH Cross-site Scripting (XSS) possible due to improper sanitisation of `href` attributes on `<a>` tags
GHSA-242p-4v39-2v8g CVE-2024-28199 HIGH Cross-site Scripting (XSS) possible with maliciously formed HTML attribute names and values in Phlex

GHSA-w67g-2h6v-vjgq at a Glance

CVE Identifier N/A
GHSA Identifier GHSA-w67g-2h6v-vjgq
Severity HIGH
CVSS v3.1 Base Score 7.1
CWE Classification CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
Affected Product Phlex
Package Ecosystem RubyGems
Published Date
Last Updated

Security Impact

CVSS: 7.1

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:L/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 Low (I:L)
Availability None (A:N)

How to Fix GHSA-w67g-2h6v-vjgq

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

phlex fixed: 2.4.1
Upgrade phlex to 2.4.1
phlex fixed: 2.3.2
Upgrade phlex to 2.3.2
phlex fixed: 2.2.2
Upgrade phlex to 2.2.2
phlex fixed: 2.1.3
Upgrade phlex to 2.1.3
phlex fixed: 2.0.2
Upgrade phlex to 2.0.2
phlex fixed: 1.11.1
Upgrade phlex to 1.11.1
Verify Direct and Transitive Dependencies

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

inspect dependencies for phlex

How to Check if You Are Affected

To determine whether your application is affected by GHSA-w67g-2h6v-vjgq, inspect your project dependencies for Phlex:

inspect dependencies for phlex

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

Note: Verify declared build manifests and deployed runtime container environments.

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 Phlex, 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 During a security audit conducted with Claude Opus 4.6 and GPT-5.3-Codex, we identified three specific ways to bypass the XSS (cross-site-scripting) protection built into Phlex. 1. The first bypass could happen if user-provided attributes with string keys were splatted into HTML tag, e.g. `div(**user_attributes)`. 2. The second bypass could happen if user-provided tag names were passed to the `tag` method, e.g. `tag(some_tag_name_from_user)`. 3. The third bypass could happen if user’s links were passed to `href` attributes, e.g. `a(href: user_provided_link)`. All three of these patterns are meant to be safe and all have now been patched. ### Patches Phlex has patched all three issues and introduced new tests that run against Safari, Firefox and Chrome. The patched versions are: - [2.4.1](https://rubygems.org/gems/phlex/versions/2.4.1) - [2.3.2](https://rubygems.org/gems/phlex/versions/2.3.2) - [2.2.2](https://rubygems.org/gems/phlex/versions/2.2.2) - [2.1.3](https://rubygems.org/gems/phlex/versions/2.1.3) - [2.0.2](https://rubygems.org/gems/phlex/versions/2.0.3) - [1.11.1](https://rubygems.org/gems/phlex/versions/1.11.1) Phlex has also patched the [`main`](https://github.com/yippee-fun/phlex) branch in GitHub. ### Workarounds If a project uses a secure CSP (content security policy) or if the application doesn’t use any of the above patterns, it is not at risk.

GHSA-w67g-2h6v-vjgq Affected Phlex Versions

6 component(s)
Fixed Versions:
2.4.12.3.22.2.22.1.32.0.21.11.1
Product / Package Ecosystem Affected Versions Fixed Version
phlex
RubyGems
≥ 2.4.0.beta1
< 2.4.1
2.4.1
phlex
RubyGems
≥ 2.3.0
< 2.3.2
2.3.2
phlex
RubyGems
≥ 2.2.0
< 2.2.2
2.2.2
phlex
RubyGems
≥ 2.1.0
< 2.1.3
2.1.3
phlex
RubyGems
≥ 2.0.0.beta1
< 2.0.2
2.0.2
phlex
RubyGems
< 1.11.1
1.11.1

References

Frequently Asked Questions

What is GHSA-w67g-2h6v-vjgq?
GHSA-w67g-2h6v-vjgq is a security vulnerability in Phlex involving Phlex XSS protection bypass via attribute splatting, dynamic tags, and href values under CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting').
Which Phlex versions are affected?
Affected versions include releases prior to 2.4.1, 2.3.2, 2.2.2, 2.1.3, 2.0.2, 1.11.1 across affected packages: phlex.
What version fixes GHSA-w67g-2h6v-vjgq?
Upgrading to 2.4.1, 2.3.2, 2.2.2, 2.1.3, 2.0.2, 1.11.1 (or the latest patched release for your respective branch) resolves the vulnerability.
Is phlex affected?
Yes, phlex is affected in releases prior to 2.4.1, 2.3.2, 2.2.2, 2.1.3, 2.0.2, 1.11.1. Upgrade your dependency to 2.4.1, 2.3.2, 2.2.2, 2.1.3, 2.0.2, 1.11.1 or later.
What is the CVSS score of GHSA-w67g-2h6v-vjgq?
GHSA-w67g-2h6v-vjgq has a CVSS v3.1 base score of 7.1 (HIGH) with vector string CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:L/A:N.
What CWE is associated with GHSA-w67g-2h6v-vjgq?
GHSA-w67g-2h6v-vjgq 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 RubyGems dependencies for GHSA-w67g-2h6v-vjgq?
Run the dependency tree command: 'inspect dependencies for phlex'. 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-w67g-2h6v-vjgq",
  "modified" : "2026-02-06T19:35:09Z",
  "published" : "2026-02-06T19:35:09Z",
  "aliases" : [ ],
  "summary" : "Phlex XSS protection bypass via attribute splatting, dynamic tags, and href values",
  "details" : "### Impact\n\nDuring a security audit conducted with Claude Opus 4.6 and GPT-5.3-Codex, we identified three specific ways to bypass the XSS (cross-site-scripting) protection built into Phlex.\n\n1. The first bypass could happen if user-provided attributes with string keys were splatted into HTML tag, e.g. `div(**user_attributes)`.\n2. The second bypass could happen if user-provided tag names were passed to the `tag` method, e.g. `tag(some_tag_name_from_user)`.\n3. The third bypass could happen if user’s links were passed to `href` attributes, e.g. `a(href: user_provided_link)`.\n\nAll three of these patterns are meant to be safe and all have now been patched.\n\n### Patches\n\nPhlex has patched all three issues and introduced new tests that run against Safari, Firefox and Chrome.\n\nThe patched versions are:\n\n- [2.4.1](https://rubygems.org/gems/phlex/versions/2.4.1)\n- [2.3.2](https://rubygems.org/gems/phlex/versions/2.3.2)\n- [2.2.2](https://rubygems.org/gems/phlex/versions/2.2.2)\n- [2.1.3](https://rubygems.org/gems/phlex/versions/2.1.3)\n- [2.0.2](https://rubygems.org/gems/phlex/versions/2.0.3)\n- [1.11.1](https://rubygems.org/gems/phlex/versions/1.11.1)\n\nPhlex has also patched the [`main`](https://github.com/yippee-fun/phlex) branch in GitHub.\n\n### Workarounds\nIf a project uses a secure CSP (content security policy) or if the application doesn’t use any of the above patterns, it is not at risk.",
  "severity" : [ {
    "type" : "CVSS_V3",
    "score" : "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:L/A:N"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "RubyGems",
      "name" : "phlex"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "2.4.0.beta1"
      }, {
        "fixed" : "2.4.1"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "RubyGems",
      "name" : "phlex"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "2.3.0"
      }, {
        "fixed" : "2.3.2"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "RubyGems",
      "name" : "phlex"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "2.2.0"
      }, {
        "fixed" : "2.2.2"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "RubyGems",
      "name" : "phlex"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "2.1.0"
      }, {
        "fixed" : "2.1.3"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "RubyGems",
      "name" : "phlex"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "2.0.0.beta1"
      }, {
        "fixed" : "2.0.2"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "RubyGems",
      "name" : "phlex"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "1.11.1"
      } ]
    } ]
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/yippee-fun/phlex/security/advisories/GHSA-w67g-2h6v-vjgq"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/yippee-fun/phlex/commit/1d85da417cb15eb8cb2f54a68d531c9b35d9d03a"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/yippee-fun/phlex/commit/556441d5a64ff93f749e8116a05b2d97264468ee"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/yippee-fun/phlex/commit/74e3d8610ffabc2cf5f241945e9df4b14dceb97d"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/yippee-fun/phlex/commit/9f56ad13bea9a7d6117fdfd510446c890709eeac"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/yippee-fun/phlex/commit/fe9ea708672f9fa42526d9b47e1cdc4634860ef1"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/yippee-fun/phlex"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-79" ],
    "severity" : "HIGH",
    "github_reviewed" : true,
    "github_reviewed_at" : "2026-02-06T19:35:09Z",
    "nvd_published_at" : null
  }
}