Разработчики исправили серьезную уязвимость в OpenSSH

Разработчики исправили серьезную уязвимость в OpenSSH

Разработчики исправили серьезную уязвимость в OpenSSH

Уязвимость OpenSSH была обнаружена экспертом Михал Залевски (Michal Zalewski) в файле-исходнике sftp-server.c, она затрагивает версии OpenSSH с 5.5 по 7.6.

Как можно видеть в коде, приведенном ниже, если SFTP-сервер стартует с параметром –R, он будет включать переменную «readonly». Это означает, что клиентам не разрешено записывать операции.

 

 

 

 

int
sftp_server_main(int argc, char **argv, struct passwd *user_pw)
{
   ...
    while (!skipargs && (ch = getopt(argc, argv,
        "d:f:l:P:p:Q:u:cehR")) != -1) {
        switch (ch) {
    ...
        case 'R':
            readonly = 1;
            break;
    ...
}

Открытие файла для SFTP-сервера выполняется с помощью вспомогательной функции process_open(), которая открывает доступные только для чтения файлы:

static void
process_open(u_int32_t id)
{
    ...
    if (readonly &&
        ((flags & O_ACCMODE) == O_WRONLY ||
        (flags & O_ACCMODE) == O_RDWR) != 0)) {
        verbose("Refusing open request in read-only mode");
        status = SSH2_FX_PERMISSION_DENIED;
    } else {
        fd = open(name, flags, mode);
    ...
}

Здесь можно увидеть, что если «readonly» активирован, будет осуществляться проверка наличия «WRITE ONLY» или «READ/WRITE». Если это условие удовлетворено, будет выведена ошибка открытия файла в режиме read-only.

В противном случае файл будет открыт с использованием системного вызова open(). Залевски использовал эти параметры для создания произвольных read-only-файлов на SFTP-сервере. Чтобы исправить эту брешь, только для чтения. Чтобы исправить это, разработчики.

Код патча можно увидеть ниже:

if (readonly &&
-       ((flags & O_ACCMODE) == O_WRONLY ||
-       (flags & O_ACCMODE) == O_RDWR)) {
+       ((flags & O_ACCMODE) != O_RDONLY ||
+       (flags & (O_CREAT|O_TRUNC)) != 0)) {
        verbose("Refusing open request in read-only mode");

Уязвимость переполнения глобального буфера в zlib грозит DoS и даже RCE

В широко используемой библиотеке zlib выявлена критическая уязвимость, позволяющая через порчу памяти вызвать сбой программы (DoS). Ее также потенциально можно использовать для удаленного выполнения стороннего кода в системе.

Пока не решенной проблеме, классифицируемой как переполнение буфера в глобальной памяти, присвоен идентификатор CVE-2026-22184. Поскольку эксплойт тривиален, степень опасности уязвимости была оценена в 9,3 балла по шкале CVSS.

Катастрофическая ошибка возникает при запуске утилиты untgz, а точнее, при выполнении функции TGZfname(), отвечающей за обработку имен архивных файлов, вводимых через консоль.

Как оказалось, уязвимый код не проверяет длину ввода перед копированием. Когда она превышает 1024 байт, происходит запись за границей буфера, что приводит к нарушению целостности памяти.

Проблему усугубляет тот факт, что untgz отрабатывает до парсинга и валидации архива. Эксплойт в данном случае не требует создания вредоносного файла со сложной структурой, достаточно лишь передать длинное имя в качестве аргумента командной строки.

Уязвимости подвержены все сборки zlib до 1.3.1.2 включительно. В качестве временной меры защиты админам и разработчикам рекомендуется ограничить использование untgz либо вовсе удалить соответствующий пакет до появления пропатченной версии.

RSS: Новости на портале Anti-Malware.ru