PYSEC-2026-2527

Vulnerability from pysec - Published: 2026-07-13 14:36 - Updated: 2026-07-13 16:04
VLAI
Details

Impact

This is a stored Cross-Site Scripting (XSS) vulnerability affecting the website and author comment fields. The website field was HTML-escaped using quote=False, which left single and double quotes unescaped. Since the frontend inserts the website value directly into a single-quoted href attribute via string concatenation, a single quote in the URL breaks out of the attribute context, allowing injection of arbitrary event handlers (e.g. onmouseover, onclick).

The same escaping was missing entirely from the user-facing comment edit endpoint (PUT /id/) and the moderation edit endpoint (POST /id//edit/).

Any visitor to a page embedding isso comments is impacted. No authentication or interaction beyond mouse movement is required to trigger a payload — an attacker can post a comment anonymously (moderation is off by default) with a crafted website URL, and the payload persists in the database and fires on every page load. With the full-page invisible overlay technique described in the report, the victim only needs to move their mouse.

Patches

The issue is fixed in commit 3cf27c2. Users should upgrade to a version containing that commit once released. The fix applies html.escape(..., quote=True) to the website field across all three write paths (POST /new, PUT /id/, POST /id//edit/), and adds input validation and escaping to the moderation edit endpoint which previously had neither.

Workarounds

Enabling comment moderation (moderation = enabled = true in isso.cfg) prevents unauthenticated users from publishing comments, raising the bar for exploitation. However, it does not fully mitigate the issue since a moderator activating a malicious comment would still expose visitors. There is no configuration-only workaround that fully prevents the vulnerability.

Resources

  • https://docs.python.org/3/library/html.html#html.escape — note the quote parameter
Impacted products
Name purl
isso pkg:pypi/isso

{
  "affected": [
    {
      "package": {
        "ecosystem": "PyPI",
        "name": "isso",
        "purl": "pkg:pypi/isso"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "0"
            },
            {
              "fixed": "0.13.2"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ],
      "versions": [
        "0.10",
        "0.10.1",
        "0.10.2",
        "0.10.3",
        "0.10.4",
        "0.10.5",
        "0.10.6",
        "0.11.0",
        "0.11.1",
        "0.12.0",
        "0.12.1",
        "0.12.2",
        "0.12.4",
        "0.12.5",
        "0.12.6",
        "0.12.6.1",
        "0.12.6.2",
        "0.13.0",
        "0.13.1.dev0",
        "0.8",
        "0.8.1",
        "0.8.2",
        "0.8.3",
        "0.9",
        "0.9.1",
        "0.9.10",
        "0.9.2",
        "0.9.3",
        "0.9.4",
        "0.9.5",
        "0.9.6",
        "0.9.7",
        "0.9.8",
        "0.9.9"
      ]
    }
  ],
  "aliases": [
    "CVE-2026-27469",
    "GHSA-9fww-8cpr-q66r"
  ],
  "details": "## Impact\n\nThis is a stored Cross-Site Scripting (XSS) vulnerability affecting the website and author comment fields. The website field was HTML-escaped using quote=False, which left single and double quotes unescaped. Since the frontend inserts the website value directly into a single-quoted href attribute via string concatenation, a single quote in the URL breaks out of the attribute context, allowing injection of arbitrary event handlers (e.g. onmouseover, onclick).\n\nThe same escaping was missing entirely from the user-facing comment edit endpoint (PUT /id/\u003cid\u003e) and the moderation edit endpoint (POST /id/\u003cid\u003e/edit/\u003ckey\u003e).\n\nAny visitor to a page embedding isso comments is impacted. No authentication or interaction beyond mouse movement is required to trigger a payload \u2014 an attacker can post a comment anonymously (moderation is off by default) with a crafted website URL, and the payload persists in the database and fires on every page load. With the full-page invisible overlay technique described in the report, the victim only needs to move their mouse.\n\n## Patches\n\nThe issue is fixed in commit 3cf27c2. Users should upgrade to a version containing that commit once released. The fix applies html.escape(..., quote=True) to the website field across all three write paths (POST /new, PUT /id/\u003cid\u003e, POST /id/\u003cid\u003e/edit/\u003ckey\u003e), and adds input validation and escaping to the moderation edit endpoint which previously had neither.\n\n## Workarounds\n\n  Enabling comment moderation (moderation = enabled = true in isso.cfg) prevents unauthenticated users from publishing comments, raising the bar for exploitation. However, it\n  does not fully mitigate the issue since a moderator activating a malicious comment would still expose visitors. There is no configuration-only workaround that fully prevents\n   the vulnerability.\n\n## Resources\n\n  - https://docs.python.org/3/library/html.html#html.escape \u2014 note the quote parameter",
  "id": "PYSEC-2026-2527",
  "modified": "2026-07-13T16:04:21.211428Z",
  "published": "2026-07-13T14:36:38.311279Z",
  "references": [
    {
      "type": "WEB",
      "url": "https://github.com/isso-comments/isso/security/advisories/GHSA-9fww-8cpr-q66r"
    },
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-27469"
    },
    {
      "type": "WEB",
      "url": "https://github.com/isso-comments/isso/commit/0afbfe0691ee237963e8fb0b2ee01c9e55ca2144"
    },
    {
      "type": "WEB",
      "url": "https://docs.python.org/3/library/html.html#html.escape"
    },
    {
      "type": "PACKAGE",
      "url": "https://github.com/isso-comments/isso"
    },
    {
      "type": "PACKAGE",
      "url": "https://pypi.org/project/isso"
    },
    {
      "type": "ADVISORY",
      "url": "https://github.com/advisories/GHSA-9fww-8cpr-q66r"
    }
  ],
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N",
      "type": "CVSS_V3"
    }
  ],
  "summary": "Isso affected by Stored XSS via comment website field"
}



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…

Loading…

Loading…

Related by attack behaviour

Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.


Loading…