Semua artikel
Ancaman6 menit baca

Crawler AI palsu sedang memburu file .env-mu. Begini cara mengeceknya

Line of friendly-looking robots walking past server racks while one shines a light on a locked folder with a key

Kalau belakangan kamu melihat access log dan menemukan banyak trafik "ClaudeBot" atau "ChatGPT", kamu mungkin mengira itu perusahaan AI yang sedang mengindeks situsmu. Sebagian mungkin memang begitu. Tapi porsi yang makin besar bukan: itu pemindai kredensial yang memakai name tag crawler AI, dan mereka mencari satu file khusus. File .env-mu.

Minggu ini, vendor manajemen bot Cequence menerbitkan riset tentang satu aktor yang berganti-ganti sekitar 32 identitas bot AI, termasuk nama milik OpenAI, Anthropic, Meta dan Perplexity. Pada satu hari di bulan Oktober, aktor ini menjangkau 48% organisasi yang dilindungi Cequence yang menerima trafik bot AI sama sekali. Ia tidak meng-crawl konten. Ia meminta sekitar 90 path file tempat rahasia biasanya disimpan: file .env, file kredensial cloud, SSH private key dan data environment server.

Hampir semua request itu diblokir atau gagal, dan belum ada laporan pembobolan. Itu kabar baik bagi pelanggan Cequence. Pertanyaan untukmu lebih sederhana: kalau salah satu bot ini mengunjungi aplikasimu hari ini, apakah ia mendapat 404 atau Stripe key-mu?

Apa yang sedang terjadi

Tiga laporan terpisah dari beberapa bulan terakhir menunjuk ke arah yang sama.

  • Cequence (terbit 28 Okt): satu pemindai, ~32 identitas AI palsu, aktif setidaknya dari akhir September hingga akhir Oktober. Setiap alamat cloud menembakkan 50 sampai 190 request dalam sekitar delapan detik lalu berpindah. Ia memakai lebih dari 300 alamat dalam satu hari, dan tidak satu pun alamat dari akhir September muncul lagi sebulan kemudian. Laporan CSO Online mencatat bahwa rotasi seperti ini membuat blocklist IP statis jauh kurang berguna.
  • GreyNoise (Agustus): klaster lain menyamar sebagai 13 crawler AI dari 824 alamat, tidak satu pun berada di dalam rentang IP yang dipublikasikan perusahaan-perusahaan itu. Path yang paling sering diminta terbaca seperti daftar setiap tempat framework mungkin meninggalkan rahasia: /.env, /app/.env, /api/.env, /backend/.env, /.env.local, /.env.production, /.env.bak, /.aws/credentials. Bot palsu itu tidak sekali pun meminta /robots.txt. Crawler asli Anthropic memintanya, dan tidak pernah meminta file kredensial.
  • Symantec, lewat Help Net Security (23 Okt): sebuah honeypot yang menyamar sebagai layanan AI tanpa proteksi menangkap agen otonom milik penyerang yang sedang bekerja. Prompt jailbreak-nya mengatakan kepada model bahwa membaca file .env, API key dan skema database adalah pekerjaan development biasa. Sebagian besar dari 127.000+ request yang dicatat honeypot itu adalah pengintaian, percobaan key curian dan probe untuk file konfigurasi yang terekspos.

Polanya jelas. Penyerang tahu pemilik situs mulai memasukkan crawler AI ke allowlist, jadi mereka meminjam nama-nama itu. Dan mereka tahu API key AI bernilai uang sungguhan: key OpenAI, Anthropic atau Gemini yang bocor bisa menghasilkan tagihan besar sebelum kamu menyadarinya.

Kenapa builder yang ship cepat harus peduli

String user agent hanyalah header yang ditulis pengunjung tentang dirinya sendiri. Ia tidak membuktikan apa pun. Kalau setup hosting, aturan CDN atau WAF-mu meloloskan "bot AI yang dikenal", kamu mungkin sudah membuka pintu persis untuk trafik seperti ini.

Yang lebih penting, yang sedang diburu adalah kesalahan klasik di aplikasi yang di-ship dengan cepat. File .env berakhir di web root karena proses build menyalin seluruh folder proyek. Sebuah .env.production.bak tertinggal setelah perbaikan larut malam. Image Docker menyajikan /app sebagai file statis. Tidak satu pun butuh exploit canggih. Cukup satu request GET, dan bot tidak peduli apakah itu request pertama atau kesembilan puluhnya.

File .env yang terekspos: kenapa file ini begitu berharga bagi penyerang

Cara mengecek aplikasimu

Mulailah dari path yang benar-benar diminta para pemindai. Jalankan loop di bawah dari terminal, dengan domainmu sendiri.

Yang ingin kamu lihat adalah 404 atau 403 di setiap baris. Status 200 berarti masalah, tapi cek isinya dulu sebelum panik: banyak single-page app mengembalikan index.html dengan 200 untuk path apa pun yang tidak dikenal. Jalankan curl -s https://yourapp.com/.env | head -5 dan lihat apa yang kembali. Kalau kamu melihat baris KEY=value, anggap setiap rahasia di file itu sudah bocor.

