[1864] 2020-10-15_CodeQL挖掘React应用的XSS实践

文档创建者:s7ckTeam
浏览次数:5
最后更新:2025-01-16
2020-10-15_CodeQL挖掘React应用的XSS实践 C o d e Q L R e a c t X S S   i m a g e m l t   D a y 1   2 0 2 0 - 1 0 - 1 5   i m a g e m l t   ,     1   I n t r o   C o d e Q L     R e a c t     w e b   X S S     W e b s t o r m     d a n g e r o u s l y S e t I n n e r H T M L   西 便   C o d e Q L     R e a c t     X S S R e a c t X S S R e a c t X S S d a n g e r o u s l y S e t I n n e r H T M L 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 c l a s s   H e l l o   e x t e n d s   R e a c t . C o m p o n e n t   {     r e n d e r ( )   {         r e t u r n   < d i v                 d a n g e r o u s l y S e t I n n e r H T M L = { { h t m l : ' < i m g / / > ' } }         > < / d i v > ;     } } R e a c t D O M . r e n d e r (     < H e l l o   n a m e = " W o r l d "   / > ,     d o c u m e n t . g e t E l e m e n t B y I d ( ' c o n t a i n e r ' ) ) ;
h t m l D O M a 1 2 3 4 5 6 7 8 9 1 0 c o n s t   u s e r W e b s i t e   =   " j a v a s c r i p t : a l e r t ( ' H a c k e d ! ' ) ; " ; c l a s s   U s e r P r o f i l e P a g e   e x t e n d s   R e a c t . C o m p o n e n t   {     r e n d e r ( )   {         r e t u r n   (             < a   h r e f = { u s e r W e b s i t e } > M y   W e b s i t e < / a >         )     } } R e a c t D O M . r e n d e r ( < U s e r P r o f i l e P a g e   / > ,   d o c u m e n t . q u e r y S e l e c t o r ( " # a p p " ) ) ; a j a v a s c r i p t u r l o n e c l i c k   X S S . i n n e r H T M L / o u t e r H T M L 1 2 v a r   x = d o c u m e n t . c r e a t e E l e m e n t ( ' d i v ' ) x . i n n e r H T M L = " u s e r   c o n t r o l l a b l e   d a t a " ; h r e f 1 2 v a r   x = d o c u m e n t . c r e a t e E l e m e n t ( ' a ' ) x . h r e f = " j a v a s c r i p t : a l e r t ( 1 ) " ; ( d a n g e r o u s l y S e t I n n e r H T M L ) 1 2 3 4 5 6 l e t   r = { . . . i n p u t } r e t u r n   (         < d i v           . . . r         > < / d i v > ) X S S C o d e Q L C o d e Q L 便 , , T a i n t T r a c k i n g : : C o n f i g u r a t i o n i s S o u r c e i s S i n k i s A d d i t i o n a l T a i n t S t e p i s S o u r c e
R e a c t S o u r c e S o u r c e l o c a t i o n . h a s h / X H R S o u r c e d a n g e r o u s l y S e t I n n e r H T M L S o u r c e   1 2 3 4 o v e r r i d e   p r e d i c a t e   i s S o u r c e ( D a t a F l o w : : N o d e   n d ) {               n o t   ( n d . a s E x p r ( )   i n s t a n c e o f   C o n s t a n t E x p r )               a n d   n o t   e x i s t s ( n d . t o S t r i n g ( ) . t o L o w e r C a s e ( ) . i n d e x O f ( " i c o n " ) )         } 便 S o u r c e d a n g e r o u s l y S e t I n n e r H T M L s v g S o u r c e S i n k j s x 1 2 3 4 5 6 7 8   c l a s s   R e a c t D a n g e r o u s S e t I n n e r H T M L S i n k s   e x t e n d s   D a t a F l o w : : N o d e   {       R e a c t D a n g e r o u s S e t I n n e r H T M L S i n k s ( )   {         e x i s t s ( J S X A t t r i b u t e   a t t r   |             a t t r . g e t N a m e ( )   =   " d a n g e r o u s l y S e t I n n e r H T M L "   a n d   a t t r . g e t V a l u e ( )   =   t h i s . a s E x p r ( )         )     } } d a n g e r o u s l y S e t I n n e r H T M L h t m l d a n g e r o u s l y S e t I n n e r H T M L h t m l C o d e Q L 1 2 3 4 5 6 7 o v e r r i d e   p r e d i c a t e   i s A d d i t i o n a l T a i n t S t e p ( D a t a F l o w : : N o d e   p r e d ,   D a t a F l o w : : N o d e   s u c c )   {                 e x i s t s ( D a t a F l o w : : O b j e c t L i t e r a l N o d e   o b j ,   D a t a F l o w : : N o d e   h t m l _ v a l u e   |                 o b j . h a s P r o p e r t y W r i t e ( " _ _ h t m l " ,   h t m l _ v a l u e )   a n d                 s u c c   =   o b j   a n d                 p r e d   =   h t m l _ v a l u e                 )         } i s S i n k i s A d d i t i o n a l T a i n t S t e p i s A d d i t i o n a l T a i n t S t e p { h t m l : x x x } x x x i s A d d i t i o n a l T a i n t S t e p
d a n g e r o u s l y S e t I n n e r H T M L C o d e Q L 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 i m p o r t   j a v a s c r i p t c l a s s   R e a c t D a n g e r o u s S e t I n n e r H T M L S i n k s   e x t e n d s   D a t a F l o w : : N o d e   {       R e a c t D a n g e r o u s S e t I n n e r H T M L S i n k s ( )   {         e x i s t s ( J S X A t t r i b u t e   a t t r   |             a t t r . g e t N a m e ( )   =   " d a n g e r o u s l y S e t I n n e r H T M L "   a n d   a t t r . g e t V a l u e ( )   =   t h i s . a s E x p r ( )         )     } } c l a s s   R e a c t S e t I n n e r H t m l T r a c k e r   e x t e n d s   T a i n t T r a c k i n g : : C o n f i g u r a t i o n {         R e a c t S e t I n n e r H t m l T r a c k e r ( )   {                 t h i s   =   " R e a c t S e t I n n e r H t m l T r a c k e r "         }         o v e r r i d e   p r e d i c a t e   i s S o u r c e ( D a t a F l o w : : N o d e   n d ) {               n o t   ( n d . a s E x p r ( )   i n s t a n c e o f   C o n s t a n t E x p r )               a n d   n o t   e x i s t s ( n d . t o S t r i n g ( ) . t o L o w e r C a s e ( ) . i n d e x O f ( " i c o n " ) )         }         o v e r r i d e   p r e d i c a t e   i s S i n k ( D a t a F l o w : : N o d e   n d ) {                 n d   i n s t a n c e o f   R e a c t D a n g e r o u s S e t I n n e r H T M L S i n k s         }         o v e r r i d e   p r e d i c a t e   i s A d d i t i o n a l T a i n t S t e p ( D a t a F l o w : : N o d e   p r e d ,   D a t a F l o w : : N o d e   s u c c )   {                 e x i s t s ( D a t a F l o w : : O b j e c t L i t e r a l N o d e   o b j ,   D a t a F l o w : : N o d e   h t m l _ v a l u e   |                 o b j . h a s P r o p e r t y W r i t e ( " _ _ h t m l " ,   h t m l _ v a l u e )   a n d                 s u c c   =   o b j   a n d                 p r e d   =   h t m l _ v a l u e                 )         } } f r o m   R e a c t S e t I n n e r H t m l T r a c k e r   p t ,   D a t a F l o w : : N o d e   s o u r c e ,   D a t a F l o w : : N o d e   s i n k w h e r e   p t . h a s F l o w ( s o u r c e ,   s i n k ) s e l e c t   s o u r c e , s i n k i s A d d i t i o n a l T a i n t S t e p D o m p u r i f y a S i n k h r e f i s A d d i t i o n a l T a i n t S t e p
1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 i m p o r t   j a v a s c r i p t c l a s s   R e a c t S e t H r e f S i n k s   e x t e n d s   D a t a F l o w : : N o d e   {       R e a c t S e t H r e f S i n k s ( )   {         e x i s t s ( J S X A t t r i b u t e   a t t r   |             a t t r . g e t N a m e ( )   =   " h r e f "   a n d   a t t r . g e t V a l u e ( )   =   t h i s . a s E x p r ( )         )     } } c l a s s   R e a c t S e t H r e f T r a c k e r   e x t e n d s   T a i n t T r a c k i n g : : C o n f i g u r a t i o n {         R e a c t S e t H r e f T r a c k e r ( )   {                 t h i s   =   " R e a c t S e t H r e f T r a c k e r "         }         o v e r r i d e   p r e d i c a t e   i s S o u r c e ( D a t a F l o w : : N o d e   n d ) {               e x i s t s ( |               n o t   ( n d . a s E x p r ( )   i n s t a n c e o f   C o n s t a n t E x p r )               a n d   n o t   e x i s t s ( n d . t o S t r i n g ( ) . t o L o w e r C a s e ( ) . i n d e x O f ( " i c o n " ) )               )         }         o v e r r i d e   p r e d i c a t e   i s S i n k ( D a t a F l o w : : N o d e   n d ) {             n d   i n s t a n c e o f   R e a c t S e t H r e f S i n k s         } } f r o m   R e a c t S e t H r e f T r a c k e r   p t ,   D a t a F l o w : : N o d e   s o u r c e ,   D a t a F l o w : : N o d e   s i n k w h e r e   p t . h a s F l o w ( s o u r c e ,   s i n k ) s e l e c t   s o u r c e , s i n k i n n e r H T M L / o u t e r H T M L / h r e f S i n k P r o p W r i t e i n n e r H T M L / o u t e r H T M L / h r e f
1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 i m p o r t   j a v a s c r i p t c l a s s   I n n e r H T M L S i n k s   e x t e n d s   D a t a F l o w : : N o d e   {       I n n e r H T M L S i n k s ( ) {               e x i s t s ( D a t a F l o w : : P r o p W r i t e   p w   |               p w . g e t P r o p e r t y N a m e ( ) . r e g e x p M a t c h ( " ( i n n e r H T M L | o u t e r H T M L ) " )               a n d   p w . g e t R h s ( )   =   t h i s               )       } } c l a s s   I n n e r H t m l T r a c k e r   e x t e n d s   T a i n t T r a c k i n g : : C o n f i g u r a t i o n {         I n n e r H t m l T r a c k e r ( )   {                 t h i s   =   " I n n e r H t m l T r a c k e r "         }         o v e r r i d e   p r e d i c a t e   i s S o u r c e ( D a t a F l o w : : N o d e   n d ) {               n o t   n d . a s E x p r ( )   i n s t a n c e o f   C o n s t a n t E x p r         }         o v e r r i d e   p r e d i c a t e   i s S i n k ( D a t a F l o w : : N o d e   n d ) {                 n d   i n s t a n c e o f   I n n e r H T M L S i n k s         } } f r o m   I n n e r H t m l T r a c k e r   p t ,   D a t a F l o w : : N o d e   s o u r c e ,   D a t a F l o w : : N o d e   s i n k w h e r e   p t . h a s F l o w ( s o u r c e ,   s i n k ) s e l e c t   s o u r c e , s i n k D O M X S S D O M X S S D a t a F l o w , D O M X S S C o d e Q L i s S o u r c e i s S i n k i s A d d i t i o n a l T a i n t S t e p
1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 < ! D O C T Y P E   h t m l > < h t m l > < h e a d >   < m e t a   c h a r s e t = " u t f - 8 " >   < t i t l e > D o r a B o x   -   D O M _ X S S < / t i t l e > < / h e a d > < b o d y > < f o r m   a c t i o n = ' '   m e t h o d = ' G E T ' > n a m e :   < i n p u t   t y p e = ' t e x t '   n a m e = ' n a m e '   i d = ' f o r m 1 ' > < i n p u t   t y p e = ' s u b m i t '   n a m e = ' s u b m i t '   v a l u e = ' s u b m i t ' > < / f o r m > < h r > < s c r i p t   t y p e = ' t e x t / j a v a s c r i p t ' > f u n c t i o n   g e t U R L V a l u e ( n a m e ) {     v a r   r e g   =   n e w   R e g E x p ( ' ( ^ | & ) ' +   n a m e   + ' = ( [ ^ & ] * ) ( & | $ ) ' ) ;   v a r   r   =   w i n d o w . l o c a t i o n . s e a r c h . s u b s t r ( 1 ) . m a t c h ( r e g ) ;   i f ( r   ! =   n u l l ) {       r e t u r n   u n e s c a p e ( r [ 2 ] ) ;     } e l s e {       r e t u r n   " " ;     } } d o c u m e n t . w r i t e ( g e t U R L V a l u e ( ' n a m e ' ) ) ; < / s c r i p t > < / b o d y > < / h t m l > X S S l o c a t i o n . s e a r c h u r l D O M X S S , S o u r c e 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 c l a s s   L o c a t i o n H a s h S o u r c e   e x t e n d s   D a t a F l o w : : N o d e   {         L o c a t i o n H a s h S o u r c e ( )   {                 e x i s t s ( C a l l E x p r   d o l l a r C a l l ,   P r o p A c c e s s   p r   |             t h i s . a s E x p r ( )   i n s t a n c e o f   C a l l E x p r   a n d             ( d o l l a r C a l l . g e t C a l l e e N a m e ( )   =   " s p l i t "               o r   d o l l a r C a l l . g e t C a l l e e N a m e ( )   =   " s u b s t r "                 o r   d o l l a r C a l l . g e t C a l l e e N a m e ( )   =   " s u b s t r i n g "             )   a n d   d o l l a r C a l l . g e t R e c e i v e r ( )   =   p r             a n d     ( p r . g e t B a s e ( ) . t o S t r i n g ( )   =   " w i n d o w . l o c a t i o n "               o r   p r . g e t B a s e ( ) . t o S t r i n g ( )   =   " l o c a t i o n " )             a n d   t h i s . a s E x p r ( )   =   d o l l a r C a l l             )         } } s p l i t / s u b s t r / s u b s t r i n g R e c e i v e r w i n d o w . l o c a t i o n / l o c a t i o n . S i n k R e a c t X S S i n n e r H T M L d o c u m e n t . w r i t e
1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 c l a s s   D o c u m e n t W r i t e S i n k s   e x t e n d s   D a t a F l o w : : N o d e   {       D o c u m e n t W r i t e S i n k s ( )   {         e x i s t s ( C a l l E x p r   c a l l |                 c a l l . g e t C a l l e e N a m e ( )   =   " w r i t e "                   a n d   c a l l . g e t R e c e i v e r ( ) . t o S t r i n g ( )   =   " d o c u m e n t "                   a n d   t h i s . a s E x p r ( )   =   c a l l . g e t A r g u m e n t ( 0 )         )     } } c l a s s   I n n e r H T M L S i n k s   e x t e n d s   D a t a F l o w : : N o d e   {         I n n e r H T M L S i n k s ( ) {                 e x i s t s ( D a t a F l o w : : P r o p W r i t e   p w   |                 p w . g e t P r o p e r t y N a m e ( ) . r e g e x p M a t c h ( " ( i n n e r H T M L | o u t e r H T M L ) " )                 a n d   p w . g e t R h s ( )   =   t h i s               )         } } u n e s c a p e / d e c o d e U R I 1 2 3 4 5 6 7 8 9 1 0 o v e r r i d e   p r e d i c a t e   i s A d d i t i o n a l T a i n t S t e p ( D a t a F l o w : : N o d e   p r e d ,   D a t a F l o w : : N o d e   s u c c )   {         e x i s t s ( C a l l E x p r   c a l l   |         ( c a l l . g e t C a l l e e N a m e ( )   =   " u n e s c a p e "                 o r   c a l l . g e t C a l l e e N a m e ( )   =   " a t o b "                 o r   c a l l . g e t C a l l e e N a m e ( )   =   " d e c o d e U R I "                 o r   c a l l . g e t C a l l e e N a m e ( )   =   " d e c o d e U R I C o m p o n e n t "         )   a n d   s u c c . a s E x p r ( )   =   c a l l   a n d         p r e d . a s E x p r ( )   =   c a l l . g e t A r g u m e n t ( 0 )         ) } u n e s c a p e / a t o b / d e c o d e U R I / d e c o d e U R I C o m p o n e n t D O M X S S C o d e Q L 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 i m p o r t   j a v a s c r i p t c l a s s   D o c u m e n t W r i t e S i n k s   e x t e n d s   D a t a F l o w : : N o d e   {       D o c u m e n t W r i t e S i n k s ( )   {         e x i s t s ( C a l l E x p r   c a l l |                 c a l l . g e t C a l l e e N a m e ( )   =   " w r i t e "                   a n d   c a l l . g e t R e c e i v e r ( ) . t o S t r i n g ( )   =   " d o c u m e n t "                   a n d   t h i s . a s E x p r ( )   =   c a l l . g e t A r g u m e n t ( 0 )         )     } } c l a s s   I n n e r H T M L S i n k s   e x t e n d s   D a t a F l o w : : N o d e   {         I n n e r H T M L S i n k s ( ) {                 e x i s t s ( D a t a F l o w : : P r o p W r i t e   p w   |                 p w . g e t P r o p e r t y N a m e ( ) . r e g e x p M a t c h ( " ( i n n e r H T M L | o u t e r H T M L ) " )                 a n d   p w . g e t R h s ( )   =   t h i s i s A d d i t i o n a l T a i n t S t e p
1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6                 a n d   p w . g e t R h s ( )   =   t h i s               )         } } c l a s s   L o c a t i o n H a s h S o u r c e   e x t e n d s   D a t a F l o w : : N o d e   {         L o c a t i o n H a s h S o u r c e ( )   {                 e x i s t s ( C a l l E x p r   d o l l a r C a l l ,   P r o p A c c e s s   p r   |             t h i s . a s E x p r ( )   i n s t a n c e o f   C a l l E x p r   a n d             ( d o l l a r C a l l . g e t C a l l e e N a m e ( )   =   " s p l i t "               o r   d o l l a r C a l l . g e t C a l l e e N a m e ( )   =   " s u b s t r "                 o r   d o l l a r C a l l . g e t C a l l e e N a m e ( )   =   " s u b s t r i n g "             )   a n d   d o l l a r C a l l . g e t R e c e i v e r ( )   =   p r             a n d     ( p r . g e t B a s e ( ) . t o S t r i n g ( )   =   " w i n d o w . l o c a t i o n "               o r   p r . g e t B a s e ( ) . t o S t r i n g ( )   =   " l o c a t i o n " )             a n d   t h i s . a s E x p r ( )   =   d o l l a r C a l l             )         } } c l a s s   D o c u m e n t W r i t e T r a c k e r   e x t e n d s   T a i n t T r a c k i n g : : C o n f i g u r a t i o n {       D o c u m e n t W r i t e T r a c k e r ( )   {                 t h i s   =   " D o c u m e n t W r i t e T r a c k e r "         }         o v e r r i d e   p r e d i c a t e   i s S o u r c e ( D a t a F l o w : : N o d e   n d ) {               n d   i n s t a n c e o f   L o c a t i o n H a s h S o u r c e         }         o v e r r i d e   p r e d i c a t e   i s S i n k ( D a t a F l o w : : N o d e   n d ) {                 n d   i n s t a n c e o f   D o c u m e n t W r i t e S i n k s                 o r   n d   i n s t a n c e o f   I n n e r H T M L S i n k s         }         o v e r r i d e   p r e d i c a t e   i s A d d i t i o n a l T a i n t S t e p ( D a t a F l o w : : N o d e   p r e d ,   D a t a F l o w : : N o d e   s u c c )   {                 e x i s t s ( C a l l E x p r   c a l l   |                 ( c a l l . g e t C a l l e e N a m e ( )   =   " u n e s c a p e "                         o r   c a l l . g e t C a l l e e N a m e ( )   =   " a t o b "                         o r   c a l l . g e t C a l l e e N a m e ( )   =   " d e c o d e U R I "                         o r   c a l l . g e t C a l l e e N a m e ( )   =   " d e c o d e U R I C o m p o n e n t "                 )   a n d   s u c c . a s E x p r ( )   =   c a l l   a n d                 p r e d . a s E x p r ( )   =   c a l l . g e t A r g u m e n t ( 0 )                 )         } } f r o m   D o c u m e n t W r i t e T r a c k e r   p t ,   D a t a F l o w : : N o d e   s o u r c e ,   D a t a F l o w : : N o d e   s i n k w h e r e   p t . h a s F l o w ( s o u r c e ,   s i n k )   s e l e c t   s o u r c e , s i n k h t t p s : / / h e l p . s e m m l e . c o m / Q L / l e a r n - q l / j a v a s c r i p t / q l - f o r - j a v a s c r i p t . h t m l h t t p s : / / m s r c - b l o g . m i c r o s o f t . c o m / 2 0 1 9 / 1 1 / 0 6 / v u l n e r a b i l i t y - h u n t i n g - w i t h - s e m m l e - q l - d o m - x s s / h t t p s : / / m s r c - b l o g . m i c r o s o f t . c o m / 2 0 1 9 / 0 3 / 1 9 / v u l n e r a b i l i t y - h u n t i n g - w i t h - s e m m l e - q l - p a r t - 2 /    

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则