Сообщить об инциденте
Сообщить об инциденте
Критические RCE-уязвимости в GitLab CE/EE модуля Onigmo
Публикации
Назад

Критические RCE-уязвимости в GitLab CE/EE модуля Onigmo

Бюллетень
Полная компрометация системы, выполнение произвольного кода

Скачать Бюллетень ИБ

Название документа: Критические RCE-уязвимости в GitLab CE/EE модуля Onigmo

Дата распространения: 2026-10-23

Идентификатор: AM-2026-ALE-1023-02 Описание угроз CVE-2026-110264

Описание угроз

CVE-2026-110264

CVSSv3: 10.0, AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H

Объект уязвимости: Модуль обработки .org-файлов регулярных выражений Onigmo

Требования к атакующему: Удаленный неаутентифицированный

Максимальный результат атаки: Выполнение произвольного кода

Источник уязвимости: Недостаточная фильтрация данных при обработке .org-файлов модулем Onigmo. При рендеринге .org-файла, содержащего одно из ключевых слов "#+TODO"/"#+SEQ_TODO"/"#+TYP_TODO", используемые внутри регулярные выражения не проходят проверки на количество повторений. Обработка регулярного выражения, содержащего более 32767 повторов, приводит к переполнению и записи кода за границами области памяти

Сценарий атаки: Злоумышленник должен отправить специально сформированный POST-запрос к конечному адресу "/api/v4/projects/", предназначенному для создания org-контента. Запрос должен содержать .org-файл, внутри которого используется ключевое слово "#+TODO:" вместе с регулярным выражением вида "(?:…){0,n}" 

На что направлены

  • GitLab CE/EE версии с 7.0 по 18.11.13
  • GitLab CE/EE версии с 19.0 по 19.0.10
  • GitLab CE/EE версии с 19.1 по 19.1.9
  • GitLab CE/EE версии с 19.2 по 19.2.9
  • GitLab CE/EE версии с 19.3 по 19.3.6
  • GitLab CE/EE версии с 19.4 по 19.4.3
  •  GitLab CE/EE версии с 19.5 по 19.5.1

Меры противодействия

Провести обновление GitLab CE/EE до исправленных версий 18.11.13 / 19.0.10 / 19.1.9 / 19.2.9 / 19.3.6 / 19.4.3 / 19.5.1

Провести аудит системы детектирующими Sigma-правилами, выпущенными GitLab:

Провести аудит логов системы на наличие ошибок в следующих файлах:
  • "/var/log/gitlab/puma/puma_stderr.log"
  • "/var/log/gitlab/gitlab-rails/exceptions_json.log"
  • "production_json.log"

