EEF-CVE-2026-66293

Source
https://cna.erlef.org/osv/EEF-CVE-2026-66293.html
Import Source
https://cna.erlef.org/osv/EEF-CVE-2026-66293.json
JSON Data
https://api.osv.dev/v1/vulns/EEF-CVE-2026-66293
Aliases
  • CVE-2026-66293
  • GHSA-mm3m-xwmf-v698
Published
2026-11-06T10:16:42Z
Modified
2026-11-06T10:41:07Z
Severity
  • 2.1 (Low) CVSS_V4 - CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:L/SI:L/SA:N CVSS Calculator
Summary
XML comment injection in Saxy encoder via unescaped double hyphen
Details

Summary

XML injection in the encoder of Saxy. Saxy.Encoder does not neutralize the -- sequence in XML comment content: escape_comment/2 returns the comment binary unchanged in every clause and only appends a space when the comment ends in a single -, so neither an interior -- nor a full --> is escaped or rejected before the encoder wraps the content in the <!-- and --> delimiters.

When an application serializes attacker-controlled text as a comment, through Saxy.XML.comment/1 or a raw {:comment, text} simple form child, the attacker can close the comment early with --> and inject arbitrary sibling markup into the serialized document. A downstream parser then sees elements, attributes, and text that the application never built. Where the document is rendered as HTML or SVG, the injected markup executes as stored cross-site scripting; where it is consumed by another XML processor, the attacker can forge data that the producing application never emitted. Documents that Saxy only parses are not a vector.

This issue affects saxy: from 0.7.0 before 1.7.0.

Workarounds

Reject or rewrite the -- sequence in untrusted text before passing it to Saxy.XML.comment/1, for example by replacing -- with - -.

Alternatively, stop emitting untrusted data as XML comments. Comments carry no semantic payload for consumers, so the text can usually be moved into an element or a CDATA section instead.

Configurations

Only applications that place untrusted text into an XML comment node are affected. The untrusted value must reach Saxy.XML.comment/1 or a raw {:comment, text} simple form child that is then serialized with Saxy.encode!/2 or Saxy.encode_to_iodata!/2. Documents that are only parsed by Saxy never reach the encoder and are not a vector.

Database specific
{
    "capec_ids": [
        "CAPEC-250"
    ],
    "cpe_ids": [
        "cpe:2.3:a:qcam:saxy:*:*:*:*:*:*:*:*"
    ],
    "cwe_ids": [
        "CWE-91"
    ]
}
References
Credits
    • Peter Ullrich - FINDER
    • Peter Ullrich - REPORTER
    • Peter Ullrich - REMEDIATION_DEVELOPER
    • Cẩm Huỳnh - REMEDIATION_REVIEWER
    • Jonatan Männchen / EEF - ANALYST
    • Peter Ullrich - COORDINATOR

Affected packages

Hex / saxy

Package

Name
saxy
Purl
pkg:hex/saxy

Affected ranges

Type
SEMVER
Events
Introduced
0.7.0
Fixed
1.7.0

Affected versions

0.*
0.7.0
0.8.0
0.9.0
0.9.1
0.10.0
1.*
1.0.0
1.1.0
1.2.0
1.2.1
1.2.2
1.3.0
1.4.0
1.5.0
1.6.0
1.6.1

Database specific

source
"https://cna.erlef.org/osv/EEF-CVE-2026-66293.json"

Git / github.com/qcam/saxy

Affected ranges

Type
GIT
Repo
https://github.com/qcam/saxy
Events

Affected versions

v0.*
v0.10.0
v0.7.0
v0.8.0
v0.9.1
v1.*
v1.0.0
v1.1.0
v1.2.0
v1.2.1
v1.2.2
v1.3.0
v1.4.0
v1.5.0
v1.6.0
v1.6.1

Database specific

source
"https://cna.erlef.org/osv/EEF-CVE-2026-66293.json"