Gitlab

Gitlab checks

Search for secrets

#Scan repo
docker run -v "$PWD":/scan ghcr.io/praetorian-inc/noseyparker:latest scan .
#Get results
docker run -v "$PWD":/scan ghcr.io/praetorian-inc/noseyparker:latest report

Reconnaissance

Check public repositories

  • membership=true — только проекты, где ты участник

  • per_page=100 — увеличивает количество результатов (GitLab по умолчанию возвращает 20)

Route /explore allow to go behind the login panel

Abusing GitLab token

Token prefixes

The following table shows the prefixes for each type of token.

Token name
Prefix

Personal access token

glpat-

OAuth Application Secret

gloas-

Impersonation token

glpat-

Project access token

glpat-

Group access token

glpat-

Deploy token

Runner authentication token

glrt- or glrtr- if created via registration token

CI/CD Job token

glcbt- • (Introduced in GitLab 16.8 behind a feature flag named prefix_ci_build_tokens. Disabled by default.) • (Generally available in GitLab 16.9. Feature flag prefix_ci_build_tokens removed.)

Trigger token

glptt-

Feed token

glft-

Incoming mail token

glimt-

GitLab agent for Kubernetes token

glagent-

GitLab session cookies

_gitlab_session=

SCIM Tokens

glsoat- • (Introduced in GitLab 16.8 behind a feature flag named prefix_scim_tokens. Disabled by default.) • (Generally available in GitLab 16.9. Feature flag prefix_scim_tokens removed.)

Feature Flags Client token

glffct-

Get variables from projects

define count pages and replace max page in seq. First take all projects id

Then try get var

Also try get gitlab-group vars (мне пока лень)

Abusing GitLab Runners

Script for steal tasks by requesting them faster than a real runner - https://github.com/Frichetten/gitlab-runner-research

Check projects access level

  • membership=true — только проекты, где ты участник

  • per_page=100 — увеличивает количество результатов (GitLab по умолчанию возвращает 20)

Уровни доступа:

  • 10 — Guest (только чтение)

  • 20 — Reporter (чтение + доступ к CI/CD)

  • 30 — Developer (чтение + запись + запуск CI/CD)

  • 40 — Maintainer (полный доступ, кроме удаления проекта)

  • 50 — Owner (полный доступ)

Get current user

Groups abuse

CI Abuse

Exec code in runner

Exec code in runner service

Services can also have privileged containers

Postexploit

Get all ci_variables from filesystem gitlab instance.

Way 1. open gitlab-rails console

then enter script

Way 2. Read encrypted vars from db

read aes key for decryption

then decrypt it 😄 AES-256-CBC algo

Last updated