GHSA-7q9x-8g6p-3x75 @grackle-ai/server: Unescaped Error String in renderPairingPage() HTML Template
Unescaped error string in HTML template creates potential XSS risk if dynamic content is passed, though currently unexploitable with hardcoded inputs.
- Exploited in the wild
- Not known
- Login needed
- Not needed
- Attackable
- Over the internet
- Victim action needed
- A user has to click or open something
- Fix
- Available
What is GHSA-7q9x-8g6p-3x75?
GHSA-7q9x-8g6p-3x75 is a cross-site scripting vulnerability in @grackle-ai/server, published on 25 Mar 2026. An attacker can exploit it over the internet without logging in, and only if a user opens a file or follows a link.
Official description
Impact
The renderPairingPage() function embeds the error parameter directly into HTML without escaping:
const errorHtml = error ? `<p style="color:#e74c3c">${error}</p>` : "";
All current call sites pass hardcoded strings, so this is not exploitable today. However, the function is architecturally fragile — if a future code change passes user-controlled or dynamic content into the error parameter, it would create an XSS vulnerability.
The renderAuthorizePage() function in the same file correctly uses escapeHtml() for dynamic content, making this an inconsistency.
Affected code:
packages/server/src/index.ts:64-89—renderPairingPage()with unescaped error interpolation- Compare:
packages/server/src/index.ts:130—renderAuthorizePage()correctly usesescapeHtml()
Patches
v0.70.1
Fix: Apply escapeHtml() to the error parameter:
const errorHtml = error ? `<p style="color:#e74c3c">${escapeHtml(error)}</p>` : "";
Workarounds
No workaround needed — all current callers pass hardcoded strings.
Resources
- CWE-79: Improper Neutralization of Input During Web Page Generation
- File:
packages/server/src/index.ts
Which versions are affected by GHSA-7q9x-8g6p-3x75?
2 open source packages ship an affected version, including @grackle-ai/server.
| Package | Affected | Fixed in |
|---|---|---|
@grackle-ai/server npm | All versions | 0.70.1 |
@grackle-ai/server npm | All versions | 0.70.1 |
How do I fix GHSA-7q9x-8g6p-3x75?
Upgrade @grackle-ai/server to 0.70.1 or later.
Escape output for the context it lands in and set a strict Content Security Policy. Upgrading the affected component is the real fix. More about Cross-site scripting.
Is GHSA-7q9x-8g6p-3x75 being exploited?
There is no known exploitation of GHSA-7q9x-8g6p-3x75 in the wild and no public exploit code.