for p in .env .env.local .env.production .env.bak .env.old \
         app/.env api/.env backend/.env .aws/credentials .git/config; do
  code=$(curl -s -o /dev/null -w "%{http_code}" "https://yourapp.com/$p")
  echo "$code  /$p"
done

Sekalian, cek kebocoran terkait yang membocorkan rahasia yang sama lewat jalur lain:

  • Direktori .git yang bisa diakses memungkinkan siapa pun membangun ulang source code-mu, termasuk .env apa pun yang pernah di-commit.
  • Key di bundle JavaScript-mu bahkan tidak butuh pemindai. Buka DevTools dan cari sk-, AIza atau key di bundle.
  • Source map di production bisa ikut mengirim source code aslimu, lengkap dengan komentarnya.
Direktori .git yang terekspos: cara penyerang membangun ulang source code-mu

Lalu cek log-mu. Cari request ke /.env atau /.aws/credentials. Kalau ada yang mengembalikan 200, itulah waktu mulai insidenmu.

Cara memperbaikinya

1. Keluarkan rahasia dari web root. Perbaikan sebenarnya adalah file itu memang tidak ada untuk disajikan. Environment variable tempatnya di pengaturan host-mu (Vercel, Netlify, Railway, Fly dan lainnya semua menyediakannya), bukan di file yang ikut ter-deploy bersama aset statis. Pastikan .env* ada di .gitignore dan .dockerignore.

2. Blokir dotfile di server sebagai lapisan cadangan. Untuk nginx:

# Deny all hidden files except the ACME challenge path
location ~ /\.(?!well-known) {
    deny all;
    return 404;
}

Untuk Apache (.htaccess):

<FilesMatch "^\.">
    Require all denied
</FilesMatch>

Untuk aplikasi Express yang menyajikan file statis, express.static mengabaikan dotfile secara default. Jangan menimpanya dengan dotfiles: 'allow'.

3. Rotasi semua yang pernah terekspos. Menghapus file tidak membuat key yang bocor jadi aman lagi. Rotasi setiap rahasia yang pernah bisa diakses, dimulai dari key pembayaran, database dan penyedia AI. Artikel kami tentang insiden Railway menjelaskan cara merotasi rahasia aplikasimu tanpa downtime.

4. Berhenti memercayai user agent. Kalau kamu meloloskan crawler AI melewati firewall atau rate limit, verifikasi mereka terhadap rentang IP yang dipublikasikan perusahaannya, bukan sekadar mencocokkan nama. GreyNoise mencantumkan file JSON resmi untuk Anthropic, OpenAI, Google dan Perplexity di laporannya. Saran Cequence sama: verifikasi lewat request bertanda tangan, rentang alamat yang dipublikasikan atau integrasi langsung.

5. Patch tooling dev-mu kalau terekspos. GreyNoise juga melihat pemindai ini mencoba bug pembacaan file Vite CVE-2025-30208. Kalau server dev Vite pernah bisa diakses dari internet, upgrade ke 6.2.3, 6.1.2, 6.0.12, 5.4.15 atau 4.5.10 atau lebih baru, dan sejak awal jangan ekspos server dev ke publik.

6. Pasang batas pengeluaran untuk key AI. Sebagian besar penyedia AI memungkinkanmu membatasi pengeluaran bulanan atau membatasi key ke proyek tertentu. Itu tidak mencegah kebocoran, tapi mengubah kejutan empat digit menjadi kejutan kecil.

Checklist singkat

Sebelum menutup terminal, pastikan bahwa:

  • Setiap path di loop curl di atas mengembalikan 404/403, bukan file-mu.
  • .env* ada di .gitignore dan .dockerignore.
  • Server atau host-mu menolak dotfile.
  • Tidak ada secret key di bundle JS atau source map.
  • Setiap key yang pernah bisa diakses sudah dirotasi.
  • Allowlist crawler AI mengecek rentang IP, bukan cuma user agent.
  • Batas pengeluaran sudah dipasang pada key penyedia AI.

Cek sebelum bot melakukannya

Pemindai ini berganti-ganti ratusan alamat dan hanya menghabiskan sekitar delapan detik untuk setiap burst. Kamu tidak akan menang dengan memelototi log. Kamu menang dengan memastikan tidak ada apa-apa di sana saat mereka mengetuk.

AppSafe memeriksa persis kebocoran yang dicari bot-bot ini, termasuk file .env yang bisa diakses, direktori .git yang terekspos, dump database dan API key di bundle frontend-mu, dan setiap temuan dilengkapi prompt perbaikan siap salin untuk AI coding tool-mu. Kalau kamu masih di fase pra-launch, checklist kami untuk aplikasi buatan AI adalah bacaan pendamping yang pas. Jalankan scan gratis untuk aplikasimu dan lihat apa yang dilihat bot.

Jalankan checklist ini secara otomatis

Satu pemindaian gratis memeriksa aplikasimu untuk semua masalah ini dan memberimu prompt perbaikan AI untuk tiap temuan.

Pindai aplikasiku gratis