Home > Àüü±â»ç

ÇÁ·ÎÅäŸÀÔ ¿À¿° °ø°Ý Ãë¾àÁ¡, ÀÚ¹Ù½ºÅ©¸³Æ® ¾Û º¹À⼺ Áõ°¡·Î À§Çù °Å¼¼Á®

ÀÔ·Â : 2024-05-13 18:14
ÆäÀ̽ººÏ º¸³»±â Æ®À§ÅÍ º¸³»±â ³×À̹ö ¹êµå º¸³»±â Ä«Ä«¿À ½ºÅ丮 º¸³»±â ³×À̹ö ºí·Î±× º¸³»±â
À̱۷çÄÚÆÛ·¹À̼Ç, Prototype-Pollution Ãë¾àÁ¡ ÀÌ¿ë °ø°Ý»ç·Ê ºÐ¼® ¹ßÇ¥
Ãë¾àÁ¡ ´ëÀÀ¹æ¾È...»ç¿ëÀÚ ÀÔ·Â °ª °ËÁõ µî ¾ÛÀÇ Àü¹ÝÀûÀÎ º¸¾È »óÅ °­È­°¡ Áß¿ä


[º¸¾È´º½º ±è¿µ¸í ±âÀÚ] Prototype-Pollution(ÇÁ·ÎÅäŸÀÔ ¿À¿° °ø°Ý)Àº ÀÚ¹Ù½ºÅ©¸³Æ®ÀÇ ÇÁ·ÎÅäŸÀÔ ±â¹Ý »ó¼Ó ¸ðµ¨¿¡ ÀÇÇØ ¹ß»ýÇϸç, °ø°ÝÀÚ°¡ Àü¿ª °´Ã¼ ÇÁ·ÎÅäŸÀÔ¿¡ ÀÓÀÇÀÇ ¼Ó¼º°ú ¸Þ¼­µå¸¦ µµÀÔÇϰųª ¼öÁ¤ÇÒ ¼ö ÀÖ´Â Ãë¾àÁ¡ÀÌ´Ù. µû¶ó¼­ Prototype-PollutionÀÇ °³³ä ÀÌÇØ´Â ÀÚ¹Ù½ºÅ©¸³Æ® ¾Û º¸¾ÈÀÇ ±âº»À» ÀÌÇØÇÏ´Â °ÍÀ¸·Î º¼ ¼ö ÀÖ´Ù.

¡ãPrototype-Pollution °ø°Ý È帧µµ[Ãâó=portswigger]


À̱۷çÄÚÆÛ·¹À̼ÇÀº ÃÖ±Ù Prototype-Pollution Ãë¾àÁ¡À» ÀÌ¿ëÇÑ °ø°Ý»ç·Ê ºÐ¼® ¹× ´ëÀÀ¹æ¾ÈÀ» ¹ßÇ¥Çß´Ù. Prototype-PollutionÀº µ¶¸³Çü Ãë¾àÁ¡À¸·Î ¾Ç¿ëµÈ »ç·Ê´Â ÀûÁö¸¸ À̸¦ ÅëÇØ °ø°ÝÀÚ°¡ Á¢±ÙºÒ°¡´ÉÇÑ °³Ã¼ÀÇ ¼Ó¼ºÀ» Á¦¾îÇÒ ¼ö ÀÖ´Ù. ¾ÖÇø®ÄÉÀ̼ÇÀÌ °ø°ÝÀÚ°¡ Á¦¾îÇÏ´Â ​​¼Ó¼ºÀ» ¾ÈÀüÇÏÁö ¾Ê°Ô ó¸®ÇÏ´Â °æ¿ì ´Ù¸¥ Ãë¾àÁ¡°ú ¿¬°áµÉ °¡´É¼ºÀÌ ÀÖ´Ù. Ŭ¶óÀ̾ðÆ® Ãø¿¡¼­´Â ÁÖ·Î DOM XSS·Î ¹ßÇöµÇ¸ç, ¼­¹ö Ãø¿¡¼­´Â ¿ø°ÝÄÚµå ½ÇÇà(RCE)À¸·Î À̾îÁú ¼öµµ ÀÖ´Ù.

