[05.01.2006] SQL инъекция через forum-read cookie's параметр

Уязвимость существует из-за недостаточной обработки входных данных в файлах куки, отвечающей за прочитанные темы. Удаленный пользователь может с помощью специально сформированного URL выполнить произвольные SQL команды в базе данных приложения.

Пример/Эксплоит:

05012006.zip

Исправление:

Открыть файл ./sources/ipsclass.php, найти:

$this->forum_read[$id] = $stamp;

Заменить на:

$this->forum_read[ intval($id) ] = intval($stamp);

Найти код:

       /*-------------------------------------------------------------------------*/
       // Makes incoming info "safe"              
       /*-------------------------------------------------------------------------*/

Заменить на:

    /*-------------------------------------------------------------------------*/
    // Makes topics read or forum read cookie safe        
    /*-------------------------------------------------------------------------*/
    /**
    * Makes int based arrays safe
    * XSS Fix: Ticket: 243603
    * Problem with cookies allowing SQL code in keys
    *
    * @param    array    Array
    * @return    array    Array (Cleaned)
    * @since    2.1.4(A)
    */
    function clean_int_array( $array=array() )
    {
        $return = array();
        
        if ( is_array( $array ) and count( $array ) )
        {
            foreach( $array as $k => $v )
            {
                $return[ intval($k) ] = intval($v);
            }
        }
        
        return $return;
    }
        
    /*-------------------------------------------------------------------------*/
    // Makes incoming info "safe"              
    /*-------------------------------------------------------------------------*/

Открыть файл ./sources/action_public/forums.php, найти:

 $this->read_array = unserialize(stripslashes($read));

Заменить на:

 $this->read_array = $this->ipsclass->clean_int_array( unserialize(stripslashes($read)) );

Открыть файл ./sources/action_public/search.php, найти:

 $this->read_array = unserialize(stripslashes($read));

Заменить на:

 $this->read_array = $this->ipsclass->clean_int_array( unserialize(stripslashes($read)) );

Открыть файл ./sources/action_public/topics.php, найти:

 $this->read_array = unserialize(stripslashes($read));

Заменить на:

 $this->read_array = $this->ipsclass->clean_int_array( unserialize(stripslashes($read)) );

Открыть файл ./sources/action_public/usercp.php, найти:

 $topic_array = array_slice( array_keys( $topics ), 0, 5 );

Добавить после:

 $topic_array = $this->ipsclass->clean_int_array( $topic_array );
 

security/2.1.x/modcritical/05.01.2006.txt · Последние изменения: 2007/08/14 12:01 (внешнее изменение)

Работает на DokuWiki
© 2002—2006 ibresource
e-mail: wikiteam@iblink.ru