This release includes 1 security fix for security teams reviewing exposed deployments.
Topics
+11 more
Affected surfaces
Summary
AI summaryisValidJobUrl now rejects paired template-placeholder syntaxes to align validation with error messages, fixing a security mismatch.
Full changelog
[1.58.7] — 2026-05-20
fix(security): NEW-2 — isValidJobUrl now rejects paired template-placeholder syntaxes (${…}, {{…}}) to match the error message. The route-level 400 returned by POST /api/pipeline advertises "contain no script or template characters", but the v1.58.3 MASTER regression confirmed only ASP/EJS-style <%…%> was actually blocked (free side effect of the [<>"'\\s] bracket-char gate). JS template literals (${TEST}) and Mustache/Handlebars ({{TEST}}) both passed validation — a regex↔message semantic gap. Option A from the fix-prompt (tighten regex to match message; slight hardening against URL-templating injection): a new TEMPLATE_PATTERNS array in [server/lib/security.mjs](server/lib/security.mjs) (/${[^}]}/, /{{[^}]}}/) is consulted via hasTemplatePlaceholder(url)beforenew URL(…). Only **paired** placeholders are rejected — a bare {normal} ATS-style path token survives (https://boards.greenhouse.io/anthropic/jobs/4567andhttps://example.com/job/{normal} both still accepted). 901 → **903** unit (tests/url-validation.test.mjsextended with 2 NEW-2 tests covering both rejected forms and the no-false-positive ATS case). The<%…%>` regression-lock is also explicit now. (NEW-2)
Security Fixes
- NEW-2 — `isValidJobUrl` rejects `${…}` and `{{…}}` template placeholders, closing a regex↔message semantic gap that allowed injection via URL templating.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About Career Ops UI
All releases →Related context
Related tools
Beta — feedback welcome: [email protected]