Критические 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:
- Onigmo native worker crash
- Graphql cilint hostile regexp
- ci regexp oversized non ascii path
- ci regexp guard rejection
- ci lint workhorse worker crash
- ci lint scripted client error burst
Провести аудит логов системы на наличие ошибок в следующих файлах:
- "/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)"
Ссылки на источники
- https://docs.gitlab.com/releases/patches/patch-release-gitlab-19- 5-1-released/
- https://gitlab.com/gitlab-security-oss/tldr/- /blob/main/Detections/platforms/GitLab/Vulnerability%20Detecti ons/onigmo_native_worker_crash.md?ref_type=heads#detection
- https://gitlab.com/gitlab-security-oss/tldr/- /blob/main/Detections/platforms/GitLab/Vulnerability%20Detecti ons/org_mode_render_error_burst.md?ref_type=heads#sampleevent-logs
- https://docs.gitlab.com/releases/patches/patch-release-gitlab-19- 4-2-released/
- https://gitlab.com/gitlab-security-oss/tldr/- /blob/main/Detections/platforms/GitLab/Vulnerability%20Detecti ons/graphql_cilint_hostile_regexp.md?ref_type=heads
- https://gitlab.com/gitlab-security-oss/tldr/- /blob/main/Detections/platforms/GitLab/Vulnerability%20Detecti ons/graphql_cilint_hostile_regexp.md?ref_type=heads
- https://gitlab.com/gitlab-security-oss/tldr/- /blob/main/Detections/platforms/GitLab/Vulnerability%20Detecti ons/ci_regexp_guard_rejection.md?ref_type=heads
- https://gitlab.com/gitlab-security-oss/tldr/- /blob/main/Detections/platforms/GitLab/Vulnerability%20Detecti ons/ci_lint_workhorse_worker_crash.md?ref_type=heads
- https://gitlab.com/gitlab-security-oss/tldr/- /blob/main/Detections/platforms/GitLab/Vulnerability%20Detecti ons/ci_lint_workhorse_worker_crash.md?ref_type=heads