Пример ошибки:

  • отображаемой в событии для "puma_stderr.log":
    org-ruby-0.9.12/lib/org-ruby/headline.rb:100: [BUG] Segmentation fault at 0x0000000000000008 ruby 3.3.12 (2026-07-16 revision 0581089df9) [x86_64-linux] -- Ruby level backtrace information ---------------------------------------- orgruby/parser.rb:127:in `initialize' org-ruby/headline.rb:100:in `parse_keywords' org-ruby/headline.rb:100:in `sub!' -- C level backtrace information --------------- ---------------------------- ruby(rb_bug_for_fatal_signal ...) ruby(match_at+0x26f0 ...) ruby(onig_search_gpos+0x630 ...) ruby(rb_reg_search_set_match ...) ruby(rb_str_sub_bang+0x140 ...)
  • отображаемой в событии для "exceptions_json.log":
    {"severity":"ERROR","time":"2026-10-
    16T03:02:36.429Z","correlation_id":"01K8QODHELP0000SYNTHETIC50","meta.caller_id":"
    Projects::BlobController#show","meta.feature_category":
    "source_code_management",
    "meta.project":"examplegroup/pub","meta.client_id":"ip/203.0.113.50",
    "meta.remote_ip":"203.0.113.50","exc
    eption.class":"Timeout::Error","exception.message":"execution
    expired","exception.cause_class":"Timeout::ExitException","user.username":null,"ex tra.project_id":42,"extra.class_name":"OtherMarkup","extra.file_name":"p0.org"}

Пример события:

  • отображаемого в "exceptions_json.log":
    {"method":"POST","path":"/example-group/app/- /blob/main/README.md/preview","format":"json","controller":"Projects::BlobControll er","action":"preview","status":200,"time":"2026-10- 16T03:12:03.118Z","params":[{"key":"file_path","value":"payload.org"},{"key":"cont ent","value":"[FILTERED]"}],"correlation_id":"01K8QODHELP0000SYNTHETIC51","meta.ca ller_id":"Projects::BlobController#preview","meta.feature_category":"source_code_m anagement","meta.project":"examplegroup/app","meta.client_id": "user/42","meta.remote_ip":"198.51.100.23","remote_ip" :"198.51.100.23","ua":"python-requests/2.32","duration_s":0.40}

Данные примеры могут свидетельствовать о попытке эксплуатации уязвимости в системе.

В случае отсутствия возможности оперативного обновления или применения указанных настроек ограничить публичную видимость и сетевой доступ к GitLab от внешней сети (Интернет)

Использовать правило ViPNet IDS NS:

3438098 "AM EXPLOIT GitLab CE/EE < v19.5.1 RCE via Onigmo .orgfile (CVE-2026-110264)"

Описание угроз

CVE-2026-97229

CVSSv3: 10.0, AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H

Объект уязвимости: Модуль обработки регулярных выражений Onigmo функции CI lint

Требования к атакующему: Удаленный неаутентифицированный

Максимальный результат атаки: Выполнение произвольного кода, полная компрометация

Источник уязвимости: Недостаточная проверка входных данных модулем Onigmo при работе функции CI lint. При проверке файла ".gitlab-ci.yml" происходит компиляция регулярного выражения, хранящегося в поле "include.rules.exists.regexp". Обработка регулярного выражения, содержащего более 57805 повторов, приводит к переполнению и записи кода за границами области памяти

Сценарий атаки: Злоумышленник должен предварительно разместить файл ".gitlab-ci.yml", содержащий вредоносную конфигурацию CI/CD в публичном репозитории. Затем отправить специально сформированный GET-запрос к конечному адресу "/api/v4/projects/{project_id}/ci/lint/" с параметром "content_ref"

На что направлены

  • GitLab CE/EE версии с 19.2.0 по 19.2.8
  • GitLab CE/EE версии с 19.3.0 по 19.3.5
  • GitLab CE/EE версии с 19.4.0 по 19.4.2

Меры противодействия

Провести обновление GitLab CE/EE до исправленных версий 19.2.8 / 19.3.5 / 19.4.2

Провести аудит системы детектирующими Sigma-правилами, выпущенными GitLab:

Провести аудит логов системы на наличие ошибок в следующих файлах:

  • "/var/log/gitlab/puma/puma_stderr.log"
  •  "/var/log/gitlab/gitlab-rails/api_json.log"

Пример ошибки:

  • отображаемой в событии для "puma_stderr.log":
    org-ruby-0.9.12/lib/org-ruby/headline.rb:100: [BUG] Segmentation fault at 0x0000000000000008 ruby 3.3.12 (2026-07-16 revision 0581089df9) [x86_64-linux] -- Ruby level backtrace information ---------------------------------------- orgruby/parser.rb:127:in `initialize' org-ruby/headline.rb:100:in `parse_keywords' org-ruby/headline.rb:100:in `sub!' -- C level backtrace information --------------- ---------------------------- ruby(rb_bug_for_fatal_signal ...) ruby(match_at+0x26f0 ...) ruby(onig_search_gpos+0x630 ...) ruby(rb_reg_search_set_match ...) ruby(rb_str_sub_bang+0x140 ...)
  • отображаемой в событии для "api_json.log":
    {"time":"2026-10- 16T02:55:07.420Z","severity":"ERROR","status":500,"method":"POST","path":"/api/v4/ projects/123456/ci/lint","params":[{"key":"content","value":"[FILTERED]"},{"key":" dry_run","value":true}],"host":"gitlab.example.com","remote_ip":"203.0.113.50","ua ":"pythonurllib/3.13","route":"/api/:version/projects/:id/ci/lint","user_id": 42,"username":"jdoe","token_type":"PersonalAccessToken","correlation_id": "01K8QODHELP0000SYNTHET IC11","meta.caller_id":"POST /api/:version/projects/:id/ci/lint","meta.remote_ip":"203.0.113.50","meta.feature_ category":"pipeline_composition","meta.user":"jdoe","meta.client_id":"user/42","me ta.project":"example-group/app","content_length":"112"}

Провести аудит логов системы на наличие информационных событий в следующих файлах:

  • "/var/log/gitlab/gitlab-rails/graphql_json.log"
  • "production_json.log" по пути "/var/log/gitlab/gitlab-rails/"
  • "/var/log/gitlab/gitlab-rails/application_json.log"

Пример события:

  • отображаемого в "graphql_json.log":
    {"severity":"INFO","time":"2026-10- 16T04:32:27.236Z","correlation_id":"01K8QODHELP0000SYNTHETIC60","meta.caller_id":" graphql:unknown","meta.feature_category":"not_owned","meta.remote_ip":"203.0.113.5 0","meta.user":"jdoe","meta.client_id":"user/42","operation_name":"q","is_mutation ":false,"variables":"{\"pp\"=>\"example-group/app\", \"c\"=>\"test-job:\\n script: echo ok\\n rules:\\n - exists:\\n regexp: \\\"(?:(a)|(?:[[:alpha:]][[:alpha:]][[:alpha:]][[:alpha:]]){96000,}b)\\\"\\n\"}"," query_string":"query q($pp: ID!, $c: String!) { ciLint(projectPath: $pp, content: $c, dryRun: true) { config { errors status } } }","token_type":"PersonalAccessToken"}
  • отображаемого в событии для "production_json.log":
    {"method":"GET","path":"/example-group/app/- /blob/main/axxxxxxxxxxxxxxxxxx%C3%A9","format":"json","controller":"Projects::Blob Controller","action":"show","status":200,"time":"2026-10- 16T02:50:11.004Z","params":[{"key":"viewer","value":"rich"},{"key":"id","value":"m ain/axxx...%C3%A9"}],"correlation_id":"01K8QODHELP0000SYNTHETIC20","meta.caller_id ":"Projects::BlobController#show","meta.feature_category":"source_code_management" ,"meta.project":"examplegroup/app","meta.client_id":"user/42","meta.remote_ip": "203.0.113.50","remote_ip": "203.0.113.50","ua":"python-urllib/3.13","duration_s":0.21}
  • отображаемого в событии для "application_json.log":
    {"severity":"WARN","time":"2026-10- 16T03:08:26.848Z","correlation_id":"01K8QODHELP0000SYNTHETIC01","meta.caller_id":" CreatePipelineWorker","meta.remote_ip":"203.0.113.50","meta.feature_category":"pip eline_composition","meta.user":"jdoe","meta.gl_user_id":42,"meta.project":"example -group/app","meta.root_namespace":"examplegroup","meta.client_id": "user/42","meta.organization_id":1,"class_name":"Gitlab::C i::Build::Rules::Rule::Clause::RegexpMatcher","message":"rules:exists regexp match timed out","project_id":123456,"extra":{"regexp":"(?:(a)|(?:[[:alpha:]][[:alpha:]][[:alp ha:]][[:alpha:]]){96(?#x)000,}b)"}}

Данные примеры могут свидетельствовать о попытке эксплуатации уязвимости в системе

Ограничить список пользователей, которые могут создавать или вносить изменения в учетные записи, репозитории и персональные токены для доступа к GitLab

В случае отсутствия возможности оперативного обновления или применения указанных настроек ограничить публичную видимость и сетевой доступ к GitLab от внешней сети (Интернет)

Использовать правило ViPNet IDS NS:

  • 3438008 "AM EXPLOIT Possible GitLab CE/EE < v19.4.2 RCE (CVE2026-97229)"

Ссылки на источники

Все публикации