ÀÚ¹Ù½ºÅ©¸³Æ® ¾ÖÇø®ÄÉÀ̼ÇÀÌ °è¼Ó º¹ÀâÇØÁö¸é¼­ Prototype-PollutionÀÇ °¡´É¼ºÀº ¿©ÀüÈ÷ ​​Áß¿äÇÑ ¿ì·Á»çÇ×ÀÌ µÇ°í ÀÖ´Ù. ÀÚ¹Ù½ºÅ©¸³Æ®´Â °´Ã¼ ÁöÇâ ¾ð¾î·Î »ó¼Ó ±â´ÉÀÌ Á¸ÀçÇÑ´Ù. ¡®class¡¯ÀÇ °³³äÀ¸·Î »ó¼ÓÀ» ±¸ÇöÇϴ Ÿ ¾ð¾î¿Í´Â ´Ù¸£°Ô ¡®class¡¯ÀÇ °³³äÀÌ Á¸ÀçÇÏÁö ¾Ê´Â ÀÚ¹Ù½ºÅ©¸³Æ®´Â »ó¼ÓÀÇ °³³äÀ» ÇÁ·ÎÅäŸÀÔÀ» ÀÌ¿ëÇØ ±¸ÇöÇÑ´Ù.

ÀÚ¹Ù½ºÅ©¸³Æ®¿¡¼­´Â °´Ã¼ÀÇ ¿øÇüÀÎ ÇÁ·ÎÅäŸÀÔÀ» ÀÌ¿ëÇØ »õ·Î¿î °´Ã¼¸¦ ¸¸µé°Ô µÇ´Âµ¥ »õ·Ó°Ô »ý¼ºµÈ °´Ã¼µµ ¶Ç ´Ù¸¥ °´Ã¼ÀÇ ¿øÇüÀÌ µÉ ¼ö ÀÖ´Ù. À̸¦ ÇÁ·ÎÅäŸÀÔ Ã¼ÀÎ(prototype chain)À̶ó ºÎ¸£¸ç ÇÁ·ÎÅäŸÀÔ Ã¼ÀÎÀ» ÅëÇØ °´Ã¼°¡ ¾î¶°ÇÑ ¼Ó¼º¿¡ Á¢±ÙÇÏ°íÀÚ ÇÒ ¶§ ±× °´Ã¼ÀÇ ¼Ó¼º»Ó¸¸ ¾Æ´Ï¶ó °´Ã¼ÀÇ ÇÁ·ÎÅäŸÀÔÀ¸·Î À̵¿ÇÏ¸ç ¼Ó¼ºÀ» Ž»öÇÑ´Ù. ÇÁ·ÎÅäŸÀÔ °´Ã¼´Â »ý¼ºÀÚ ÇÔ¼öÀÇ ÇÁ·ÎÅäŸÀÔ ÇÁ·ÎÆÛƼ(prototype property)¿¡ ÇÒ´çÇØ Á¤ÀǵǸç Á¤ÀÇµÈ ÇÁ·ÎÅäŸÀÔ °´Ã¼¿¡ ¸Þ¼­µå³ª ÇÁ·ÎÆÛƼ¸¦ Ãß°¡Çϸé, ÇØ´ç »ý¼ºÀÚ ÇÔ¼ö¸¦ ÅëÇØ »ý¼ºµÈ ¸ðµç °´Ã¼°¡ À̸¦ »ó¼ÓÇÏ°Ô µÈ´Ù.

¡ãÇÁ·ÎÅäŸÀÔ Ã¼ÀÎ ÀÌÇظ¦ À§ÇÑ ¿¹Á¦ ÄÚµåÀÇ ½Ã°¢È­ÇÑ ¸ð½À[ÀÚ·á=À̱۷çÄÚÆÛ·¹À̼Ç]


ÇÁ·ÎÅäŸÀÔ Ã¼ÀÎÀÇ ¿¹Á¦Äڵ忡 Æ÷ÇÔµÈ myCat °´Ã¼´Â Cat »ý¼ºÀÚ ÇÔ¼öÀÇ ÀνºÅϽºÀ̱⠶§¹®¿¡ ¸ÕÀú Cat.prototypeÀ» È®ÀÎÇϴµ¥, ¸¸¾à ÇØ´ç ¸Þ¼­µå³ª ¼Ó¼ºÀ» ãÁö ¸øÇϸé Cat.prototypeÀÇ ÇÁ·ÎÅäŸÀÔÀÎ Animal.prototype¿¡¼­ °Ë»öÇÏ°Ô µÈ´Ù. À̾î myCat °´Ã¼´Â Cat »ý¼ºÀÚ ÇÔ¼ö¿Í Animal »ý¼ºÀÚ ÇÔ¼öÀÇ ÇÁ·ÎÅäŸÀÔ ¸Þ¼­µå¸¦ ¸ðµÎ »ç¿ëÇÒ ¼ö ÀÖ°Ô µÈ´Ù.

Object ÇÁ·ÎÅäŸÀÔ¿¡´Â ¸¹Àº ¼Ó¼ºÀÌ Á¸ÀçÇÏÁö¸¸ ±× °¡¿îµ¥ ¡®constructor¡¯¿Í ¡®prototype¡¯, ¡®proto¡¯ ¼Ó¼ºÀ» »ìÆ캻´Ù. ¡®constructor¡¯´Â °´Ã¼ÀÇ »ý¼ºÀÚ ÇÔ¼ö¸¦ ÂüÁ¶ÇÏ´Â ¼Ó¼ºÀÌ´Ù. Ŭ·¡½º¸¦ »ç¿ëÇØ °´Ã¼¸¦ »ý¼ºÇÒ ¶§ ¡®constructor¡¯ ¼Ó¼ºÀÌ ÀÚµ¿À¸·Î ¼³Á¤µÇ°í, ÇØ´ç °´Ã¼ÀÇ ÇÁ·ÎÅäŸÀÔÀ» °¡¸®Å°´Â ¡®prototype¡¯ ¼Ó¼ºÀÌ ÇÁ·ÎÅäŸÀÔ Ã¼ÀÎÀ» »ç¿ëÇØ °ü¸®µÇ´Â °ÍÀÌ´Ù.

¡®proto¡¯´Â °´Ã¼ Ŭ·¡½ºÀÇ ¡®Prototype¡¯À» ¹ÝȯÇÏ´Â ¼Ó¼ºÀÌ´Ù. ¡®proto¡¯ ¼Ó¼ºÀº ÀÚ¹Ù½ºÅ©¸³Æ® ¾ð¾îÀÇ Ç¥ÁØÀº ¾Æ´ÏÁö¸¸ NodeJS ȯ°æ¿¡¼­´Â Áö¿øÇÏ°í ÀÖ´Ù. ¡®proto¡¯ ¼Ó¼º¿¡ Á¢±ÙÇϰųª °ªÀ» ¼³Á¤ÇÒ °æ¿ì ÇÁ·ÎÅäŸÀÔ¿¡ ´ëÇÑ ¸í½ÃÀûÀÎ ÀÛ¾÷ÀÌ ¼öÇàµÈ´Ù.

»ç¿ëÀÚ Á¶ÀÛÀ¸·Î ÀϾ´Â Prototype-PollutionÀÇ ¿¹´Â Å©°Ô 3°¡Áö·Î ³ª´­ ¼ö ÀÖ´Ù. ¸ÕÀú ¡®¾ÈÀüÇÏÁö ¾ÊÀº °´Ã¼ÀÇ Àç±Í º´ÇÕ¡¯¿¡¼­ Àç±Í º´ÇÕ ÇÔ¼ö´Â »ç¿ëÀڷκÎÅÍÀÇ ÀÔ·ÂÀ̳ª ¿ÜºÎ µ¥ÀÌÅ͸¦ ¹Þ¾ÆµéÀÏ ¶§ ¾ÈÀüÇÏÁö ¾Ê°Ô ±¸ÇöµÇ¸é prototype-pollution¿¡ Ãë¾àÇØÁú °¡´É¼ºÀÌ Å©´Ù.

¡ã°´Ã¼ÀÇ Àç±Í º´ÇÕ ¾Ç¿ë »ç·Ê[ÀÚ·á=À̱۷çÄÚÆÛ·¹À̼Ç]


µÎ ¹ø°·Î ¡®°æ·Îº° ¼Ó¼º Á¤ÀÇ¡¯´Â ÁÖ¾îÁø °æ·Î¿¡ µû¶ó °´Ã¼ÀÇ ÇÁ·ÎÆÛƼ °ªÀ» ¼³Á¤ÇÏ´Â ÇÔ¼ö¿¡¼­ »ç¿ëÀÚ°¡ Á¦¾îÇÒ ¼ö ÀÖ´Â ÀԷ¿¡ ´ëÇÑ °ËÁõÀÌ ÀûÀýÈ÷ ÀÌ·ïÁöÁö ¾ÊÀ» °æ¿ì »ç¿ëÀÚ°¡ ¡®proto¡¯ °æ·Î¸¦ ÀÓÀÇ·Î ÁöÁ¤ÇØ prototype-pollutionÀ» À¯µµÇÒ ¼ö ÀÖ´Ù.

¼¼ ¹ø°·Î ¡®°´Ã¼ º¹Á¦(clone())¡¯´Â °´Ã¼¸¦ º¹Á¦ÇÏ´Â ¿ªÇÒÀ» ÇÏ´Â clone ÇÔ¼ö¿Í ¿©·¯ °´Ã¼¸¦ º´ÇÕÇÏ´Â merge ÇÔ¼ö°¡ »ç¿ëÀÚ ÀԷ ó¸® ½Ã ÃæºÐÇÑ °ËÁõ ¾øÀÌ µ¿ÀÛÇÒ ¶§ ¾ÇÀÇÀûÀÎ »ç¿ëÀÚ°¡ ÀÔ·Â °ªÀ» Á¶ÀÛÇØ prototype-pollution °ø°ÝÀ» ¼öÇàÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.

Prototype-PollutionÀ» ÀÌ¿ëÇÑ °ø°Ý ½Ã³ª¸®¿À´Â CVE-2018-16487ÀÇ Ãë¾àÇÑ È¯°æ ±¸¼º¿¡¼­ ãÀ» ¼ö ÀÖ´Ù. CVE-2018-16487´Â npm(node package manager)ÀÇ Àαâ ÀÖ´Â ¶óÀ̺귯¸®ÀÎ lodash¿¡¼­ ¹ß°ßµÈ Ãë¾àÁ¡ÀÌ´Ù. lodash´Â ¹®ÀÚ¿­, ¼ýÀÚ, ¹è¿­, ÇÔ¼ö ¹× °³Ã¼ ÇÁ·Î±×·¡¹ÖÀ» ´Ü¼øÈ­ÇØ ÇÁ·Î±×·¡¸Ó°¡ ÀÚ¹Ù½ºÅ©¸³Æ® Äڵ带 º¸´Ù È¿À²ÀûÀ¸·Î ÀÛ¼ºÇÏ°í À¯Áö¡¤°ü¸®Çϴµ¥ À¯¿ëÇÑ µµ±¸°¡ Æ÷ÇԵŠÀÖ¾î ¸¹Àº »ç¶÷µéÀÌ »ç¿ë ÁßÀÌ´Ù.

ÇÏÁö¸¸ ÀÌ Ãë¾àÁ¡Àº ¡®_.merge()¡¯ ÇÔ¼ö°¡ °´Ã¼ º´ÇÕ ½Ã ÀûÀýÇÑ °ËÁõÀ» ¼öÇàÇÏÁö ¾Ê¾Æ ¾ÇÀÇÀûÀÎ »ç¿ëÀÚ°¡ ¿¹»óÄ¡ ¸øÇÑ ¼Ó¼ºÀ» Ãß°¡Çϰųª ±âÁ¸ ¼Ó¼ºÀ» º¯°æÇÒ ¼ö ÀÖ´Â Ãë¾àÁ¡ÀÌ Á¸ÀçÇÑ´Ù. °ø°ÝÀÚ´Â ÀÌ Ãë¾àÁ¡À» È°¿ëÇØ ÀÀ¿ë ÇÁ·Î±×·¥ ³»¿¡ °³Ã¼ µ¿ÀÛ¿¡ µû¶ó ±ÇÇÑ »ó½Â ¶Ç´Â ÀáÀçÀûÀ¸·Î RCE °ø°ÝÀ» ÃÊ·¡ÇÒ ¼ö ÀÖ´Â °³Ã¼ ÇÁ·ÎÅäŸÀÔ ¼Ó¼ºÀ» Ãß°¡ÇÒ ¼ö ÀÖ´Ù.

¡ãCVE-2018-16487 °ø°ÝÈ帧µµ[ÀÚ·á=À̱۷çÄÚÆÛ·¹À̼Ç]


Prototype-PollutionÀº Áß¿äÇÑ º¸¾È ¹®Á¦À̱⠶§¹®¿¡ ±â¼úÀû º¹À⼺À» ÀÌÇØÇÏ°í »çÀü ¿¹¹æÀû ¿ÏÈ­ Àü·«À» äÅÃÇØ °³¹ßÀÚ´Â ¾Ç¿ë À§ÇèÀ» Å©°Ô ÁÙÀÌ°í ¾ÖÇø®ÄÉÀ̼ÇÀÇ Àü¹ÝÀûÀÎ º¸¾È »óŸ¦ °­È­ÇØ¾ß ÇÑ´Ù. À̸¦ À§ÇØ ¸ÕÀú ¡®»ç¿ëÀÚ ÀÔ·Â °ª °ËÁõ¡¯ÀÌ ÇÊ¿äÇÏ´Ù. »ç¿ëÀÚÀÇ ÀÔ·Â °ª °ËÁõÀ» ¼öÇàÇÏ·Á¸é »ç¿ëÀÚ·Î ÀԷ¹ÞÀº ÈÄ ÀÔ·ÂÀ» °ËÁõÇÏ´Â Äڵ带 Ãß°¡Çϰųª ¼öÁ¤ÇØ¾ß ÇÑ´Ù.

´ÙÀ½À¸·Î ¡®Object.freeze()¡¯ ¸Þ¼­µå¸¦ È°¿ëÇØ¾ß ÇÑ´Ù. Object.freeze() ¸Þ¼­µå´Â °´Ã¼¸¦ µ¿°áÇØ ´õ ÀÌ»ó º¯°æÀÌ ºÒ°¡´ÉÇϵµ·Ï ÇÑ´Ù. µ¿°áµÈ °´Ã¼´Â »õ·Î¿î ¼Ó¼º Ãß°¡, Á¸ÀçÇÏ´Â ¼Ó¼ºÀ» Á¦°ÅÇÏ´Â °ÍÀ» ¹æÁöÇØ ¼Ó¼ºÀÇ ºÒº¯¼º°ú ÇÁ·ÎÅäŸÀÔÀÌ º¯°æµÇ´Â °ÍÀ» ¹æÁöÇÑ´Ù.

Object.create() ¸Þ¼­µå´Â ÁöÁ¤µÈ ÇÁ·ÎÅäŸÀÔ °´Ã¼ ¹× ¼Ó¼ºÀ» °®´Â »õ °´Ã¼¸¦ ¸¸µç´Ù. À̶§ ÇÁ·ÎÅäŸÀÔÀÌ nullÀÎ °´Ã¼¸¦ »ý¼ºÇÒ °æ¿ì ±âº» ÇÁ·ÎÅäŸÀÔÀ» »ó¼Ó¹ÞÁö ¾Ê¾Æ ÇÁ·ÎÅäŸÀÔ Ã¼Àο¡¼­ ¹þ¾î³ª°Ô µÈ´Ù.

¸¶Áö¸·À¸·Î npm(node package manager)´Â ¸ðµâÀ» ÃÖ½ÅÈ­Çϸé Prototype-Pollution µî º¸¾È À§Çù ¹× ¹ö±×¸¦ ¹æÁöÇÒ ¼ö ÀÖ´Ù. npm ¸ðµâÀÇ ÃֽŠ¹öÀüÀº ±êÇãºê ·¹Æ÷ÁöÅ丮, npm °ø½Ä À¥»çÀÌÆ®, ¶Ç´Â npm ¸í·É¾î¸¦ ÅëÇØ È®ÀÎÀÌ °¡´ÉÇÏ´Ù.
[±è¿µ¸í ±âÀÚ(boan@boannews.com)]

<ÀúÀÛ±ÇÀÚ: º¸¾È´º½º(www.boannews.com) ¹«´ÜÀüÀç-Àç¹èÆ÷±ÝÁö>

  •  
  • 0
  • ÆäÀ̽ººÏ º¸³»±â Æ®À§ÅÍ º¸³»±â ³×À̹ö ¹êµå º¸³»±â Ä«Ä«¿À ½ºÅ丮 º¸³»±â ³×À̹ö ºí·Î±× º¸³»±â

  • ¡°
  •  SNS¿¡¼­µµ º¸¾È´º½º¸¦ ¹Þ¾Æº¸¼¼¿ä!! 
  • ¡±
¾Æ½ºÆ®·Ð½ÃÅ¥¸®Æ¼ ÆÄ¿öºñÁî 2023³â2¿ù23ÀÏ ½ÃÀÛ ³Ý¾Øµå ÆÄ¿öºñÁî ÁøÇà 2020³â1¿ù8ÀÏ ½ÃÀÛ~2021³â 1¿ù8ÀϱîÁö À§Áîµð¿£¿¡½º 2018
¼³¹®Á¶»ç
³»³â ȸ»ç¿¡ ²À µµÀÔÇÏ°í ½ÍÀº º¸¾È ¼Ö·ç¼Ç ¶Ç´Â Ç÷§ÆûÀº ¹«¾ùÀΰ¡¿ä?
XDR
EDR
AI º¸¾È
Á¦·ÎÆ®·¯½ºÆ®
°ø±Þ¸Á º¸¾È ü°è(SBOM)
Ŭ¶ó¿ìµå º¸¾È ¼Ö·ç¼Ç
±âŸ(´ñ±Û·Î)