StartedApr 13, 2026, 8:22 PM
EndedApr 13, 2026, 8:23 PM
Casecase_2db7f1c9331a45f29cb2976cc30f2bc9
Modelgpt-5.4
Context
Blind label
—
Advisory
GHSA-cjmm-f4jc-qw8r • DOMPurify ADD_ATTR predicate skips URI validation
Judge score
n/a
Prompt1,391 chars
Blind label: blind_884c65d5b794
Answer key:
{
"advisoryGhsaId": "GHSA-cjmm-f4jc-qw8r",
"repoFullName": "cure53/DOMPurify",
"checkoutRef": "3.3.2",
"checkoutRefKind": "tag",
"vulnerabilityClasses": [
"dom-based xss",
"uri validation bypass"
],
"expectedComponents": [
"_isValidAttribute attribute validation logic",
"EXTRA_ELEMENT_HANDLING.attributeCheck / ADD_ATTR predicate handling"
],
"sinkPaths": [
"src/purify.ts"
],
"requiredEvidence": [
"`_isValidAttribute` has a predicate-based allow/accept path tied to `EXTRA_ELEMENT_HANDLING.attributeCheck` or `ADD_ATTR`",
"that allow path returns or short-circuits before the normal URI/protocol safety validation for attributes such as `href` runs",
"because of the short-circuit, an accepted `href` on an anchor can retain a `javascript:` URL through sanitization"
],
"disallowedClaims": [
"remote code execution",
"sql injection",
"server-side request forgery"
],
"notes": [
"Use the advisory text as ground truth: the issue is specifically that predicate-based attribute acceptance skips later URI validation.",
"The benchmark checkout was supplied as tag `3.3.2` even though the advisory metadata states `<= 3.3.1` is vulnerable and `3.3.2` is first patched; judge findings against the described sink behavior, not against speculative version claims."
]
}OutputJSON
{
"overallScore": 94,
"verdict": "excellent",
"normalizedFindingCount": 1,
"dimensionScores": [
{
"key": "target-alignment",
"score": 29,
"rationale": "Correctly identifies the vulnerable subsystem and file (`src/purify.ts`), names `_isValidAttribute`, and ties the flaw to predicate-based acceptance via `EXTRA_ELEMENT_HANDLING.attributeCheck` / function-based `ADD_ATTR`, which matches the advisory."
},
{
"key": "source-to-sink-reasoning",
"score": 29,
"rationale": "Provides a clear control-flow explanation: attacker-controlled `href` reaches `_isValidAttribute`, a predicate returns `true`, the function short-circuits, and normal URI validation (`URI_SAFE_ATTRIBUTES` / `IS_ALLOWED_URI`) is skipped, allowing `javascript:` to survive sanitization. This is the key required reasoning."
},
{
"key": "impact-and-exploitability",
"score": 18,
"rationale": "Impact is technically credible and proportional for DOM-based XSS: sanitized output retains a dangerous `javascript:` URL and code executes when the rendered link is activated. The report is strongest on anchor `href`; references to broader attributes such as `src` and `xlink:href` are plausible but less directly grounded in the provided key."
},
{
"key": "evidence-quality",
"score": 9,
"rationale": "Cites concrete functions, configuration flow, file path, approximate line ranges, and a realistic reproduction payload. Evidence is specific and code-oriented rather than generic, though some line references are approximate."
},
{
"key": "overclaim-control",
"score": 9,
"rationale": "Avoids disallowed claims such as RCE/SQLi/SSRF and keeps the bug class aligned with DOM-based XSS / URI validation bypass. Minor overbreadth appears in extending the claim to additional URI-bearing attributes without equally specific support."
}
],
"strengths": [
"Precisely matches the advisory's core bug: predicate-based attribute acceptance bypasses later URI validation.",
"Correctly anchors the issue in `_isValidAttribute` within `src/purify.ts`.",
"Explains the relevant configuration path from function-based `ADD_ATTR` to `EXTRA_ELEMENT_HANDLING.attributeCheck`.",
"Includes a concrete exploit example using `<a href=\"javascript:...\">`, which is the central security consequence described by the key."
],
"misses": [
"Broadens the issue to additional attributes (`src`, `xlink:href`) beyond the answer key's specifically required anchor `href` evidence."
],
"redFlags": [],
"summary": "This is a high-quality, well-aligned finding. It identifies the correct code path and explains the essential short-circuit: predicate-based attribute acceptance returns before normal URI/protocol checks run, permitting `javascript:` in `href` to survive sanitization and cause DOM-based XSS. The only meaningful deduction is slight overbreadth in extending the claim beyond the mosTool calls
(0)No bash calls recorded.