---
id: "CVE-2026-121008"
kind: "vulnerability"
aliases: ["CVE-2026-121008"]
title: "Perl SQL::Abstract::Tree: html profile lets bind values inject scripts"
severity: "medium"
cvss: null
epss: null
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["package", "perl", "sql-abstract-tree", "web-apps"]
not_affected_if: ["default-config", "no-browser-rendering", "no-html-profile"]
published_at: "2026-11-04T15:17:41+00:00"
first_seen_at: "2026-11-04T15:27:30+00:00"
updated_at: "2026-11-04T15:28:37+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-121008", "first_seen_at": "2026-11-04T15:27:30+00:00"}]
---

# Perl SQL::Abstract::Tree: html profile lets bind values inject scripts

SQL::Abstract::Tree's html profile does not HTML-escape SQL text or bind values, so markup passes through unchanged. An application that shows formatted SQL in a debug panel or query log can let an attacker run JavaScript in a user's browser if the attacker controls a bind value or part of the SQL.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Check whether the project depends on `SQL::Abstract::Tree` (for example, `cpanm --info SQL::Abstract::Tree` or the `cpanfile`/`Makefile.PL` entry).
- Check the installed version with `perl -MSQL::Abstract::Tree -e 'print $SQL::Abstract::Tree::VERSION'`.
- Look for code that calls the html profile of SQL::Abstract::Tree and renders the output into a web page.

## Fix

- `SQL::Abstract::Tree` versions before `2.000001_04`
- Source link for the patch: github.com (the fix page the sources reference)

## Timeline

- 2026-11-04T15:27:30+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-121008

## Documents

- [fix] Patch: github.com https://github.com/dbsrgits/sql-abstract/commit/85a75fcde3e09da5181dee07a4eccba76ad94305.patch

## From the sources

SQL::Abstract::Tree versions before 2.000001_04 for Perl allow cross-site scripting via unescaped SQL text and bind values in the html profile.

The html profile wraps keywords and placeholders in span elements and breaks lines with br elements, so its output is meant to go into a page as is. The format method does not HTML-escape the SQL text or the bind values it fills in around that markup.

An application that renders SQL formatted with the html profile, such as in a debug panel or query log, allows an attacker who controls a bind value or part of the SQL text to embed JavaScript in the page.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
