Skip to content

[RETIRED via #1314] DOM scalar and identifier hardening - #1396

Closed
seonghobae wants to merge 2 commits into
developfrom
fix-dom-xss-console-7906179018824187451
Closed

seonghobae wants to merge 2 commits into
developfrom
fix-dom-xss-console-7906179018824187451

Conversation

@seonghobae

@seonghobae seonghobae commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

상태: RETIRED — #1314로 검증된 완전 승계

이 PR은 단순 폐기가 아니라 유효 요구사항을 successor로 완전히 승계한 뒤 source-neutral 커밋으로 퇴역했습니다.

승계 범위

#1314는 safeCount로 음수·소수·Infinity·NaN·비숫자 입력을 fail-closed 처리하고, data-id를 이스케이프하며, 실제 Node 렌더링 회귀 테스트를 제공합니다. #1260은 inherited severity map-key 우회를 제거합니다. 통합 트리 전체 테스트는 1095 passed입니다.

따라서 review가 지적한 “회귀 테스트 부재”와 “상속된 severity key 우회”를 포함해 이 PR의 유효 보안 delta는 successor에 완전하게 보존됐습니다. 원래 head는 퇴역 커밋의 첫 부모로 보존되어 감사 가능합니다.

@google-labs-jules

Copy link
Copy Markdown

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

@coderabbitai

coderabbitai Bot commented Oct 5, 2026 •

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 2 potential issues.

Devin Review

Comment thread scanner/dashboard/console.html Outdated
Comment on lines +124 to +126
["Latest deploy-blocking",Number(latest.deploy_blocking||0)],
["New since last scan",Number(latest.new_blocking||0)],
["Critical",Number(c.CRITICAL||0)],

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔍 Changed rendering paths lack regression coverage

The existing console security test checks only trend-label escaping. It does not exercise the changed count, ID, or badge rendering with unexpected API values.

Devin Review


Was this helpful? React with 👍 or 👎 to provide feedback.

Comment thread scanner/dashboard/console.html Outdated
const s=await api("/api/v1/scans/"+id);
if(requestId!==currentDetailRequest)return;
const rows=(s.findings||[]).map(f=>`<tr><td><span class="pill" style="background:${SEV[f.severity]||'var(--info)'}">${esc(f.severity)}</span></td>
const rows=(s.findings||[]).map(f=>`<tr><td><span class="pill" style="background:${SEV[String(f.severity||'INFO').toUpperCase()]||'var(--info)'}">${esc(f.severity)}</span></td>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟨 Inherited severity keys bypass badge color fallback

When severity becomes an inherited key such as __proto__, SEV returns an object instead of the fallback color. The badge receives an unintended style value from untrusted findings.

Devin Review


Was this helpful? React with 👍 or 👎 to provide feedback.

Copy link
Copy Markdown
Contributor Author

퇴역 근거(보호 브랜치와 동일한 0-diff로 검증 예정):

  • 정식 successor는 fix(console): bound scalar rendering and scan identifiers #1314 exact head a7c934a3f9ca5896b73ad408385e061b4d4e1a5f입니다.
  • 해당 head는 safeCount로 음수·소수·Infinity·NaN·비숫자 값을 거부하고, data-id를 이스케이프하며, 실제 Node 렌더링 회귀 테스트를 포함합니다. 단순 Number() 변환보다 엄격합니다.
  • fix(dashboard): reject inherited map properties #1260 exact head 146cc63da545ee9e8b410edc91a9958205760e13도 같은 트리에 병합되어 상속된 severity map-key 우회 문제를 제거합니다.
  • 로컬 통합 트리에서 전체 1095 passed를 확인했습니다.
  • 이 PR의 유효 요구사항(숫자 스칼라 경계, identifier 이스케이프, severity key 방어, 회귀 검증)은 successor에 완전하게 포함됩니다. .jules/sentinel.md의 “Number 또는 esc” 일반 문구는 Number() 자체의 음수/소수/Infinity 허용을 정당화하므로 별도의 유효 제품 delta로 보존하지 않습니다.

이제 원래 head를 첫 부모로, 보호 브랜치 develop@2949d30718752ea5915c7713ba227e8c19d9e5bf를 둘째 부모로 하는 source-neutral 퇴역 커밋을 만들고, 보호 브랜치 대비 변경 파일 0개를 확인한 뒤에만 닫습니다.

@seonghobae
seonghobae marked this pull request as draft October 7, 2026 05:00
@seonghobae seonghobae changed the title 🛡️ Sentinel: [HIGH] Fix DOM XSS via unescaped numeric properties in console [RETIRED via #1314] DOM scalar and identifier hardening Oct 7, 2026
@seonghobae seonghobae closed this Oct 7, 2026
@google-labs-jules

Copy link
Copy Markdown

퇴역 근거(보호 브랜치와 동일한 0-diff로 검증 예정):

  • 정식 successor는 fix(console): bound scalar rendering and scan identifiers #1314 exact head a7c934a3f9ca5896b73ad408385e061b4d4e1a5f입니다.
  • 해당 head는 safeCount로 음수·소수·Infinity·NaN·비숫자 값을 거부하고, data-id를 이스케이프하며, 실제 Node 렌더링 회귀 테스트를 포함합니다. 단순 Number() 변환보다 엄격합니다.
  • fix(dashboard): reject inherited map properties #1260 exact head 146cc63da545ee9e8b410edc91a9958205760e13도 같은 트리에 병합되어 상속된 severity map-key 우회 문제를 제거합니다.
  • 로컬 통합 트리에서 전체 1095 passed를 확인했습니다.
  • 이 PR의 유효 요구사항(숫자 스칼라 경계, identifier 이스케이프, severity key 방어, 회귀 검증)은 successor에 완전하게 포함됩니다. .jules/sentinel.md의 “Number 또는 esc” 일반 문구는 Number() 자체의 음수/소수/Infinity 허용을 정당화하므로 별도의 유효 제품 delta로 보존하지 않습니다.

이제 원래 head를 첫 부모로, 보호 브랜치 develop@2949d30718752ea5915c7713ba227e8c19d9e5bf를 둘째 부모로 하는 source-neutral 퇴역 커밋을 만들고, 보호 브랜치 대비 변경 파일 0개를 확인한 뒤에만 닫습니다.

Understood. Acknowledging that this work is now obsolete as the canonical successor (#1314) provides a stricter and better-tested fix. I have reverted all changes to match the base branch to create a 0-diff commit for safe closure.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant