Профиль: Аноним (вход | регистрация) неRU opennet.me  
OpenNET

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

Уязвимость в Ruby, эксплуатируемая для удалённого выполнения кода в GitLab

26.10.2026 09:57 (MSK)

Опубликованы корректирующие выпуски языка программирования Ruby 3.3.13, 3.4.12 и 4.0.9, в которых устранена критическая уязвимость (CVE-2026-110264), приводящая к целочисленному переполнению при компиляции специально оформленных регулярных выражений. Уязвимость может использоваться для атаки на проекты, написанные на языке Ruby и использующие внешние данные в регулярных выражениях. Среди прочего, подтверждена возможность эксплуатации уязвимости для удалённого выполнения кода в платформе совместной разработки GitLab. Проблема дополнительно блокирована в обновлениях GitLab 19.5.1, 19.4.3, 19.3.6, 19.2.9, 19.1.9, 19.0.10 и 18.11.13. Уязвимости присвоен уровень опасности 10 из 10.

Уязвимость присутствует в движке регулярных выражений Onigmo и приводит к переполнению внутренних идентификаторов при компиляции шаблона с большим числом повторов. Проблема проявляется только в приложениях, использующих внешние данные в регулярных выражениях, обрабатываемых через методы Regexp.new, Regexp.union и Regexp.compile или литералы вида "/#{input}/". Ограничение размера регулярного выражения или времени его обработки через метод Regexp.timeout не блокирует уязвимость, так как для атаки могут использоваться короткие шаблоны.

В GitLab уязвимость может быть эксплуатирована неаутентифицированным пользователем из-за подстановки в регулярное выражение внешних данных. Детали метода эксплуатации пока не раскрываются (по правилам GitLab информация становится доступна спустя 30 дней после публикации исправления), при этом в сети уже фиксируются попытки осуществления атак на пользователей GitLab. Косвенными признаками осуществления атаки может служить увеличение числа аварийных завершений интерпретатора Ruby и рост ошибок в логах, связанных с истечением таймаута на отрисовку страницы при обработке org-файлов.

Помимо CVE-2026-110264 в движке регулярных выражений устранены ещё три уязвимости: CVE-2026-89078 (двойное освобождение памяти при невозможности парсинга шаблона после его изменения), CVE-2026-93577 и CVE-2026-97229 (целочисленные переполнения при расчёте размера компилируемого шаблона).

  1. Главная ссылка к новости (http://www.ruby-lang.org/en/ne...)
  2. OpenNews: Опубликован язык программирования Ruby 4.0
  3. OpenNews: Уязвимость в GitLab, допускающая удалённое выполнение кода (доступен эксплоит)
  4. OpenNews: Уязвимость в RubyGems.org, позволяющая подменить чужие пакеты
  5. OpenNews: Уязвимость в Ruby-SAML, позволяющая обойти аутентификацию в GitLab
  6. OpenNews: Уязвимость в библиотеке ruby-saml, приводящая к обходу аутентификации в GitLab
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/66549-ruby
Ключевые слова: ruby, gitlab
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (32) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.3, FSA (ok), 10:58, 26/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/–
    Забавно. Где-то была диаграмма популярности языков для веба. На первом месте был PHP с 70%. А на втором Ruby. Но когда нашли уязвимость в PHP - все стояли на ушах. А тут вообще всем пофигу :-D
     
     
  • 2.14, Аноним (14), 11:32, 26/10/2026 [^] [^^] [^^^] [ответить]  
  • +3 +/–
    А когда найдут дырень в расте, все скажут "да ладно, это вообще ерунда о которой даже думать не надо!"
     
  • 2.32, Аноним (32), 13:03, 26/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    да просто немного найдется проектов, которые позволяют выполнять регулярное выражение, полученное из пользовательского ввода
     

  • 1.4, Аноним (4), 11:02, 26/10/2026 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • –1 +/–
     
  • 1.5, Аноним (5), 11:08, 26/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/–
    ONIGERR_TOO_MANY_NULL_CHECK  - по моему тут опечатка в коде
     
     
  • 2.7, Аноним (7), 11:16, 26/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Борьба с master/slave продолжается.
     
  • 2.9, Аноним (9), 11:19, 26/10/2026 Скрыто ботом-модератором     [к модератору]
  • +1 +/–
     
  • 2.17, Жироватт (ok), 11:47, 26/10/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/–
    NIGGER_NIGGA_NIGGA_TOO_MANY_NULL_CHECK
    Поправил
     

  • 1.6, Аноним (7), 11:13, 26/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/–
    > GitLab для удалённого выполнения кода в Ruby.

    Поправил.

     
  • 1.8, Аноним (9), 11:18, 26/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/–
    > двойное освобождение памяти
    > целочисленные переполнения

    и RCE 10 из 10 как вишенка на тортике сишного булщит бинго в безопасном руби))

    "С in CVE stands for C language" (c)

     
     
  • 2.10, Аноним (7), 11:24, 26/10/2026 Скрыто ботом-модератором     [к модератору]
  • +1 +/–
     
     
  • 3.13, Аноним (13), 11:28, 26/10/2026 Скрыто ботом-модератором     [к модератору]
  • –1 +/–
     
  • 2.19, Аноним (19), 11:54, 26/10/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/–
    Т.е. в том что динамический ЯП со сборщиком мусора дырявый виноват Си? А если в расте будет бага, это виноват С++ потому что LLVM написан на нем?
     
     
  • 3.25, Аноним (25), 12:09, 26/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    > Т.е. в том что динамический ЯП со сборщиком мусора дырявый виноват Си?

    Кто же интересно дожен быть виноват, если исправления в onigmo.h, regcomp.c и regerror.c?
    В динамический ЯП со сборщиком мусора или в убогом недоязычке?

    > А если в расте будет бага, это виноват С++ потому что LLVM написан на нем?

    rustc написан на расте. Если бага будет там - то виноват раст.
    Если в LLVM - то с++.

     

  • 1.11, Аноним (11), 11:24, 26/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/–
    Вот что надо было на расте переписывать все это время!
     
  • 1.12, Аноним (13), 11:27, 26/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/–
    > int num_repeat;                /* OP_REPEAT/OP_REPEAT_NG id-counter */
    > int num_null_check;            /* OP_NULL_CHECK_START/END id counter */

    А кто-то может пояснить, почему счетчики сделаны int, а не unsigned int как это сделано несколькими строчками ниже?

    В чем был хитрый план? Прокидывать ошибки через отрицательные значения?

     
     
  • 2.16, Аноним (16), 11:42, 26/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Да, в убогих недо-язычках из 70х нет нормального средства передачи ошибок.
    Поэтому приходится нарушать "применение типов" и лепить типы данных которые избыточны.

    В одной из недавних дыреней в libxml2 (после которой гугл выкинул ее их хрома), для размера рассчитываемого буфера использовали signed переменную.
    Чтобы функция могла вернуть ошибку -1.

    Ну а так как каст таких типов происходит неявно - то вот и читаем регулярно про очередную дыру.

     
     
  • 3.18, Аноним (7), 11:48, 26/10/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/–
    Го сейчас напряглось, идеоматически.
     
     
  • 4.23, Аноним (23), 12:04, 26/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    > Го сейчас напряглось, идеоматически.

    У Го как бы есть тип error.
    И прям в официальном примере есть как его использоваться

    func Open(name string) (file *File, err error)
    f, err := os.Open("filename.ext")

     
     
  • 5.31, Аноним (5), 12:53, 26/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    а что ж ты не упомянут if err != nil в следующей строке, которая всем мозолит глаза )
     
  • 3.20, Аноним (19), 11:55, 26/10/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/–
    > Да, в убогих недо-язычках из 70х нет нормального средства передачи ошибок.

    А нормальные это какие? Можешь показать пример?

     
     
  • 4.24, Аноним (5), 12:07, 26/10/2026 Скрыто ботом-модератором     [к модератору]
  • +/–
     
     
  • 5.27, Аноним (19), 12:27, 26/10/2026 Скрыто ботом-модератором     [к модератору]
  • +/–
     
  • 4.28, Аноним (-), 12:38, 26/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Конечно.
    ADA (и ADA Spark).
    Из известных факапов - только Ариан5.
    И то по причине долбанутости менеджеров "давайте перенесем код без тестирования".

    Из "не языков", а сторонних инструментов - CompCert.
    Компилятор для СИ, сделанный для формальной верификации. Соответствует DAL A – DAL D.
    Из минусов - он не поддерживает стандарт полностью, как и всякие гну-расширения от васянов.
    Ну и не делает агрессивные оптимизации - так что код будет медленнее.

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

     

  • 1.15, Аноним (15), 11:41, 26/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/–
    > Уязвимость в Ruby, эксплуатируемая для удалённого выполнения кода

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

     
  • 1.21, Аноним (21), 11:57, 26/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/–
    Кстати, а что там с актуальностью руби в бэкенде? Он таки смог пережить наплыв ноды и го в rest api или нет?
     
     
  • 2.22, Аноним (5), 12:04, 26/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    большие проекты вроде живут, тот же гитлаб например. но новые думаю никто не начинает уже.
     

  • 1.26, Аноним1234 (?), 12:24, 26/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/–
    Писали бы gitlab на ржавом - не было бы проблем.
     
     
  • 2.29, Аноним (-), 12:40, 26/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Зачем?
    Если в условном ржавом взять такую же СИшную дырявую либу, то результат мог получиться таким же.
    Надеятся что ржа где-то на уровне выше отловит ошибку и брякнется, я бы не стал.

    Вывод должен быть скорее "либы используемые в важных проектах должны писаться с использованием надежных инструментов".
    И ржа далеко не единственный вариант.

     
  • 2.30, пох.. (?), 12:50, 26/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    конечно не было бы - нет кода, нет и проблем.

    Но, кстати, никогда не поздно начать переписывать!

     
     
  • 3.34, Аноним (34), 13:07, 26/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Так код то есть.
    Вон в андроиде 5+ лямов строк каст кода (ты наверное об этом не знаешь, так как радyжные чаще пользуются айфонами).
    В хроме дырявый сишные либы (либхмл, фонты) заменяют на растовые.


     
  • 2.33, Anon789 (?), 13:07, 26/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Тем временем uutils/coreutils...
     

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



    XSQUARE
    Inferno Solutions
    Hosting by Hoster.ru
    Хоcтинг: