# L2 secrets triage — gitlab.vdss.com.vn (2026-08-10)

Coverage: 91/91 projects blob search (11 patterns), 26 groups + instance CI vars
(+ runners). Read-only. Source: L2_blobs.json (83 raw hits → 15 interesting →
the distinct secrets below), L2_civars.json.

## CI/CD variables — EMPTY (finding, not error)
`/api/v4/projects/:id/variables` for ALL 91 projects, ALL 26 groups, and
`/api/v4/admin/ci/variables` returned HTTP 200 `[]`. **Zero CI vars defined.**
`/api/v4/runners/all` = `[]` — **zero runners registered.**
Consequence: no CI-secret surface; the runner-registration RCE path (L3) is
wide open (no existing runners, fresh instance_type registration token would
yield a `glrt-` runner token with no contention).

## Real secrets (verified in-repo, no-masking)

### F1 — Hardcoded DB credentials (Spring application-*.properties)
| Service | DB | Host | User | Password |
|---|---|---|---|---|
| dance/service/dace-mail (dev) | PostgreSQL mail_noti | 172.31.2.15:5432 | mail | mAIl@2025@# |
| dance/service/dace-mail (uat) | PostgreSQL push_noti | 14.225.11.28:5432 | noti | nOTI@2025@# |
| parking/backend/parking-payment (dev) | MariaDB car_parking | 172.31.2.15:3306 | parking | pArKing@2025@# |
| parking/backend/parking-mail (dev) | MariaDB parking_mail | 172.31.2.15:3306 | parking | pArKing@2025@# |

Note: 172.31.2.15 is RFC1918 (internal) — direct DB access needs a pivot;
14.225.11.28 is a PUBLIC VN IP (UAT Postgres exposed — probe candidate, L3-gated).
Passwords follow a predictable `word@YYYY@#` pattern (mAIl/nOTI/pArKing@2025@#)
→ password-spraying material for sibling services.

### F2 — OAuth2 client secret + Keycloak (merchantx/ma-service)
`cicd/tanzu-uat/L01/configmap-k8s/application-dev.properties`:
- oauth2.access-token-uri = http://10.1.27.43:8831/auth/realms/ms-core/.../token (Keycloak, internal)
- oauth2.clientId = ob_user1
- oauth2.clientSecret = c1ef48ee-39dd-4801-97a4-efd3ed733003
- pg-mm.url = http://10.215.254.146:10743/mb-pg-mm

### F3 — SUPPLY-CHAIN SIGNAL: merchantx = MB Bank
`merchantx/ma-service` Java package = **com.mbbank** and Jenkinsfile references
`helm-template-mbbank-argocd-prod`, harbor `dev-paygate-be`, argocd
`argocd-helm-tanzu-dev-L01`. MB Bank is one of Vietnam's largest banks.
=> VDSS GitLab hosts MB Bank paygate backend code — client identity in the
source OUT-TIERS the host company (per skill pitfall: client names in L2
re-score the target upward). Finance x2.

## Noise (not findings)
- OAuth2Client.java / auth_repo.dart / api_endpoints.dart — code-level token
  *variables* and API path constants, not live secrets.
- utils.dart AppSecureStorage commented snippets — placeholder, no value.

## Vectors (status)
- V1 [LIVE] GitLab instance admin (truonglt) — full read of 91 private repos.
- V2 [LIVE] Source-code exfil of MB Bank paygate backend (merchantx/*) + all
  VDSS products (poms, parking, bcy, dance, morning, vdoc, epass, vcm).
- V3 [GATED-L3] Runner-registration RCE (no runners exist; 17.9.2 path works).
- V4 [GATED-L3] UAT Postgres 14.225.11.28:5432 noti/nOTI@2025@# — public IP probe.
- V5 [PIVOT] Internal DB 172.31.2.15 (pg+mariadb) — needs in-network pivot.
- V6 [PIVOT] Keycloak 10.1.27.43:8831 realm ms-core, client ob_user1 secret.
