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 ] || {}
½¨¸´½¨Òé
Éý¼¶µ½×îеÄ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://snyk.io/blog/after-three-years-of-silence-a-new-jquery-prototype-pollution-vulnerability-emerges-once-again/


¾©¹«Íø°²±¸11010802024551ºÅ