The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Удалённое выполнение кода в форке почтового сервера qmail от проекта Sagredo

19.04.2026 11:55 (MSK)

В развиваемом проектом Sagredo форке почтового сервера qmail выявлена уязвимость (CVE-2026-41113), позволяющая добиться удалённого выполнения произвольных команд на сервере с правами пользователя qmailr. Уязвимость вызвана отсутствием экранирования спецсимволов в имени хоста, возвращаемого DNS-сервером при определении MX-шлюза, в сочетании с передачей полученного имени в команду popen без должного разделения и фильтрации аргументов при вызове shell. Уязвимость устранена в выпуске 2026.04.07. В открытом доступе опубликован инструментарий для эксплуатации уязвимости.

В октябре 2024 года проект Sagredo внёс в утилиту qmail-remote изменение, добавляющее функцию "notlshosts_auto", которая запоминает хосты с некорректной реализацией протокола TLS, с которыми не удаётся установить TLS-соединение, для предотвращения зацикливания заведомо сбойной отправки почты на подобные хосты.

Проблема в том, что сохранение имени хоста выполнялось через запуск командной оболочки при помощи функции popen() c аргументом "/bin/touch %s/control/notlshosts/'%s'" в который подставлялось имя MX-хоста, возвращённого DNS-сервером. Атакующий мог запустить свой DNS-сервер, возвращающий в DNS-записи MX имя вида "x'`id>/tmp/pwned`'y.evil.com", и добиться выполнения подставленного кода, создав условия для вызова функции сохранения имени сбойного почтового сервера. Уязвимость выявлена при помощи одного запроса к AI-ассистенту Claude.

  1. Главная ссылка к новости (https://www.openwall.com/lists...)
  2. OpenNews: Удалённо эксплуатируемая уязвимость в почтовом сервере qmail
  3. OpenNews: Представлен notqmail, форк почтового сервера qmail
  4. OpenNews: Автор qmail, D. J. Bernstein, изменил лицензию на все свои программы
  5. OpenNews: Найдено 3 уязвимости в qmail
  6. OpenNews: Три критические уязвимости в Exim, позволяющие удалённо выполнить код на сервере
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/65241-qmail
Ключевые слова: qmail, sagredo
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (28) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 12:14, 19/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > We Asked Claude to Audit Sagredo's qmail. It found a RCE.
    > "Find vulnerabilities in latest version of qmail: https://github.com/sagredo-dev/qmail. Focus on vulnerabilities that could result in RCE or system compromise by processing a crafted email."
    > That was the entire prompt.

    Очередное спасибо нейросетям.

     
     
  • 2.4, Аноним (4), 12:19, 19/04/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ни слова что уязвимый код добавил лично Jia Tan.
     
  • 2.6, Аноним (6), 12:41, 19/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    А так можно было? И никаких тебе "I'm sorry, but i can't" как у ChatGPT?
     
     
  • 3.9, Аноним (9), 13:40, 19/04/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    I'm sorry? but I'm too shy... 👉👈
     
     
  • 4.31, Аноним (31), 21:15, 19/04/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Sorry for what?
     
  • 3.26, Аноним (26), 18:22, 19/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > как у ChatGPT

    Этот кокретный ИИ генерирует плохой код.

     
  • 2.12, Аноним (12), 14:47, 19/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Пожалуйста!
     

  • 1.2, Аноним (2), 12:15, 19/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Шел 2026 год.
     
     
  • 2.25, Аноним (25), 17:51, 19/04/2026 [^] [^^] [^^^] [ответить]  
  • –3 +/
    ежики по прежнему использовали c/c++ и кололись, ужасное дырявое поделие древних людей уровня VBScript в древнем Internet Explorer
     
     
  • 3.32, Аноним (32), 21:29, 19/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Так это - компиляторы есть только у этих ваших устаревших немодных языков.
     
  • 3.33, Аноним (33), 21:30, 19/04/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    С какого боку тут именно "c/c++"? Вызов дочернего процесса без должного обезвреживания аргументов ни разу не есть отличительная особенность "c/c++".
     
  • 3.39, aname (ok), 01:15, 20/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Одно то, что тебя трясёт от C/C++ заставляет писать на нём
     

  • 1.3, Аноним (4), 12:18, 19/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Случайность.
     
     
  • 2.17, Аноним (17), 15:14, 19/04/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Уязвимость вызвана отсутствием экранирования спецсимволов

    Конечно случайность! Она у всех случается почему-то постоянно.

     
     
  • 3.21, Аноним (21), 15:38, 19/04/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Похоже ты начинаешь о чем-то догадываться. Но это не точно.
     

  • 1.5, Ю.Т. (?), 12:30, 19/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Есть же приличное развитие авторства фон Ляйтнера (@fefe). Зачем это Сагредо, где очевидно контроль над производством слабее?
     
     
  • 2.8, Ю.Т. (?), 13:15, 19/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Есть же приличное развитие авторства фон Ляйтнера (@fefe). Зачем это Сагредо, где
    > очевидно контроль над производством слабее?

    Мои извинения, не Ляйтнер, а Эрвин Хофман (@feh), перепутал ники.

     

  • 1.13, Аноним (12), 14:54, 19/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    С кем ассоциирована эта Sagredo?
     
  • 1.18, Аноним (18), 15:33, 19/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    У этого форка на гитхабе 18 звезд (аж восемнадцать!) какое он отношение к qmail имеет? Кто то его использует?
     
  • 1.22, albb (ok), 15:58, 19/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Зачем, зачем сохранять строку текста через вызов внешнего исполняемого файла? Или там тоже искусственный идиот постарался?
     
     
  • 2.24, Rev (ok), 17:47, 19/04/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Это же юникс-вей! Ничего ты не понимаешь! Программа должна собираться из кучи разнородных утилит!
     
  • 2.30, Аноним (30), 21:14, 19/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Или искусственный идиот. Или гуглил на стек оверфлоу, и сначала нашёл команду touch для создания пустого файла - что вполне логично, если пишешь на bash - а потом нашёл, как запустить системную команду из С/С++. popen как бы намекает.
    ----------------------
    Впрочем, есть у меня одна идея: если теоретически создание файла может занимать дофига времени (допустим, на глючном сетевом диске создаём), это может быть способ растянуть процесс. Можно было конечно сделать fork() или запустить в отдельном потоке, но если нужен ещё и контроль завершения процесса - вот вам, файловый дескриптор который будет доступен на чтение, когда процесс завершится.
     

  • 1.28, Аноним (28), 19:19, 19/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > https://man7.org/linux/man-pages/man2/open.2.html

    //man7.org/linux/man-pages/man3/popen.3.html

    unsigned long i = 0;

    if (control_readint(&i,"control/notlshosts_auto") && i)
    {
      struct passwd *info = getpwuid(getuid()); // get qmail dir
      FILE *fp;
      char acfcommand[1200];
      
      sprintf(acfcommand, "/bin/touch %s/control/notlshosts/'%s'", info->pw_dir, partner_fqdn);
      
      fp = popen(acfcommand, "r"); // <-------------------!!!!!
      
      if (fp == NULL)
      {
        out("Failed to run touch command ");
        exit(1);
      }
      
      pclose(fp);
    }

     
  • 1.29, Аноним (29), 20:49, 19/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >отсутствием экранирования спецсимволов в имени хоста, возвращаемого DNS-сервером при определении MX-шлюза, в сочетании с передачей полученного имени в команду popen без должного разделения и фильтрации аргументов при вызове shell.

    Таким людям надо пожизненно запрещать заниматься программированием на людом языке, хоть на Раст, хоть на Бэйсике.

     
  • 1.34, Аноним (33), 21:39, 19/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вот, ять, почему когла мне, ни разу не профессиональному программисту, а вовсе даже сисадмину, понадобилось написать небольшую программку, которая использовала функциональность некоей утилиты, я не поленился прочитать документацию на либу, на которой основана эта утилита, и изучить как подтягивать сишные либы в том языке, на котором надо было эту программу написать. И всё это - именно для того, чтобы избежать одного-единственного класса уязвимостей - того, который описан в новости.
    А профессиональные программисты пошут вот так, как они пишут.
    В этом же нет никакой принципиальной непреодолимой сложности - вместо вызова дочернего шелла подтянуть либу и дёргать её функции!
     
     
  • 2.36, Аноним83 (?), 21:52, 19/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Вот вероятно друго одмин и накодил это :)
     

  • 1.35, Аноним83 (?), 21:43, 19/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Потому что какакод. И пейсатель поди или древний или с другого языка свичнулся.
    touch - чтобы своё такое реализовать кода надо всего строчек менее 20 строчек:

    #include <sys/stat.h>
    static inline int
    touch_file(const char *filename) {
    int fd, rc;
    struct timespec ts[2];

    ts[0].tv_sec = ts[1].tv_sec = 0;
    ts[0].tv_nsec = ts[1].tv_nsec = UTIME_NOW;
    if (0 == utimensat(AT_FDCWD, filename, ts, 0))
    return (0);
    fd = open(filename, (O_WRONLY | O_CREAT), DEFFILEMODE);
    if (-1 == fd)
    return (errno);
    rc = futimens(fd, ts);
    close(fd);
    if (0 == rc)
    return (0);
    return (errno);
    }

    А дёргать целый запуск процесса ради такой ерунды на 1 / 4 сискола это просто нечто.

     
     
  • 2.37, Аноним (29), 22:07, 19/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >пейсатель поди или древний или с другого языка

    Если у человека уровень IQ < 40, то совершенно не имеет значения его возраст или на каком языке он пишет.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2026 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру