Hidden XSS? No User Interaction!

input-hidden + oncontentvisibilityautostatechange = XSS

@kinugawamasato가 정말 멋진 페이로드를 가지고 왔습니다. 최근 글 XSS Bypass: alert_?_(45)에서 이야기 드렸듯이 요즘 XSS 벡터에 대한 리서치가 활발해지고 있는데요, 드디어 Hidden XSS에서 사용자 인터렉션을 유도할 필요가 없어졌습니다.

https://x.com/kinugawamasato/status/1816234368714871185

oncontentvisibilityautostatechange 이벤트 핸들러는 MDN 문서에 나와있는 것과 같이 content-visibility: auto가 시작될 때 발생하는 이벤트 핸들러로 hidden element content에도 영향을 주는 핸들러입니다. hidden에서도 자동으로 동작할 수 있기 때문에 기존에 accesskey를 통한 XSS와 다르게 사용자 인터렉션을 필요로 하지 않습니다.

<input type="hidden" oncontentvisibilityautostatechange="alert(/ChromeCanary/)" style="content-visibility:auto">

실제로 테스트해보면 Chrome으로 https://pocs.hahwul.com/x/hiddenxxss.html 접근 시 의도한 스크립트가 hidden input 내부에서 바로 실행됩니다.