Логотип exploitDog
Консоль
Логотип exploitDog

exploitDog

github логотип

GHSA-vcc4-2c75-vc9v

Опубликовано: 16 июн. 2026
Источник: github
Github: Прошло ревью
CVSS3: 4.2

Описание

Caddy: stripHTML template function bypass

Summary

Caddy’s stripHTML template function cannot reliably remove all HTML tags from input strings. Certain malformed HTML, such as <<>img src=x onerror=alert()>, can bypass the tag-stripping logic, potentially leaving dangerous content in the output if it is later rendered as HTML. This may allow client-side XSS in cases where untrusted strings are rendered unsafely.


Details

The vulnerability originates from funcStripHTML in:

caddy/caddy/caddyhttp/templates/tplcontext.go

func (TemplateContext) funcStripHTML(s string) string { var buf bytes.Buffer var inTag, inQuotes bool var tagStart int for i, ch := range s { if inTag { if ch == '>' && !inQuotes { inTag = false } else if ch == '<' && !inQuotes { // false start buf.WriteString(s[tagStart:i]) tagStart = i } else if ch == '"' { inQuotes = !inQuotes } continue } if ch == '<' { inTag = true tagStart = i continue } buf.WriteRune(ch) } if inTag { // false start buf.WriteString(s[tagStart:]) } return buf.String() }

POC

Caddyfile setup

:8080 { root * ./site file_server templates }

Template file (index.html)

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>StripHTML Bypass Test</title> </head> <body> <p>{{ stripHTML "<<>img src=x onerror=alert('XSS')>" }}</p> </body> </html>

The payload exploits the false start branch to smuggle a literal < back into the output, then uses the following > to terminate the parser’s tag state, leaving a valid <img ...> tag behind.

Tested in v2.11.3

Impact

Malformed HTML can bypass stripHTML, potentially allowing arbitrary HTML or JavaScript to be rendered if the output is used unsafely, leading to client-side XSS.

AI Disclosure

AI assisted in writing the report description; however, the discovery of the issue has been done manually.

Пакеты

Наименование

github.com/caddyserver/caddy/v2

go
Затронутые версииВерсия исправления

<= 2.11.3

2.11.4

Наименование

github.com/caddyserver/caddy

go
Затронутые версииВерсия исправления

<= 1.0.5

Отсутствует

EPSS

Процентиль: 5%
0.00153
Низкий

4.2 Medium

CVSS3

Дефекты

CWE-116

Связанные уязвимости

CVSS3: 4.2
ubuntu
около 1 месяца назад

Caddy is an extensible server platform that uses TLS by default. Prior to 2.11.4, Caddy’s stripHTML template function cannot reliably remove all HTML tags from input strings. Certain malformed HTML, such as <<>img src=x onerror=alert()>, can bypass the tag-stripping logic, potentially leaving dangerous content in the output if it is later rendered as HTML. This may allow client-side XSS in cases where untrusted strings are rendered unsafely. This vulnerability is fixed in 2.11.4.

CVSS3: 4.2
nvd
около 1 месяца назад

Caddy is an extensible server platform that uses TLS by default. Prior to 2.11.4, Caddy’s stripHTML template function cannot reliably remove all HTML tags from input strings. Certain malformed HTML, such as <<>img src=x onerror=alert()>, can bypass the tag-stripping logic, potentially leaving dangerous content in the output if it is later rendered as HTML. This may allow client-side XSS in cases where untrusted strings are rendered unsafely. This vulnerability is fixed in 2.11.4.

CVSS3: 4.2
debian
около 1 месяца назад

Caddy is an extensible server platform that uses TLS by default. Prior ...

EPSS

Процентиль: 5%
0.00153
Низкий

4.2 Medium

CVSS3

Дефекты

CWE-116