IPAããæ å ±ã»ãã¥ãªãã£æè¡åå調æ»ï¼2011 å¹´ä¸æï¼ ã®ã²ã¨ã¤ã¨ãã¦ãAjaxãã©ã¦ã¶ã»ãã¥ãªã㣠- 主æ¦å ´ãDOMã«ç§»ããXSSãã¨ããå ±åãå ¬éããã¦ãã¾ãã®ã§ãã¡ãã£ã¨èªãã§ã¿ãææ³ãªã©ãâ¦ã
ã¾ãã¯äºæ«ãªããã³ãããã
XMLHttpRequest ã¨ãã¦æåã«å®è£ ãããIEã®ããã¯ãActiveX Object ã§ãããçµã¿è¾¼ã¿ãªãã¸ã§ã¯ããã§ã¯ããã¾ããã
(5.2. Ajaxã®ç»å ´ã¨é²å)
JavaScriptã®ä¸ããã®Webãµã¼ãã¨ã®éã®éåæã®éä¿¡ãå¯è½ã«ããAPIã¯ãXMLHttpRequestã¨ããçµã¿è¾¼ã¿ãªãã¸ã§ã¯ãã§ãã
ãåä¸æºæ³ããªãã¦ããç¬èªç¨èªä½¿ããã«ã"Same Origin Policy" ãã®ã¾ã¾ãããããã¯ãåä¸çæå ããªã·ã¼ãã¨æ¸ãã°ããã®ã«ã
(5.5. ãåä¸æºæ³ãã®å¶ç´)
ãåä¸æºæ³ãã®å¶ç´
æ¸ããã¦ããæå³ããããã«ããã§ããXMLHttpRequestãçºè¡ãããã¡ã¤ã³ã¨ Access-Control-Allow-Origin: ã§è¿ããããã¡ã¤ã³ãä¸è´ããã°ãXMLHttpRequest ãå©ç¨ãã¦ããJavaScriptãã responseText çãå©ç¨ãã¦ã¯ãã¹ãã¡ã¤ã³ãªã³ã³ãã³ããå©ç¨å¯è½ãã¨ããã®ãç¾å®ã§ã注æããªããã°ãªããªãã®ã¯ XHR level 2ãå®è£ ãããã©ã¦ã¶ã§ã¯ããµã¼ãå´ã® Access-Control-Allow-Origin: ã®æç¡ã¨ã¯é¢ä¿ãªãHTTPã®ãªã¯ã¨ã¹ãã¯çºè¡ã§ãããã¨ããç¹ã§ãããAccess-Control-Allow-Origin ã«ãã許å¯ãããå ´åã®ã¿JavaScriptå ãããã®ã³ã³ãã³ãã«ã¢ã¯ã»ã¹ãããã¨ãã§ãããã¨ãããã¨ã§ãã
(5.9. XHRã¬ãã«2)
ä¾ãã°ã次ã®ãããªã¬ã¹ãã³ã¹ããããWebãµã¼ããè¿ãã¦ããå ´åã
Access-Control-Allow-Origin: å¼ã³åºãå´ãã¡ã¤ã³
ããã«ç¤ºããããå¼ã³åºãå´ãã¡ã¤ã³ã«è©²å½ãããåºèº«å°ãã®ã³ã³ãã³ãããã¯å½è©²ãµã¼ãã¸ã¯ãã¹ãã¡ã¤ã³å¼ã³åºãã許ãããä»ã¯è¨±ãããªãã
ã¾ã£ããæå³ããããã¾ããããããã¯ãæ£è¦ã®ãµã¤ã(ä¿¡é ¼ããã«å¤ãããµã¤ã)ãä½ããã®å¹²æ¸ãåããæªæãããµã¤ãã«XHR level 2 ã使ã£ã¦ã¢ã¯ã»ã¹ããå¯è½æ§ãããããç¾ç¶ã®XHR level 2 ã«ã¯ãããé²ãä»çµã¿ã¯ãªããã¨è¨ããããã§ããããããä½ããã®å¹²æ¸ãåããããã£ã±ããããã¾ããããããã£ã¦å¤åã¯ãã¹ãµã¤ãã¹ã¯ãªããã£ã³ã°ãã®ãã®ã ã£ããããã®ã§ãXHR level 2ã®ä»çµã¿ã¨ãã¦é²ããããªãã®ã§ããªãã¨æãã¾ãããããããããããæèã§åãä¸ãã¦ããæå³ããã£ã±ããããããã¾ããã
(5.9. XHRã¬ãã«2)
ãæ°ã¥ãã®ã¨ããããããã®ã¬ã¹ãã³ã¹ãããã¯Web APIå´ããå¼ã³åºãå ãã«å¯¾ãã¦å¶ç´ãããããã®ã§ãããå¼ã³åºãå´ããå¼ã³åºããå ãã®ç¯å²ãå¶ç´ãããããªä»çµã¿ã¯ãã¾ã®ã¨ããç¨æããã¦ããªããå¼ã³åºãå´ãä½ããã®å¹²æ¸ãåããæªæã®Web APIã誤ã£ã¦å¼ã³åºãããä»åããããå ´åã«ã¯ã被害ãçããããããããã
ãã½ã¼ã¹ããã·ã³ã¯ãã¨ããç¨èªã¯ãXSSã§æ»æããç«å ´ã¨ãã¦ã¯ä¾¿å©ã§ããããã®æç« ã§ãã®ç¨èªãåºãã¦ããã®ã¯ãããããã«è©±ãè¤éã«ãã¦ããã ãã«æãã¾ãã
(5.10. æ°ããã¿ã¤ãã®ã¹ã¯ãªããæ³¨å ¥ï¼XSSï¼æ»æ)
DOMä¸ã®å±éºãªå ¥åå°ç¹ï¼ã½ã¼ã¹ï¼ããå¾ããã¼ã¿ã«å«ã¾ããæ»æãã¿ã¼ã³ããã®ã¾ã¾ã«ãã¦å±éºãªåºåå°ç¹ï¼ã·ã³ã¯ï¼ã¸éãåºããã¨ã§ãWebãã¼ã¸å ã«æªæã®ã¹ã¯ãªãããä¾µå ¥ãã
ãµãã¿ã¤ãºè³çãªããªã¤ãããã¯ãã¨ãªãâ¦ã
(5.11. å¾æ¥åã®ã¹ã¯ãªããæ³¨å ¥ï¼XSSï¼æ»æ)
ãµã¼ãå´ããã°ã©ã ã®ãã½ã¼ã¹ãããå ¥ã£ã¦ããæ»æãã¿ã¼ã³ãè¦éããã¦ãã·ã³ã¯ãã¸ãã®ã¾ã¾åºåãããã¨ã§æ»æãæç«ããããããã£ã¦å¯¾çã¯ããã·ã³ã¯ãã«å±éºãªå 容ãåºåãããªãããããµã¼ãå´ããã°ã©ã ã®ä¸ã§ç¹æ®è¨å·ãç¡å®³åããçãæ¯è¼çåç´ãªãã®ã§æ¸ãã§ããã
ãHTMLãçæããæç¹ã§ã¨ã¹ã±ã¼ãããã¨ããååãå®ããã¨ããããã«æ¸ãã°ãå ã«ãæ¸ããã¨ãããã½ã¼ã¹ããã·ã³ã¯ãã®ãããªXSSå¨ç¨èªã使ããªãã¦ãæ¸ãã®ã«ã
ããããDOMãèå°ã¨ããã¹ã¯ãªããæ³¨å ¥ãã¿ãããªç¬èªç¨èªã§ã¯ãªãã"DOM based XSS" ãããã¯ãDOMãã¼ã¹ã®XSSããªã©ã§ååã ã¨æãã¾ãã
(5.12. DOMãèå°ã¨ããã¹ã¯ãªããæ³¨å ¥ï¼XSSï¼æ»æ)
DOMãèå°ã¨ããã¹ã¯ãªããæ³¨å ¥ï¼XSSï¼æ»æ
â¦ãããããæ¬é¡ã®DOM based XSS対çãªè©±ã ãã©ãããã¾ã§æ¸ãã¦åå°½ããã®ã§ãç¶ãã¯ã¾ããã®ãã¡æ°ãåãããã
ããããã ãæ¸ãã¦ããã
DOM based XSSã¨ãã£ã¦ãæ°ããç¹ã¯ãããªã«ãªããååã¨ãã¦ã¯ãHTMLãçæããæç¹ã§ã¨ã¹ã±ã¼ãããªã®ã§ãJavaScriptå
ã§HTML(DOM)ãçæããæç¹ã§æå³ããªãDOMæ§é ã«ãªããªããããã¡ãã¨ã¨ã¹ã±ã¼ããã(ãããã¯createTextNodeã®ãããªæ¹æ³ã使ã)ã¨ãã£ãç¹ã«æ°ãã¤ããã®ã¨ã<a href> ã location ã¸ã®ä»£å
¥ã§ javascript: ã¹ãã¼ã ã data: ã¹ãã¼ã ãå
¥ããªãããã«ããã¨ãã£ããé常ãµã¼ããµã¤ãã§è¡ã£ã¦ããXSS対çã¨å¤ãããªããã¨ãJavaScriptä¸ã§ããã ãã§ãã