Василий Наумкин

Василий Наумкин

С нами с 08 декабря 2012; Место в рейтинге пользователей: #1
Василий Наумкин
14 ноября 2016, 20:42
0
Ошибка 500 — это всегда фатальная ошибка сервера. Смотри его лог (не админки), чтобы понять, на что ругается.
Василий Наумкин
14 ноября 2016, 16:40
0
Если все сайты работают от одного юзера — то достаточно было ломануть всего один.
Василий Наумкин
14 ноября 2016, 11:36
+4
На GitHub давно сделаны плюсики для issues и pr, только мало кто туда из рядовых пользователей заглядывает.
Василий Наумкин
14 ноября 2016, 08:12
0
Поправил и это, спасибо.

Комменты удаляю, чтобы не мешали
Василий Наумкин
13 ноября 2016, 19:16
+7
Так что осталось только дождаться сигнала к действию. Чтобы это стало началом конца.
А вот и фигушки. Jason Coward таки вник в вопрос и пообещал срочно принять меры.

Говорит, были занятые выходные и он просто сразу не въехал в масштаб проблемы (а мой английский, очевидно, не так хорош, чтобы это доступно объяснить).

В любом случае, скоро должен быть фикс — обновил заметку.
Василий Наумкин
13 ноября 2016, 08:31
+1
Естественно. Посмотри метод xPDOObject::load и проследи, когда он приведёт к xPDO::getCriteria.
Василий Наумкин
12 ноября 2016, 14:48
+2
Это же просто эксперимент пока. Неизвестно где и как отразится ужесточение получения объектов.

Использовать на свой страх и риск, при получении ошибок — смотреть логи SQL и думать, как исправить.

У меня на тестовом сайте, например, всё в порядке с combo-options.
Василий Наумкин
12 ноября 2016, 14:36
+1
Да там и POST завались, и подбор директорий через OWASP_DirBuster_Project, и еще много всякого в поисковых запросах (вроде всё отфильтровалось).

Я вовсе не уверен, что всё закрыл, но основное — наверняка.
Василий Наумкин
12 ноября 2016, 14:34
+1
Но как, Шерлок? Особенно вот с этим исправлением?

Там же вроде идёт что-то типа
$object = new $objectName($data);
или типа того. Хотяяя… можно же, наверное, подставить как-бы class_key = 'modUser' и тогда будет создан именно этот объект.
Василий Наумкин
12 ноября 2016, 12:41
0
А это, похоже, из-за нашего исправления xPDO — позже подебажу, что там происходит.
Василий Наумкин
12 ноября 2016, 12:38
0
Этому сто лет в обед — работа TicketMeta с любыми ресурсами.

А для тикетов после обновления нужно позаходить в ресурсы, чтобы создались объекты TicketTotal, или запустить вручную скрипт пересчёта рейтинга из заметки про обновление.
Василий Наумкин
12 ноября 2016, 10:45
+1
Я свои уже пропатчил.

Другой вопрос, закрывает ли это сразу все дыры, или нужно еще методы какие править — потому и спрашиваю автора xPDO, он лучше знает.
Василий Наумкин
12 ноября 2016, 10:44
+2
Да я, хотя-бы, обсудить хочу — есть ли в этом смысл.

Если есть, то могу и самостоятельно хотфикс в репозитории выложить, не взирая на праздники.
Василий Наумкин
12 ноября 2016, 10:27
4
+9
Покопался в исходниках и написал пока такой фикс xPDO::getCriteria():
public function getCriteria($className, $type = null, $cacheFlag = true)
{
    $c = $this->newQuery($className);
    $c->cacheFlag = $cacheFlag;
    if (!empty($type)) {
        if ($type instanceof xPDOCriteria) {
            $c->wrap($type);
        } elseif (is_array($type)) {
            $tmp = array();
            array_walk_recursive($type, function ($v, $k) use (&$tmp) {
                if (!is_numeric($k)) {
                    $tmp[$k] = $v;
                }
            });
            if (count($tmp)) {
                $c->where($tmp);
            }
        } elseif (is_scalar($type)) {
            if ($pk = $this->getPK($className)) {
                $c->where(array($pk => $type));
            }
        } else {
            $c->where($type);
        }
    }

    return $c;
}
Это запрещает все запросы на получения объекта xPDO произвольным SQL запросом. Можно использовать либо первичные ключи, либо массивы с прописанными ключами, которые будут проверены при запросе.

По моим тестам работает хорошо, желающие могут проверить на себе — это файл core/xpdo/xpdo.class.php. Предложил код автору xPDO, буду ждать ответа.
Василий Наумкин
12 ноября 2016, 09:09
+1
Я надеюсь, что речь именно про web-коннекторы.

Понятное дело, что через коннекторы менеджера тоже можно пролезть, но для этого требуется авторизация, а у web — далеко не всегда.

Ну, будем ждать еще взломов и смотреть логи, куда и как пролезли.
Василий Наумкин
12 ноября 2016, 08:41
+1
По идее (по идее), в modConnectorResponse идёт проверка на авторизацию в админку и там вообще ничего снаружи не должно проходить.

Но я уже ни в чём не уверен.
Василий Наумкин
12 ноября 2016, 07:36
+2
Я могу написать на что нужно обратить внимание и как исправить, но это же будет и инструкцией по взлому еще неисправленных сайтов и дополнений.

Так что, палка о двух концах. Свои дополнения я поправил, так что можно посмотреть коммиты у тех, что в открытом доступе — должно быть всё понятно.
Василий Наумкин
12 ноября 2016, 04:38
+4
С нашим сообществом всё прекрасно.

Человек сначала ярко выступили и получил заслуженные минусы и бан. Затем вернулся и доказал свою правоту — теперь получит почёт и уважение.

Ну а я получил массу информации по методике взлома сайтов, благодаря логам на сервере.