# What Hacker Can Do with Grafana 8.x Arbitrary File Reading Vulnerability?

>This article in Bahasa, are you looking for English version? Google Translate [here](https://blog-mhrdn-com.translate.goog/what-hacker-can-do-with-grafana-8x-arbitrary-file-reading-vuln?_x_tr_sl=id&_x_tr_tl=en&_x_tr_hl=id).

Grafana adalah sebuah aplikasi web *open source* yang biasanya digunakan sebagai sarana visualisasi pada *monitoring system*. Pertulisan ini dibuat versi terakhir dari Grafana adalah 8.3.0.

![grafana-v8.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1638891552989/daAU9eXq2.png)

Berawal dari sebuah artikel yang ada pada tautan [ini](https://nosec.org/home/detail/4914.html). Artikel tersebut menjelaskan bahwa ada sebuah celah keamanan yang memungkinkan pengguna membaca berkas pada *server* aplikasi Grafana tanpa perlu login. Selama aplikasi bisa diakses dari internet atau bahasa kerennya "*internet accessible*", maka celah keamanan ini bisa dieksploitasi.

> Update: Selang satu hari dari tulisan ini, Grafana menerbitkan press release terkait celah keamanan ini. Sumber masalah dari celah keamanan ini dikategorisasikan sebagai *Path Traversal* ( [CVE-2021-43798](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-43798) ).

Saya mencoba melakukan *PoC (proof of concept)* untuk mengetahui sejauh mana celah ini bisa dieksploitasi. Untuk kebutuhan PoC ini saya menggunakan Docker, dan berikut langkahnya.
```
docker run --rm -ti \
--publish 3000:3000 \
--name grafana \
--env "GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource" \
grafana/grafana-oss:latest
``` 
Perintah di atas menjalankan sebuah *container* `grafana/grafana-oss:latest` dengan nama grafana pada port 3000 dan sekaligus mengaktifkan beberapa *plugin*. Untuk mengetahui apakah aplikasi grafana sudah berhasil dijalankan, silakan buka alamat `http://localhost:3000` pada *browser*. Seharusnya halaman login grafana akan ditampilkan. Namun jika tidak berhasil, silakan liat *log* pada terminal atau docker *dashboard*.

Hal selanjutnya adalah memastikan apakah grafana yang dijalankan masih bisa dieksploitasi dengan celah keamanan ini. Untuk hal ini saya menggunakan [Nuclei ](https://github.com/projectdiscovery/nuclei). Berikut perintah yang saya gunakan ketika menjalankan Nuclei.

```
nuclei \
--templates vulnerabilities/grafana/grafana-file-read.yaml \
--target http://localhost:3000
``` 

![nuclei.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1638895743477/0GLpknT8N.png)

Jika dilihat dari hasil scan nuclei, terlihat bahwa versi terakhir yang saya jalankan (saat tulisan ini dibuat adalah versi 8.3.0) ini bisa dieksploitasi. Tapi mungkin ada pertanyaan seperti ini "*memang hacker bisa apa ya dengan hal ini?*". Jika ditanya demikian, jawabannya menyesuaikan dengan situasi dan kondisi *server* serta kreatifitas *hacker* itu sendiri. Saya akan coba rangkum beberapa poin yang bisa dilakukan *hacker* pada celah keamanan ini, sebagai berikut:

**Dapat membaca hampir semua berkas pada server tempat Grafana terpasang.**

Sesuai dengan nama celah keamanannya "*arbitrary file read*", tentunya *hacker* bisa mengetahui isi dari hampir semua berkas yang ada di *server*. Mengapa saya bilang hampir semua? karena pada kenyataanya aplikasi ini tidak dijalankan dengan level tertinggi (root). Jika aplikasi ini dijalankan dengan hak akses tertinggi (root), maka akibatnya bisa lebih berbahaya lagi. 

Oke sebelum berandai-andai, mari kita bahas hal yang pasti bisa dilakukan pada kondisi standar. Pada kondisi standar aplikasi ini memiliki sebuah file konfigurasi, dan hal inilah yang bisa dimanfaatkan oleh *hacker*. Konfigurasi ini biasanya berada pada direktori `/etc/grafana/` yaitu `grafana.ini` dan `ldap.toml`.

![grafana-conf.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1638896601094/H84ysKbgG.png)

Jika dilihat dari berkas konfigurasinya, ada yang berisi konfigurasi LDAP. LDAP ini biasanya digunakan untuk sarana login terpusat (*single sign-on*). *Hacker*  yang mengetahui informasi LDAP ini, bisa melakukan eksploitasi lebih lanjut. Misalnya, dengan menyerang *server* LDAP atau menggunakan *credentials* LDAP untuk mencuri informasi pengguna lain. 

**Dapat menyerang aplikasi atau *server* lain.**

Tentunya *hacker* akan mencari informasi lain agar dapat meningkatkan serangannya. Misalnya pada contoh ini, hacker bisa mengetahui bahwa Nginx terpasang pada *server* yang sama dengan cara merekues ke berkas `/etc/nginx/nginx.conf`. Berbekal konfigurasi Nginx ini, *hacker* bisa mengetahui lokasi sertifikat SSL yang digunakan. Selanjutnya menggunakan informasi tersebut untuk kebutuhan dekripsi komunikasi pada semua target dengan sertifikat SSL yang sama. 

![nginx-conf.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1638898424757/Qb05v6LDt.png)

Hal lebih buruk bisa terjadi sejalan dengan jumlah aplikasi lain yang terpasang di *server*. Tentunya kemungkinan yang saya sebutkan di atas bisa berkurang atau bertambah. Bisa berkurang atau bahkan tidak bisa dieksploitasi, ketika pengelola *server* sudah melakukan *hardening* secara menyeluruh. Bisa bertambah, ketika hacker mengetahui ada aplikasi atau miskonfigurasi lain yang dapat meningkatkan serangan.

Mengakhiri tulisan ini, saya ingin memberikan opini terkait celah keamanan ini. Celah keamanan seperti ini akan selalu ada dan tidak bisa dihindari. Jika anda pengelola dan pengguna Grafana, sebaiknya tidak membuka akses Grafana ke publik atau internet. Hanya gunakan domain internal atau IP *private* untuk mengaksesnya. Pada dasarnya Grafana ini digunakan untuk kebutuhan *monitoring* yang tidak diperuntukkan untuk konsumsi umum. Bahkan tidak semua orang dalam satu perusahaan perlu hak akses untuk melihat visualisasi data pada Grafana. Namun, jika tidak memungkinkan dengan hanya akses internal, opsi lain bisa gunakan seperti *whitelist IP address*. Hal ini berguna untuk mengurangi pintu masuk *hacker*.

Tabik,
