jQueryÔ­ÐÍ´«È¾·ì϶°²È«¹«¸æ

°ä²¼¹¦·ò 2019-04-24

·ì϶±àºÅºÍ¼¶±ð


CVE±àºÅ£ºCVE-2019-11358£¬Î£ÏÕ¼¶±ð£ºÖÐΣ£¬CVSS·ÖÖµ£º6.1


Ó°Ïì°æ±¾

jQuery version 1.x, 2.x,3.x


·ì϶¸ÅÊö


jQueryÊÇÒ»¸ö¼±¾ç¡¢Ó×ÇÉ¡¢Ö°ÄÜ·á˶µÄJavaScript¿â¡£Ëüͨ¹ýÒ×ÓÚʹÓõÄAPIÔÚ´óÁ¿ä¯ÀÀÆ÷ÖÐÔËÐУ¬Ê¹µÃHTMLÎĵµ±éÀúºÍ²Ù×÷¡¢ÊÂÎñ´¦Öᢶ¯»­ºÍAjax±äµÃÔ½·¢µ¥Ò»¡£Í¨¹ý¶àÖ°ÄÜÐԺͿÉÀ©´óÐԵĽáºÏ£¬jQueryŤתÁËÊý°ÙÍòÈ˱àдJavaScriptµÄ·½Ê½£¬ËüÀûÓÃÓÚ70%µÄ»¥ÁªÍøÕ¾µãÖС£


jQuery¿â½¨¸´º±¼ûµÄÔ­ÐÍ´«È¾·ì϶¡£Ô­ÐÍ´«È¾·ì϶ָµÄÊǹ¥»÷ÕßÅú¸Ä JavaScript¶ÔÏóÔ­Ð͵ÄÄÜÁ¦¡£JavaScript¶ÔÏó¾ÍÏñ±äÁ¿Ò»Ñù£¬µ«´æ´¢µÄ²¢·ÇÒ»¸öÖµ (var car = ¡°Fiat¡±)£¬¶øÊÇ¿ÉÄÜÔ̺¬»ùÓÚÔ¤Éè½á¹¹µÄ¶à¸öÖµ£¨var car ={type:"Fiat", model:"500", color:"white"}£©¡£


Ô­Ðͽç˵ÁËJavaScript ¶ÔÏóµÄĬÈϽṹºÍĬÈÏÖµ£¬Òò¶øµ±Î´ÉèÖÃֵʱ£¬ÀûÓ÷¨Ê½²»»á±ÀÀ£¡£Ô­ÐÍ´«È¾¹¥»÷¿Éµ¼Ö¹¥»÷Õ߸²Ð´ JavaScript ÀûÓ÷¨Ê½¶ÔÏóÔ­ÐÍ¡£Óɹ¥»÷Õß½ÚÔìµÄÊôÐԿɱ»×¢Èë¶ÔÏó£¬Ö®ºó»ò¾­ÓÉ´¥·¢JavaScriptÒì³£Òý·¢»Ø¾ø·þÎñ£¬»ò´Û¸Ä¸ÃÀûÓ÷¨Ê½Ô´´úÂë´Ó¶øÇ¿ÔìÖ´Ðй¥»÷Õß×¢ÈëµÄ´úÂëõè¾¶¡£


Ô­ÐÍ´«È¾·ì϶²¢Î´¿É´ó¹æÄ£±»ÀûÓõķì϶£¬ÓÉÓÚ·ì϶ҪÀûÓóɹ¦£¬±ØÒª¹¥»÷Õß¼«¶ÈÏàʶ¾ßÌå´úÂëµÄ½á¹¹£¬±ØÒª¹¥»÷ÕßÉî¿ÌÏàʼû¿¸öÍøÕ¾ºÍ¶ÔÏóÔ­Ð͵ÄÔË×÷·½Ê½ÒÔ¼°ÕâЩԭÐÍÈôºÎÔÚÖØ´óµÄͼʽÖнøÐзֻ¯£¬¶øºó»ú¹ØÏàÒ˵ÄÀûÓò½ÖèÄÜÁ¦³É¹¦¡£Í¨³£¹ØÔ´µÄÍøÕ¾ÏµÍ³£¬¹¥»÷ÕߺÜÄÑÉî¿ÌÏàʶ´Ó¶ø»ú¹ØÀûÓôúÂ룬ËùÒÔÏÕЩ²»ÊÜ´Ë·ì϶¹¥»÷¡£


·ì϶ÑéÖ¤


·ì϶POC£ºhttps://github.com/jquery/jquery/pull/4333¡£


·ì϶·ÖÎöÈçÏ£º
./src/core.js µÚ155ÐУº
if ((options = arguments[ i ]) != null) {
options È¡´«ÈëµÄ²ÎÊý arguments[i]£¬¶øºóµÚ158 ¡¢159 ÐУº
for (name in options) {                      
                           copy= options [name];
name¡¢copyÖµ½ø¶øÄܹ»ÊÜÊäÈë½ÚÔì¡£
×îºó£¬ÔÚµÚ183ÐУº
target[name] = jQuery.extend (deep,clone,copy);
ÔÚµÚ187ÐУº
target[name] = copy;
ÈôÊÇname¿ÉÒÔΪ__proto__£¬Ôò»áÏòÉÏÓ°ÏìtargetµÄÔ­ÐÍ£¬½ø¶ø¸²¸ÇÔì³ÉÔ­ÐÍ´«È¾¡£
target ÔÚµÚ127ÐУº

target = arguments[ 0 ] || {}


½¨¸´½¨Òé


£¨1£©jQuery version 3.x ½¨¸´¹æ»®
Éý¼¶µ½×îеÄ3.4.0°æ±¾£ºhttps://blog.jquery.com/2019/04/10/jquery-3-4-0-released/¡£
£¨2£©jQuery version 2.xºÍ1.x ½¨¸´¹æ»®

²¹¶¡Á´½Ó£ºhttps://github.com/DanielRuf/snyk-js-jquery-174006?files=1¡£


²Î¿¼Á´½Ó


https://www.zdnet.com/article/popular-jquery-javascript-library-impacted-by-prototype-pollution-flaw/ 
https://snyk.io/blog/after-three-years-of-silence-a-new-jquery-prototype-pollution-vulnerability-emerges-once-again/